Membuat Register Form di Flutter


Register form atau formulir pendaftaran adalah suatu bentuk atau formulir yang biasanya ditempatkan di sebuah situs web untuk memungkinkan pengguna membuat akun atau mendaftar sebagai anggota.Tujuan dari formulir pendaftaran ini adalah untuk mengumpulkan informasi dasar dari pengguna sehingga mereka dapat memiliki akses yang lebih luas ke layanan atau fitur tertentu di situs tersebut.

Pada artikel ini saya akan menjelaskan langkah langkah untuk membuat sebuah Halaman Register yang berisi input nama, username, email, dan password

Langkah pertama adalah membuat sebuah database dan sebuah file php untuk melakukan koneksi dengan database tersebut

<?php

include 'koneksi.php';

if($_SERVER['REQUEST_METHOD'] == "POST") {

	$response = array();
	$username = $_POST['username'];
	$password = md5($_POST['password']);
	$fullname = $_POST['fullname'];
	$email = $_POST['email'];

	$cek = "SELECT * FROM users WHERE username = '$username' || email = '$email'";
	$result = mysqli_fetch_array(mysqli_query($koneksi, $cek));

	if(isset($result)){
		$response['value'] = 2;
		$response['message'] = "Username atau email telah digunakan";
		echo json_encode($response);
	} else {
		$insert = "INSERT INTO users VALUE(NULL, '$username', '$email', '$password', '$fullname', NOW())";
		if(mysqli_query($koneksi, $insert)){
			$response['value'] = 1;
			$response['message'] = "Berhasik didaftarkan";
			echo json_encode($response);
		} else {
			$response['value'] = 0;
			$response['message'] = "Gagal didaftarkan";
			echo json_encode($response);
		}
	}
}

?>

Buka postman lalu coba koneksi

Setelah membuat akun menggunakan postman berhasil , langsung saja buat file dart dengan nama register_screen.dart, berikut adalah isi kodenya

import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:http/http.dart' as http;
import 'package:new_flutter/auth/login_screen.dart';
import 'package:new_flutter/api/api.dart';
import 'package:new_flutter/response/res_register.dart';

class RegisterScreen extends StatefulWidget {
  const RegisterScreen({super.key});

  @override
  State<RegisterScreen> createState() => _RegisterScreenState();
}

class _RegisterScreenState extends State<RegisterScreen> {
  TextEditingController fullname = TextEditingController();
  TextEditingController username = TextEditingController();
  TextEditingController email = TextEditingController();
  TextEditingController pass = TextEditingController();
  GlobalKey<FormState> key = GlobalKey<FormState>();

  bool isRegister = false;
  Future<ResRegisterUser?> registerUser() async {
    try {
      setState(() {
        isRegister = true;
      });
      http.Response res =
          await http.post(Uri.parse("${Api.baseUrl}register.php"), body: {
        "username": username.text,
        "password": pass.text,
        "fullname": fullname.text,
        "email": email.text
      });
      ResRegisterUser data = resRegisterFromJson(res.body);
      if (data.value == 1) {
        setState(() {
          isRegister = false;
          Navigator.pushAndRemoveUntil(
              context,
              MaterialPageRoute(builder: (_) => const LoginScreen()),
              (route) => false);
        });
      } else if (data.value == 2) {
        setState(() {
          isRegister = false;
          ScaffoldMessenger.of(context)
              .showSnackBar(SnackBar(content: Text("${data.message}")));
        });
      } else {
        setState(() {
          isRegister = false;
          ScaffoldMessenger.of(context)
              .showSnackBar(SnackBar(content: Text("${data.message}")));
        });
      }
    } catch (e, st) {
      setState(() {
        isRegister = false;
        ScaffoldMessenger.of(context)
            .showSnackBar(SnackBar(content: Text(e.toString())));
        print("Error ${st.toString()}");
      });
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Center(
        child: Form(
          key: key,
          child: Padding(
            padding: const EdgeInsets.all(16.0),
            child: Column(
              crossAxisAlignment: CrossAxisAlignment.start,
              mainAxisAlignment: MainAxisAlignment.center,
              children: [
                Text(
                  "REGISTER".toUpperCase(),
                  style: const TextStyle(
                      fontWeight: FontWeight.bold, fontSize: 25),
                ),
                const SizedBox(
                  height: 35,
                ),
                TextFormField(
                  controller: fullname,
                  validator: (val) {
                    return val!.isEmpty ? "tidak boleh kosong" : null;
                  },
                  decoration: InputDecoration(
                      hintText: "FULLNAME",
                      border: OutlineInputBorder(
                          borderRadius: BorderRadius.circular(6),
                          borderSide: BorderSide.none),
                      fillColor: Colors.green.withOpacity(0.2),
                      filled: true),
                ),
                const SizedBox(
                  height: 8,
                ),
                TextFormField(
                  controller: username,
                  validator: (val) {
                    return val!.isEmpty ? "tidak boleh kosong" : null;
                  },
                    decoration: InputDecoration(
                      hintText: "USERNAME",
                      border: OutlineInputBorder(
                        borderSide: BorderSide.none,
                        borderRadius: BorderRadius.circular(6)),
                      filled: true,
                      fillColor: Colors.green.withOpacity(0.2)),
                ),
                const SizedBox(
                  height: 8,
                ),
                TextFormField(
                  controller: email,
                  validator: (val){
                    return val!.isEmpty ? "tidak boleh kosong" : null;
                  },
                  decoration: InputDecoration(
                    hintText: "EMAIL",
                    border: OutlineInputBorder(
                      borderRadius: BorderRadius.circular(6),
                      borderSide: BorderSide.none),
                    fillColor: Colors.green.withOpacity(0.2),
                    filled: true),
                ),
                const SizedBox(
                  height: 8,
                ),
                TextFormField(
                  controller: pass,
                  validator: (val){
                    return val!.isEmpty ? "tidak boleh kosong" : null;
                  },
                  obscureText: true,
                  decoration: InputDecoration(
                    hintText: "PASSWORD",
                    border: OutlineInputBorder(
                      borderSide: BorderSide.none,
                      borderRadius: BorderRadius.circular(6)),
                    filled: true,
                    fillColor: Colors.green.withOpacity(0.2)),
                ),
                const SizedBox(
                  height: 25,
                ),
                MaterialButton(
                  shape: RoundedRectangleBorder(
                    borderRadius: BorderRadius.circular(6)),
                  height: 45,
                  minWidth: 150,
                  onPressed: () async{
                    if(key.currentState!.validate()){
                      await registerUser();
                    }
                  },
                  color: Colors.green,
                  textColor: Colors.white,
                  child: const Text("REGISTER"),
                )
              ],
            ),
          ),
        ),
      ),
      bottomNavigationBar: Padding(
        padding: const EdgeInsets.all(8.0),
        child: MaterialButton(
          onPressed: (){
            Navigator.pushAndRemoveUntil(context,
            MaterialPageRoute(builder: (_) => const LoginScreen()),
            (route) => false);
          },
          color: Colors.white,
          textColor: Colors.green,
          shape: RoundedRectangleBorder(
            borderRadius: BorderRadius.circular(6),
            side: const BorderSide(width: 1, color:Colors.green)),
          child: const Text("anda sudah punya akun ? silahkan login"),
        ),
      ),
    );
  }
}

Berikut adalah baris kode yang memanggil file php tadi

await http.post(Uri.parse("${Api.baseUrl}register.php"),

Untuk base url nya adalah berikut

static String baseUrl ="http://192.168.0.167/beritadb/";

Maka register Form yang dibuat telah siap untuk dipakai

Subscribe

Related articles

Membuat Design Form Login & Register Hi-Fi (Hight-Fidelity)

  Langkah - langkah membuat Hight-Fidelity pada UI “Login” seperti...

Mengenal Fitur Pada Figma

Figma memiliki fungsi yang berbeda dengan aplikasi desain grafis...

4 Karateristik Utama Yang Baik Pada UX

Apa yang membuat suatu produk efektif bagi penggunanya? Jawabannya berbeda-beda...

Mengenal UI/UX Dan Perbedaannya

Ap aitu UI/UX? UI (User Interface) dan UX (User Experience)...

Mengenal Display Properti Pada CSS

Display property dalam CSS adalah untuk mengontrol tipe tata...

LEAVE A REPLY

Please enter your comment!
Please enter your name here