Flutter 颤振下拉列表无法使用提供程序更改文本
我有一个代表当前所选项目的类:Flutter 颤振下拉列表无法使用提供程序更改文本,flutter,dart,Flutter,Dart,我有一个代表当前所选项目的类: class DropdownText with ChangeNotifier { String _text = ""; String get text => _text; void setText(String value) { _text = value; notifyListeners(); } } 这是我用来显示下拉按钮的代码: class DropDown extends StatelessWidget {
class DropdownText with ChangeNotifier {
String _text = "";
String get text => _text;
void setText(String value) {
_text = value;
notifyListeners();
}
}
这是我用来显示下拉按钮的代码:
class DropDown extends StatelessWidget {
final List<DropdownMenuItem<String>> menu = [
DropdownMenuItem<String>(
value: "A",
child: Text("A"),
),
DropdownMenuItem<String>(
value: "B",
child: Text("B"),
)
];
DropDown();
@override
Widget build(BuildContext context) {
return FormField<String>(
builder: (FormFieldState<String> formState) {
return Consumer<DropdownText>(
builder: (context, dropdown, _) {
return InputDecorator(
decoration: InputDecoration(
border: OutlineInputBorder(
borderRadius: BorderRadius.circular(10)
),
prefixIcon: const Icon(Icons.fastfood),
),
child: DropdownButtonFormField<String>(
items: menu,
onChanged: (value) {
dropdown.setText(value);
},
value: dropdown.text,
),
);
},
);
},
);
}
}
类下拉列表扩展了无状态小部件{
最终列表菜单=[
下拉菜单项(
价值:“A”,
子项:文本(“A”),
),
下拉菜单项(
值:“B”,
儿童:文本(“B”),
)
];
下拉菜单();
@凌驾
小部件构建(构建上下文){
返回表单字段(
生成器:(FormFieldState formState){
退货消费者(
生成器:(上下文,下拉列表,382;){
返回输入装饰器(
装饰:输入装饰(
边框:大纲输入边框(
边界半径:边界半径。圆形(10)
),
前缀:常量图标(图标。快餐),
),
子项:DropdownButtonFormField(
项目:菜单,
一旦更改:(值){
下拉列表.setText(值);
},
值:dropdown.text,
),
);
},
);
},
);
}
}
我得到的错误是
断言失败:第1411行第15位:“items==null | | items.isEmpty||
值==null | | I/颤振(7719):项目。其中((下拉菜单项){I/flatter(7719):
return item.value==value;I/flatter(7719):}).length ==1' 但我在哪里失败了?我已经明确地把每一个泛型类型。这可能是提供商软件包中的
消费者问题吗
此外,我在下拉列表中没有看到重复项和空项。当您阅读这部分错误时
items.where((DropdownMenuItem<T> item) {return item.value == value;}).length == 1'
解决方案
将DropDownText中文本的初始值设置为项目的第一个值(DropDownItems)
String _text = "";
class DropdownText with ChangeNotifier {
String _text = "A";
String get text => _text;
void setText(String value) {
_text = value;
notifyListeners();
}
}