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_customer_app/lib/widgets/dropdown/dropdow_field.dart

84 lines
2.3 KiB
Dart

import 'package:car_customer_app/extensions/string_extensions.dart';
import 'package:car_customer_app/theme/colors.dart';
import 'package:car_customer_app/utils/utils.dart';
import 'package:flutter/material.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 {
String? hint;
List<DropValue>? list;
DropValue? dropdownValue;
Function(DropValue) onSelect;
DropdownField(this.onSelect, {Key? key, this.hint, this.list,this.dropdownValue}) : 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 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(),
),
);
}
}