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()
]),
),
);
}
}