Dart 如何添加颤振下拉按钮FormField

Dart 如何添加颤振下拉按钮FormField,dart,flutter,widget,dropdown,Dart,Flutter,Widget,Dropdown,初学者颤振爱好者在这里,只是学习小部件系统。 想要使用开箱即用的小部件实现自动完成文本字段(不是插件ok) DropdownButtonFormField非常适合我的用例,但是当我尝试使用它时,编译器会给我一个方法NotFound错误 Compiler message: lib/expanding_text.dart:100:11: Error: Method not found: 'DropdownButtonFormField'. DropdownButtonFormFi

初学者颤振爱好者在这里,只是学习小部件系统。 想要使用开箱即用的小部件实现自动完成文本字段(不是插件ok) DropdownButtonFormField非常适合我的用例,但是当我尝试使用它时,编译器会给我一个方法NotFound错误

Compiler message:
lib/expanding_text.dart:100:11: Error: Method not found: 'DropdownButtonFormField'.
          DropdownButtonFormField(),
          ^^^^^^^^^^^^^^^^^^^^^^^
lib/expanding_text.dart:100:11: Error: The method 'DropdownButtonFormField' isn't defined for the class '#lib1::_TripItemState'.
Try correcting the name to the name of an existing method, or defining a method named 'DropdownButtonFormField'.
          DropdownButtonFormField(),
这是我的代码(相关部分)

导入“包装:颤振/材料.省道”;
...
@凌驾
小部件构建(构建上下文){
返回列(
儿童:[
下拉按钮窗体字段(
项目:[DropdownMenuItem(子项:文本(“测试”))],
),
看这些文档,我似乎可以自由地将其添加到小部件树中,而无需额外配置。但很明显,由于错误,我在这里遗漏了一些东西

因此,要解决发生的问题,DropdownButtonFormField是否仍在材质库中


我还缺少什么吗?

小部件确实存在于
flatter/materials.dart

DropdownButtonFormField
要求在其构造函数中定义
items
属性。您需要像这样使用它:

import 'package:flutter/material.dart';

...

@override
Widget build(BuildContext context) {
  return Column(children: <Widget>[
    DropdownButtonFormField(
      items: <DropdownMenuItem>[
        // Put widgets in the drop down menu here
      ],
    )
  ]);
}
导入“包装:颤振/材料.省道”;
...
@凌驾
小部件构建(构建上下文){
返回列(子项:[
下拉按钮窗体字段(
项目:[
//将小部件放在这里的下拉菜单中
],
)
]);
}

小部件确实存在于flift/materials.dart中。

import 'package:flutter/material.dart';

...

String _selectedValue;
List<String> listOfValue = ['1', '2', '3', '4', '5'];

@override
Widget build(BuildContext context) {
return DropdownButtonFormField(
        value: _selectedValue,
        hint: Text(
               'choose one',
                ),
        isExpanded: true,
        onChanged: (value) {
                 setState(() {
                    _selectedValue = value;
                 });
               },
        onSaved: (value) {
                 setState(() {
                    _selectedValue = value;
                 });
               },
        validator: (String value) {
             if (value.isEmpty) {
                   return "can't empty";
                } else {
                   return null;
                }
              },
        items: listOfValue
           .map((String val) {
                return DropdownMenuItem(
                   value: val,
                   child: Text(
                        val,                   
                         ),
                       );
                    }).toList(),
                 );
}
导入“包装:颤振/材料.省道”;
...
字符串_selectedValue;
List listOfValue=['1','2','3','4','5'];
@凌驾
小部件构建(构建上下文){
返回DropdownButtonFormField(
值:_selectedValue,
提示:文本(
“选择一个”,
),
是的,
一旦更改:(值){
设置状态(){
_selectedValue=值;
});
},
已保存:(值){
设置状态(){
_selectedValue=值;
});
},
验证器:(字符串值){
if(value.isEmpty){
返回“不能为空”;
}否则{
返回null;
}
},
项目:价值清单
.map((字符串val){
返回下拉菜单项(
值:val,
子:文本(
瓦尔,
),
);
}).toList(),
);
}

谢谢,我在原始代码中确实有这样的内容。编辑了这篇文章。这可能与以下事实有关:
dropdownbutonformfield
需要一个items参数,该参数包含
列表中的
dropdownbonmenuitem
。将
项目:
替换为
[dropdownbonmenuitem]可能会有所帮助(值:1,子项:Text(“test”)]
,您的代码无法编译,也无法从SwiftingDuster答案中改进。无论如何,谢谢。
import 'package:flutter/material.dart';

...

String _selectedValue;
List<String> listOfValue = ['1', '2', '3', '4', '5'];

@override
Widget build(BuildContext context) {
return DropdownButtonFormField(
        value: _selectedValue,
        hint: Text(
               'choose one',
                ),
        isExpanded: true,
        onChanged: (value) {
                 setState(() {
                    _selectedValue = value;
                 });
               },
        onSaved: (value) {
                 setState(() {
                    _selectedValue = value;
                 });
               },
        validator: (String value) {
             if (value.isEmpty) {
                   return "can't empty";
                } else {
                   return null;
                }
              },
        items: listOfValue
           .map((String val) {
                return DropdownMenuItem(
                   value: val,
                   child: Text(
                        val,                   
                         ),
                       );
                    }).toList(),
                 );
}