[text] 2.33

Viewer

  1. import 'package:flutter/material.dart';
  2. import 'package:rangga/contact_service.dart';
  3.  
  4. class EditForm extends StatefulWidget {
  5.   final Map<dynamic, dynamic> data;
  6.  
  7.   //constructor berfungsi untuk menerima data
  8.   //yang dikirim dari file yang menggunakannya
  9.   EditForm({required this.data});
  10.  
  11.   @override
  12.   State<EditForm> createState() => _EditFormState();
  13. }
  14.  
  15. class _EditFormState extends State<EditForm> {
  16.   //inisialisasi variabel untuk form
  17.   final _formKey = GlobalKey<FormState>();
  18.   TextEditingController name = TextEditingController();
  19.   TextEditingController gender = TextEditingController();
  20.   TextEditingController email = TextEditingController();
  21.   TextEditingController phone = TextEditingController();
  22.   TextEditingController address = TextEditingController();
  23.   TextEditingController hobby = TextEditingController();
  24.  
  25.   //kita akan menggunakan method dari class Transaction, jadi harus inisialisasi dulu
  26.   ContactService contactService = ContactService();
  27.  
  28.   @override
  29.   void initState() {
  30.     super.initState();
  31.  
  32.     //letakkan fungsi atau method yang ingin dijalankan pertama kali
  33.     //saat file ini dilload/dijalankan
  34.     initializeControllers();
  35.     // Memanggil fungsi initializeControllers saat initState dipanggil
  36.   }
  37.  
  38.   //isi/set form dengan data yang dikirim dari file sebelumnya
  39.   void initializeControllers() {
  40.     name.text = widget.data['name']!;
  41.     gender.text = widget.data['gender']!;
  42.     email.text = widget.data['email']!;
  43.     phone.text = widget.data['phone']!;
  44.     address.text = widget.data['address']!;
  45.     hobby.text = widget.data['hobby']!;
  46.     // Menetapkan nilai awal pada TextEditingController berdasarkan data yang diberikan
  47.   }
  48.  
  49.   @override
  50.   Widget build(BuildContext context) {
  51.     return Scaffold(
  52.       appBar: AppBar(
  53.         title: Text('Form Update Data'),
  54.       ),
  55.       body: SingleChildScrollView(
  56.         padding: EdgeInsets.all(16),
  57.         child: Form(
  58.           // key adalah kunci unik untuk mengidentifikasi suatu form
  59.           // di bawah key ini tambahkan widget sesuai selera kalian
  60.           key: _formKey,
  61.           child: Column(
  62.             crossAxisAlignment: CrossAxisAlignment.stretch,
  63.             children: [
  64.               TextFormField(
  65.                 decoration: InputDecoration(labelText: 'Nama'),
  66.                 controller: name,
  67.                 validator: (value) {
  68.                   if (value!.isEmpty) {
  69.                     return 'Masukan Nama';
  70.                   }
  71.                   return null;
  72.                 },
  73.               ),
  74.               SizedBox(
  75.                 height: 15,
  76.               ),
  77.               DropdownButtonFormField<String>(
  78.                 value: gender.text,
  79.                 items: ['Laki-Laki', 'Perempuan'].map((String option) {
  80.                   return DropdownMenuItem<String>(
  81.                     value: option,
  82.                     child: Text(option),
  83.                   );
  84.                 }).toList(),
  85.                 onChanged: (String? newValue) {
  86.                   setState(() {
  87.                     gender.text = newValue!;
  88.                   });
  89.                 },
  90.                 decoration: InputDecoration(
  91.                   labelText: 'Jenis Kelamin',
  92.                 ),
  93.               ),
  94.               SizedBox(
  95.                 height: 15,
  96.               ),
  97.               TextFormField(
  98.                 decoration: InputDecoration(labelText: 'Email'),
  99.                 controller: email,
  100.                 keyboardType: TextInputType.emailAddress,
  101.                 validator: (value) {
  102.                   if (value!.isEmpty) {
  103.                     return 'Masukan Email';
  104.                   }
  105.                   return null;
  106.                 },
  107.               ),
  108.               SizedBox(
  109.                 height: 15,
  110.               ),
  111.               TextFormField(
  112.                 decoration: InputDecoration(labelText: 'Nomor Handphone'),
  113.                 controller: phone,
  114.                 keyboardType: TextInputType.phone,
  115.                 validator: (value) {
  116.                   if (value!.isEmpty) {
  117.                     return 'Masukan Nomor Handphone';
  118.                   }
  119.                   return null;
  120.                 },
  121.               ),
  122.               SizedBox(
  123.                 height: 15,
  124.               ),
  125.               TextFormField(
  126.                 decoration: InputDecoration(labelText: 'Alamat'),
  127.                 controller: address,
  128.                 validator: (value) {
  129.                   if (value!.isEmpty) {
  130.                     return 'Masukan Alamat';
  131.                   }
  132.                   return null;
  133.                 },
  134.               ),
  135.               SizedBox(
  136.                 height: 15,
  137.               ),
  138.               TextFormField(
  139.                 decoration: InputDecoration(labelText: 'Hobi'),
  140.                 controller: hobby,
  141.                 validator: (value) {
  142.                   if (value!.isEmpty) {
  143.                     return 'Masukan Hobi';
  144.                   }
  145.                   return null;
  146.                 },
  147.               ),
  148.               SizedBox(
  149.                 height: 15,
  150.               ),
  151.               ElevatedButton(
  152.                 onPressed: () {
  153.                   if (_formKey.currentState!.validate()) {
  154.                     contactService.updateData(
  155.                         name.text,
  156.                         gender.text,
  157.                         email.text,
  158.                         phone.text,
  159.                         address.text,
  160.                         hobby.text,
  161.                         widget.data['id']);
  162.                     Navigator.of(context).pushNamedAndRemoveUntil(
  163.                       '/',
  164.                       (Route<dynamic> route) =>
  165.                           false, // Ini akan menghapus semua halaman sebelumnya dari tumpukan navigasi.
  166.                     );
  167.                   }
  168.                 },
  169.                 child: Text('Update Data'),
  170.               )
  171.             ],
  172.           ),
  173.         ),
  174.       ),
  175.     );
  176.   }
  177. }

Editor

You can edit this paste and save as new:


File Description
  • 2.33
  • Paste Code
  • 11 Dec-2023
  • 5.93 Kb
You can Share it: