You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
car_common_app/lib/widgets/dropdown/dropdow_field.dart

89 lines
2.8 KiB
Dart

import 'package:flutter/material.dart';
import 'package:mc_common_app/extensions/string_extensions.dart';
import 'package:mc_common_app/theme/colors.dart';
import 'package:mc_common_app/utils/utils.dart';
import 'package:mc_common_app/widgets/extensions/extensions_widget.dart';
class DropValue {
int id;
String value;
String subValue;
DropValue(this.id, this.value, this.subValue);
bool operator ==(o) => o is DropValue && o.value == value && o.id == id;
}
class DropdownField extends StatefulWidget {
final String? hint;
final String errorValue;
final List<DropValue>? list;
final DropValue? dropdownValue;
final Function(DropValue) onSelect;
const DropdownField(this.onSelect, {Key? key, this.hint, this.list, this.dropdownValue, this.errorValue = ""}) : super(key: key);
@override
State<DropdownField> createState() => _DropdownFieldState();
}
class _DropdownFieldState extends State<DropdownField> {
DropValue? dropdownValue;
List<DropValue> defaultV = [
DropValue(1, "One", ""),
DropValue(2, "Two", ""),
];
@override
void initState() {
super.initState();
dropdownValue = widget.dropdownValue;
}
@override
Widget build(BuildContext context) {
return Column(
children: [
Container(
decoration: Utils.containerColorRadiusBorderWidth(MyColors.white, 0, MyColors.darkPrimaryColor, 2),
margin: const EdgeInsets.all(0),
padding: const EdgeInsets.only(left: 8, right: 8),
child: DropdownButton<DropValue>(
value: dropdownValue,
icon: const Icon(Icons.keyboard_arrow_down_sharp),
elevation: 16,
iconSize: 16,
iconEnabledColor: borderColor,
iconDisabledColor: borderColor,
isExpanded: true,
style: const TextStyle(color: Colors.black, fontWeight: FontWeight.w600),
hint: (widget.hint ?? "").toText(color: borderColor, fontSize: 12),
underline: Container(height: 0),
onChanged: (DropValue? newValue) {
setState(() {
dropdownValue = newValue!;
widget.onSelect(newValue);
});
},
items: (widget.list ?? defaultV).map<DropdownMenuItem<DropValue>>(
(DropValue value) {
return DropdownMenuItem<DropValue>(
value: value,
child: value.value.toText(fontSize: 12),
);
},
).toList(),
),
),
if (widget.errorValue != "")
Row(
mainAxisAlignment: MainAxisAlignment.end,
children: [
widget.errorValue.toText(fontSize: 14, color: Colors.red),
],
).paddingOnly(right: 10),
],
);
}
}