Forum | Camp 404

CAMP404 FORUM

aplikasi tidak terinstall padahal tidak ada error

Oleh Cinta Sang Diva Anandya 2 tahun yang lalu
Flutter | Flutter Fundamentals

ini adalah code yang saya ikuti dari penjelasan slide bagian 2 "menggunakan basisdata SQLite". 
terjadi beberapa error pada saat memasukkan fungsi lastID. Pada bagian pembuatan Form tidak ada error dan berjalan dengan baik, namun setelah memasukan lastID dan Future pada code, muncul beberapa error, namun error nya sudah saya coba ulik dan sudah tidak ada error. Namun setelah si run aplikasi tidak kunjung terbuat.


ini adalah code yang saya run, saya tidak tau salah nya dimana karena ga ada eror
Terimakasih kak

import 'package:flutter/material.dart';
import 'package:intl/intl.dart';
import 'package:prakteksqlite/helper/dbhelper.dart';

class PelangganForm extends StatefulWidget {
  @override
  _PelangganFormState createState() => _PelangganFormState();
}

class _PelangganFormState extends State<PelangganForm> {
  late TextEditingController txtID, txtNama, txtTgllhr;
  String gender = '';

  _PelangganFormState() {
    txtID = TextEditingController();
    txtNama = TextEditingController();
    txtTgllhr = TextEditingController();

    lastID().then((value) {
      txtID.text = '${value + 1}';
    });
  }
  lastID() {}
  Widget txtInputID() => TextFormField(
      controller: txtID,
      readOnly: true,
      decoration: InputDecoration(labelText: 'ID Pelanggan'));

  Widget txtInputNama() => TextFormField(
      controller: txtNama,
      decoration: InputDecoration(labelText: 'Nama Pelanggan'));

  Widget dropDownGender() => DropdownButtonFormField(
          decoration: InputDecoration(labelText: 'Jenis Kelamin'),
          isExpanded: true,
          value: gender,
          onChanged: (g) {
            gender = '$g';
          },
          items: [
            DropdownMenuItem(child: Text('Pilih Gender'), value: ''),
            DropdownMenuItem(child: Text('Laki-Laki'), value: 'L'),
            DropdownMenuItem(child: Text('Perempuan'), value: 'P'),
          ]);

  DateTime iniTgllhr() {
    try {
      return DateFormat('yyyy-MM-dd').parse(txtTgllhr.value.text);
    } catch (e) {}
    return DateTime.now();
  }

  Widget txtInputTgllhr() => TextFormField(
        readOnly: true,
        decoration: InputDecoration(labelText: 'Tanggal Lahir'),
        controller: txtTgllhr,
        onTap: () async {
          Future<int> lastID() async {
            try {
              final _db = await DBHelper.db();
              final query = 'SELECT MAX(id) as id FROM pelanggan';
              final ls = (await _db?.rawQuery(query))!;

              if (ls.length > 0) {
                return int.tryParse('${ls[0]['id']}') ?? 0;
              }
            } catch (e) {
              print('error lastid $e');
            }
            return 0;
          }

          final tgl = await showDatePicker(
              context: context,
              initialDate: iniTgllhr(),
              firstDate: DateTime(1900),
              lastDate: DateTime.now());

          if (tgl != null)
            txtTgllhr.text = DateFormat('yyyy-MM-dd').format(tgl);
        },
      );

  Widget aksiSimpan() => TextButton(
        onPressed: () {
          Future<bool> simpanData() async {
            try {
              final _db = await DBHelper.db();
              var data = {
                'id': txtID.value.text,
                'nama': txtNama.value.text,
                'gender': gender,
                'tgl_lhr': txtTgllhr.value.text,
              };
              final id = await _db?.insert('pelanggan', data);
              return id! > 0;
            } catch (e) {}
            return false;
          }

          simpanData().then((h) {
            var pesan = h == true ? 'Sukses simpan' : 'Gagal simpan';

            showDialog(
                context: context,
                builder: (bc) => AlertDialog(
                      title: Text('Simpan Pelanggan'),
                      content: Text('$pesan'),
                      actions: [
                        TextButton(
                            onPressed: () {
                              Navigator.pop(context);
                            },
                            child: Text('Okeee..'))
                      ],
                    ));
          });
        },
        child: Text('Simpan', style: TextStyle(color: Colors.white)),
      );

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Form Pelanggan'),
        actions: [aksiSimpan()],
      ),
      body: Padding(
        padding: const EdgeInsets.all(18.0),
        child: Column(children: [
          txtInputID(),
          txtInputNama(),
          dropDownGender(),
          txtInputTgllhr()
        ]),
      ),
    );
  }
}

0 Jawaban