cashumit/lib/widgets/store_info_config_dialog.dart

146 lines
4.9 KiB
Dart

import 'package:flutter/material.dart';
import 'package:shared_preferences/shared_preferences.dart';
/// Widget untuk dialog konfigurasi informasi toko
class StoreInfoConfigDialog extends StatefulWidget {
const StoreInfoConfigDialog({super.key});
@override
State<StoreInfoConfigDialog> createState() => _StoreInfoConfigDialogState();
}
class _StoreInfoConfigDialogState extends State<StoreInfoConfigDialog> {
final _formKey = GlobalKey<FormState>();
// Inisialisasi controller dengan nilai default
final TextEditingController _storeNameController = TextEditingController();
final TextEditingController _storeAddressController = TextEditingController();
final TextEditingController _adminNameController = TextEditingController();
final TextEditingController _adminPhoneController = TextEditingController();
@override
void initState() {
super.initState();
_loadStoreInfo();
}
/// Memuat informasi toko dari shared preferences
Future<void> _loadStoreInfo() async {
final prefs = await SharedPreferences.getInstance();
// Set nilai teks controller setelah mendapatkan data
setState(() {
_storeNameController.text = prefs.getString('store_name') ?? 'TOKO SEMBAKO MURAH';
_storeAddressController.text = prefs.getString('store_address') ?? 'Jl. Merdeka No. 123';
_adminNameController.text = prefs.getString('admin_name') ?? 'Budi Santoso';
_adminPhoneController.text = prefs.getString('admin_phone') ?? '08123456789';
});
}
/// Menyimpan informasi toko ke shared preferences
Future<void> _saveStoreInfo() async {
if (_formKey.currentState!.validate()) {
final prefs = await SharedPreferences.getInstance();
await prefs.setString('store_name', _storeNameController.text);
await prefs.setString('store_address', _storeAddressController.text);
await prefs.setString('admin_name', _adminNameController.text);
await prefs.setString('admin_phone', _adminPhoneController.text);
if (mounted) {
Navigator.of(context).pop(true); // Kembali dengan nilai true jika berhasil disimpan
}
}
}
@override
void dispose() {
_storeNameController.dispose();
_storeAddressController.dispose();
_adminNameController.dispose();
_adminPhoneController.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return AlertDialog(
title: const Text('Konfigurasi Info Toko'),
content: Form(
key: _formKey,
child: SingleChildScrollView(
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
TextFormField(
controller: _storeNameController,
decoration: const InputDecoration(
labelText: 'Nama Toko',
border: OutlineInputBorder(),
),
validator: (value) {
if (value == null || value.isEmpty) {
return 'Mohon masukkan nama toko';
}
return null;
},
),
const SizedBox(height: 16),
TextFormField(
controller: _storeAddressController,
decoration: const InputDecoration(
labelText: 'Alamat Toko',
border: OutlineInputBorder(),
),
validator: (value) {
if (value == null || value.isEmpty) {
return 'Mohon masukkan alamat toko';
}
return null;
},
),
const SizedBox(height: 16),
TextFormField(
controller: _adminNameController,
decoration: const InputDecoration(
labelText: 'Nama Admin',
border: OutlineInputBorder(),
),
validator: (value) {
if (value == null || value.isEmpty) {
return 'Mohon masukkan nama admin';
}
return null;
},
),
const SizedBox(height: 16),
TextFormField(
controller: _adminPhoneController,
decoration: const InputDecoration(
labelText: 'No. Telp Admin',
border: OutlineInputBorder(),
),
validator: (value) {
if (value == null || value.isEmpty) {
return 'Mohon masukkan no. telp admin';
}
return null;
},
),
],
),
),
),
actions: [
TextButton(
onPressed: () => Navigator.of(context).pop(false), // Kembali dengan nilai false jika dibatalkan
child: const Text('Batal'),
),
ElevatedButton(
onPressed: _saveStoreInfo,
child: const Text('Simpan'),
),
],
);
}
}