BBM-Tracking/lib/pages/kendaraan/form-update-kendaraan/form-update.dart

421 lines
13 KiB
Dart

import 'package:animated_custom_dropdown/custom_dropdown.dart';
import 'package:bbm_tracking/bloc/bbm_bloc.dart';
import 'package:bbm_tracking/model/kendaraan_m.dart';
import 'package:bbm_tracking/pages/component/success_dialog_box.dart';
import 'package:bbm_tracking/pages/home.dart';
import 'package:bbm_tracking/pages/mainMenu/index.dart';
import 'package:bbm_tracking/resource/resource.dart';
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:intl/intl.dart';
class FormUpdateKendaraan extends StatefulWidget {
KendaraanModel kendaraan;
FormUpdateKendaraan({super.key, required this.kendaraan});
@override
State<FormUpdateKendaraan> createState() => _FormUpdateKendaraanState();
}
class _FormUpdateKendaraanState extends State<FormUpdateKendaraan> {
late KendaraanModel kendaraan;
late String selectedValueBensin;
late KendaraanModel kendaraanModel;
bool _submitted = false;
final tipeKendaraanController = TextEditingController();
final dateController = TextEditingController();
final kilometerController = TextEditingController();
final jenisBBMController = TextEditingController();
final kepemilikanController = TextEditingController();
final nomorPlatController = TextEditingController();
final ccController = TextEditingController();
@override
void initState() {
super.initState();
kendaraan = widget.kendaraan;
tipeKendaraanController.text = kendaraan.namaKendaraan;
kilometerController.text = kendaraan.odometer;
jenisBBMController.text = kendaraan.bahanBakar;
kepemilikanController.text = kendaraan.kepemilikan;
nomorPlatController.text = kendaraan.nomorPlat;
ccController.text = kendaraan.cc.toString();
print(kendaraan.jenisKendaraan);
}
void _submit() {
setState(() {
_submitted = true;
});
if (tipeKendaraanController.value.text != "" &&
dateController.value.text != "" &&
kilometerController.value.text != "" &&
jenisBBMController.value.text != "" &&
kepemilikanController.value.text != "" &&
nomorPlatController.value.text != "" &&
ccController.value.text != "") {
kendaraanModel = KendaraanModel(
id: kendaraan.id,
jenisKendaraan: kendaraan.jenisKendaraan,
namaKendaraan: tipeKendaraanController.value.text,
nomorPlat: nomorPlatController.value.text,
bahanBakar: jenisBBMController.value.text,
cc: int.parse(ccController.value.text),
odometer: kilometerController.value.text,
kepemilikan: kepemilikanController.value.text,
status: kendaraan.status,
);
context.read<BbmBloc>().add(BBMDataKendaraanUpdated(kendaraanModel));
Navigator.of(context).pushReplacement(MaterialPageRoute(
builder: (context) => Home("", ""),
));
showDialog(
context: context,
builder: (BuildContext context) {
return SuccessDialogBox(deskripsi: "Berhasil Mengubah Data");
},
);
}
}
@override
void dispose() {
// TODO: implement dispose
super.dispose();
tipeKendaraanController.dispose();
dateController.dispose();
kilometerController.dispose();
jenisBBMController.dispose();
kepemilikanController.dispose();
nomorPlatController.dispose();
ccController.dispose();
}
List<String> listNamaBensin = List.from(listBensin.map((e) => e.text));
List<String> listKepemilikan = [
'Pribadi',
'Perusahaan',
'Sewa',
'Lainnya',
];
// listBensin.map
Future<bool> _onWillPop() async {
Navigator.pop(context);
return false;
}
@override
Widget build(BuildContext context) {
return WillPopScope(
onWillPop: () => _onWillPop(),
child: Scaffold(
backgroundColor: Color(0xffE3EAEA),
body: SingleChildScrollView(
child: Container(
child: Padding(
padding: EdgeInsets.all(10),
child: Column(
children: [
SizedBox(
height: 55,
),
Container(
width: double.infinity,
margin: EdgeInsets.only(top: 10),
child: Text(
"Data Pribadi Kendaraan Anda",
style: TextStyle(
fontFamily: 'Poppins',
fontWeight: FontWeight.w500,
fontSize: 16,
color: Color(0xff3B3C48),
),
),
),
Divider(
color: Color(0xFF1A0F0F3D),
height: 2,
thickness: 2,
),
SizedBox(
height: 15,
),
Card(),
SizedBox(
height: 15,
),
Container(
child: Column(
crossAxisAlignment: CrossAxisAlignment.end,
children: [
inputField(
"Tipe Kendaraan",
"Type Of Brand",
"text",
tipeKendaraanController,
),
dropdownField(
"Jenis Bahan Bakar",
listNamaBensin,
jenisBBMController,
),
dropdownField(
"Kepemilikan",
listKepemilikan,
kepemilikanController,
),
inputField(
"Data Penerimaan Kendaraan",
"MM/DD/YYYY",
"date",
dateController,
),
inputField(
"Kilometers Kendaraan",
"0 Km",
"number",
kilometerController,
),
inputField(
"CC Kendaraan",
"CC",
"number",
ccController,
),
inputField(
"Nomor Plat Kendaraan",
"Contoh : XX XXXX XXX",
"text",
nomorPlatController,
),
SaveButton(),
Padding(
padding: EdgeInsets.only(
bottom: MediaQuery.of(context).viewInsets.bottom,
),
),
],
),
),
],
),
),
),
),
),
);
}
String? _errorText(TextEditingController controller) {
var val = controller.value.text.isEmpty ? "Tidak Boleh Kosong" : null;
return val;
}
Widget Card() {
return Container(
height: 75,
width: double.infinity,
decoration: BoxDecoration(
borderRadius: BorderRadius.all(
Radius.circular(8),
),
color: Color(0xFFDDB05E),
),
child: Row(
children: [
SizedBox(
width: 20,
),
Image.asset(
kendaraan.jenisKendaraan == "motor"
? "assets/images/motor.png"
: "assets/images/car.png",
width: 50,
height: 50,
),
SizedBox(
width: 20,
),
Text(
kendaraan.jenisKendaraan == "motor" ? "Motor" : "Mobil",
style: TextStyle(
fontFamily: 'Poppins',
fontSize: 15,
color: Color(0xFF1A0F0F),
),
)
],
),
);
}
Widget SaveButton() {
return InkWell(
onTap: _submit,
child: Container(
width: 90,
height: 35,
margin: EdgeInsets.only(
top: 10,
),
padding: EdgeInsets.only(
top: 7,
),
decoration: BoxDecoration(
color: Color(0xFF2ECC71),
borderRadius: BorderRadius.all(
Radius.circular(8),
),
),
child: Text(
"Save Data",
style: TextStyle(
fontFamily: 'Poppins',
fontWeight: FontWeight.w500,
color: Colors.white,
fontSize: 15,
),
textAlign: TextAlign.center,
),
),
);
}
Widget dropdownField(title, data, TextEditingController controller) {
return Container(
child: Column(
mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
SizedBox(
height: 10,
),
Text(
title,
style: TextStyle(
color: Color(0xFF1A0F0F),
fontFamily: 'Poppins',
fontSize: 12,
fontWeight: FontWeight.w400,
),
),
title != "Kepemilikan"
? CustomDropdown.search(
fillColor: Color(0xffE3EAEA),
borderSide: BorderSide(
color: Color(0xFF677D81),
),
hintStyle: TextStyle(
fontFamily: 'Poppins',
fontSize: 11,
fontWeight: FontWeight.w400,
),
errorText: _submitted ? _errorText(controller) : null,
items: data,
controller: controller,
)
: CustomDropdown(
fillColor: Color(0xffE3EAEA),
borderSide: BorderSide(
color: Color(0xFF677D81),
),
hintStyle: TextStyle(
fontFamily: 'Poppins',
fontSize: 11,
fontWeight: FontWeight.w400,
),
items: data,
controller: controller,
),
],
),
);
}
Widget inputField(title, hint, typeField, TextEditingController controller) {
return Container(
child: Column(
mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
SizedBox(
height: 10,
),
Text(
title,
style: TextStyle(
color: Color(0xFF1A0F0F),
fontFamily: 'Poppins',
fontSize: 12,
fontWeight: FontWeight.w400,
),
),
TextField(
textCapitalization: title == "Nomor Plat Kendaraan"
? TextCapitalization.characters
: title == "Kendaraan"
? TextCapitalization.characters
: TextCapitalization.none,
maxLength: title == "Nomor Plat Kendaraan" ? 11 : 100,
controller: controller,
readOnly: typeField == "date" && true,
keyboardType: typeField != "date" && typeField != "text"
? TextInputType.number
: TextInputType.text,
decoration: InputDecoration(
border: OutlineInputBorder(
borderRadius: BorderRadius.all(
Radius.circular(12),
),
borderSide: BorderSide(
color: Color(0xFF677D81),
),
),
// border: BoxDecoration(border:),
contentPadding: EdgeInsets.only(
top: 4,
bottom: 4,
left: 15,
right: 15,
),
hintText: hint,
hintStyle: TextStyle(
fontFamily: 'Poppins',
color: Color(0xFFAEAEAE),
fontSize: 10,
fontWeight: FontWeight.w400,
),
errorText: _submitted ? _errorText(controller) : null,
),
onTap: () async {
if (typeField == "date") {
DateTime? pickedDate = await showDatePicker(
context: context,
initialDate: DateTime.now(),
firstDate: DateTime(2000),
lastDate: DateTime(2024),
);
if (pickedDate != null) {
String formattedDate =
DateFormat('yyyy-MM-dd').format(pickedDate);
setState(
() {
controller.text =
formattedDate; //set foratted date to TextField value.
},
);
}
}
},
),
],
),
);
}
}