fix: component select form

This commit is contained in:
2024-02-19 15:24:36 +07:00
parent d66a9e3435
commit 4f50dc951a
3 changed files with 107 additions and 81 deletions

View File

@@ -25,7 +25,6 @@ class SelectFormView extends StatelessWidget {
final String? hintText;
final TextStyle? hintTextStyle;
final TextEditingController? ctrl;
final Widget? bottomSheetTitle;
final List<ItemSelectForm> listItem;
final ValueChanged<String> onSelect;
final FormFieldValidator<String>? validator;
@@ -37,7 +36,6 @@ class SelectFormView extends StatelessWidget {
this.hintText,
this.hintTextStyle,
this.ctrl,
this.bottomSheetTitle,
required this.listItem,
required this.onSelect,
this.validator,
@@ -56,14 +54,6 @@ class SelectFormView extends StatelessWidget {
),
),
builder: (BuildContext context) {
ItemSelectForm? selectedForm;
String? selectedKey;
if (listItem.isNotEmpty) {
var res = listItem.where((element) => element.key == selectedKey);
if (res.isNotEmpty) {
selectedForm = res.first;
}
}
return StatefulBuilder(builder: (
BuildContext context,
StateSetter stateSetter,
@@ -74,30 +64,54 @@ class SelectFormView extends StatelessWidget {
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
bottomSheetTitle ?? Container(),
// const SizedBox(height: 16),
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Text(
name,
style: const TextStyle(
color: ColorPalette.slate800,
fontSize: 16,
fontWeight: FontWeight.w600,
),
),
IconButton(
onPressed: () => Navigator.pop(context),
icon: const Icon(
Icons.clear,
size: 26,
color: ColorPalette.greyBase,
)),
],
),
const SizedBox(height: 16),
Expanded(
child: SingleChildScrollView(
scrollDirection: Axis.vertical,
child: Column(
children: [
...listItem.map(
(e) => Card(
...listItem.map((e) {
bool selected = e.text == ctrl?.text;
return Card(
elevation: 0,
color: Colors.transparent,
shape: const RoundedRectangleBorder(
shape: RoundedRectangleBorder(
side: BorderSide(
color: ColorPalette.greyBorder,
color: selected
? ColorPalette.primary
: ColorPalette.greyBorder,
),
borderRadius:
BorderRadius.all(Radius.circular(12)),
const BorderRadius.all(Radius.circular(12)),
),
child: ListTile(
title: Text(
e.text,
style: const TextStyle(
fontSize: 14,
),
style: TextStyle(
fontSize: 14,
color: selected
? ColorPalette.primary
: ColorPalette.slate500),
),
subtitle: e.description != null
? Text(
@@ -106,37 +120,19 @@ class SelectFormView extends StatelessWidget {
overflow: TextOverflow.ellipsis,
)
: null,
// trailing: const Icon(
// Icons.check_circle,
// color: ColorPalette.primary,
// ),
trailing: Radio(
focusColor: ColorPalette.primary,
activeColor: ColorPalette.primary,
visualDensity: const VisualDensity(
horizontal: VisualDensity.minimumDensity,
vertical: VisualDensity.minimumDensity,
),
materialTapTargetSize:
MaterialTapTargetSize.shrinkWrap,
value: e.key,
groupValue: selectedKey,
onChanged: (value) {
// selectedForm =
// ItemSelectForm(e.key, e.text);
// stateSetter(() {
// selectedKey = selectedForm!.key;
// });
},
),
trailing: selected
? const Icon(Icons.check_circle_rounded,
color: ColorPalette.primary)
: null,
onTap: () {
ctrl?.text = e.text;
onSelect(e.key);
Navigator.of(context).pop();
stateSetter(() {
ctrl?.text = e.text;
onSelect(e.key);
});
},
),
),
),
);
}),
],
),
),
@@ -145,7 +141,7 @@ class SelectFormView extends StatelessWidget {
name: 'Select',
marginVertical: 4.0,
onPressed: () {
// print('object $')
Navigator.pop(context);
},
)
],