Comments (2)
Can you try this using the last version 3.0.0-beta.6
?
If you still have an issue, you can share a minimal working sample.
from dropdown_button2.
Thy it works now!
The guy who implemented dropdownSeparator
saved my live :)
Here is my approach:
class TextDropDownFormField extends ConsumerStatefulWidget {
final List<KeyValuePair> keyValueList;
final String? Function(String?)? validator;
final FloatingInputDecoration inputDecoration;
final TextStyle listTextStyle;
final TextEditingController controller;
final String searchHint;
static const double menuItemHeight = 50.0;
String? selected;
TextDropDownFormField(
{required List<KeyValuePair> this.keyValueList,
required this.validator,
required this.inputDecoration,
required this.listTextStyle,
required this.controller,
required this.searchHint,
Key? key})
: super(key: key);
@override
TextDropDownFormFieldState createState() => TextDropDownFormFieldState();
}
class TextDropDownFormFieldState extends ConsumerState<TextDropDownFormField> {
@override
void initState() {
widget.selected = widget.controller.text;
super.initState();
}
String? selectedValue;
final TextEditingController textEditingController = TextEditingController();
@override
void dispose() {
textEditingController.dispose();
super.dispose();
}
List<DropdownItem<String>> _addDividersAfterItems(
List<KeyValuePair> keyValueList) {
final List<DropdownItem<String>> menuItems = [];
for (final KeyValuePair item in keyValueList) {
menuItems
..add(DropdownItem(
value: item.getValue(),
child: Text(
item.getKey(),
overflow: TextOverflow.ellipsis,
),
));
}
return menuItems;
}
@override
Widget build(BuildContext context) {
return DropdownButtonHideUnderline(
child: DropdownButtonFormField2<String>(
isExpanded: true,
decoration: widget.inputDecoration,
value: selectedValue,
onChanged: (value) {
widget.controller.text = value ?? "";
setState(() {
selectedValue = value;
});
},
dropdownSeparator: const DropdownSeparator(
height: 4,
child: Padding(
padding: EdgeInsets.symmetric(horizontal: 8.0),
child: Divider(),
),
),
hint: Text(widget.inputDecoration.hintText ?? ""),
items: _addDividersAfterItems(widget.keyValueList),
validator: widget.validator,
dropdownStyleData: const DropdownStyleData(
maxHeight: (TextDropDownFormField.menuItemHeight * 4) + 4,
padding: EdgeInsets.all(0.0)),
menuItemStyleData: MenuItemStyleData(
padding: const EdgeInsets.symmetric(horizontal: 10),
overlayColor: MaterialStateProperty.all(Colors.transparent),
),
dropdownSearchData: widget.keyValueList.length > 4
? DropdownSearchData(
searchController: textEditingController,
searchBarWidgetHeight: TextDropDownFormField.menuItemHeight,
searchBarWidget: Container(
height: TextDropDownFormField.menuItemHeight,
padding: const EdgeInsets.all(5.0),
child: TextFormField(
controller: textEditingController,
decoration: InputDecoration(
contentPadding: const EdgeInsets.symmetric(
horizontal: 10,
vertical: 8,
),
hintText: widget.searchHint,
border: OutlineInputBorder(
borderRadius: BorderRadius.circular(5),
),
),
),
),
searchMatchFn: (item, searchValue) {
return item.value
.toString()
.toLowerCase()
.contains(searchValue.toLowerCase());
},
)
: null,
onMenuStateChange: (isOpen) {
if (!isOpen) {
textEditingController.clear();
}
},
),
);
}
}
from dropdown_button2.
Related Issues (20)
- Allow closing dropdown programatically HOT 5
- Accept focusNode property in DropdownItem
- Cannot simultaneously update items and values in beta HOT 2
- The splash effect goes above the error / validation text
- Close programatically on Escape pressed HOT 4
- How can i create menu items with exactly height for each element
- Not possible to have label, text and dropdown values all aligned with OutlineInputBorder HOT 2
- Show selected item when page initialized HOT 6
- onChanged doesn't work when using multiValueListenable HOT 2
- DropdownButtonFormField2 initial value
- barrierCoversButton: false property not working
- Not resetting the search querry before reopening the menu breaks the dropdown menu scroll position calculation algorithm
- The package interferes with TextField HOT 1
- Being able to set the errorText
- Ink splashes get displayed over search widget HOT 2
- Disable focus on DropdownItem HOT 4
- How to wrap TapRegion with groupID around DropdownButtonFormField2 to track TapInside / TapOutside with other TapRegions
- Add an ability to override comparator function HOT 8
- The border does not change to red on validation error HOT 5
- On mobile once keyboard open it's pushing the dropdown to top HOT 6
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from dropdown_button2.