如何添加Flutter DropdownButtonFormField

时间:2019-03-27 04:17:33

标签: dart flutter widget dropdown

这里是Flutter的初学者,只是学习小部件系统。 想要使用开箱即用的小部件(不是很好的插件)来实现自动完成文本字段 DropdownButtonFormField非常适合我的用例,但是当我尝试使用它时,编译器会为我提供“找不到方法”错误。

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(),

这里是我的代码(相关部分)

import 'package:flutter/material.dart';

...


@override
  Widget build(BuildContext context) {
      return Column(
        children: <Widget>[
          DropdownButtonFormField<String>(
             items: [DropdownMenuItem<String>(child:Text("test"))],
          ),

看一下文档,好像我可以将其自由添加到小部件树中,而无需额外配置。但是显然由于错误,我在这里丢失了一些东西。

所以要对发生的事情进行故障排除,是否DropdownButtonFormField仍在材料库中?

我还有什么想念的吗?

2 个答案:

答案 0 :(得分:1)

该小部件确实存在于flutter/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
      ],
    )
  ]);
}

答案 1 :(得分:0)

该小部件确实存在于 flutter/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(),
                 );
}