Flutter 颤振:以编程方式设置DropdownButtonFormField选择

Flutter 颤振:以编程方式设置DropdownButtonFormField选择,flutter,dart,Flutter,Dart,有没有办法通过编程设置DropdownButtonFormField的值? 我试图操纵value属性,但没有显示任何效果 例如: import 'package:flutter/material.dart'; class TestPage extends StatefulWidget { TestPage({Key key}) : super(key: key); @override _TestPageState createState() => _TestPageStat

有没有办法通过编程设置DropdownButtonFormField的值? 我试图操纵value属性,但没有显示任何效果

例如:

import 'package:flutter/material.dart';

class TestPage extends StatefulWidget {
  TestPage({Key key}) : super(key: key);

  @override
  _TestPageState createState() => _TestPageState();
}

class _TestPageState extends State<TestPage> {
  int _selectedId;
  List<Item> _items = [];

  @override
  void initState() {
    super.initState();
    for (int i = 0; i < 5; i++) {
      _items.add(Item(i, "choice " + i.toString()));
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text("Test"),
      ),
      body: Column(
        children: [
          DropdownButtonFormField(
            isExpanded: true,
            items: _items.map((item) {
              return new DropdownMenuItem(
                value: item.id,
                child: Text(item.text),
              );
            }).toList(),
            onChanged: (value) {
              setState(() => _selectedId = value);
            },
            value: _selectedId,
            decoration: InputDecoration(
              labelText: "select me",
            ),
          ),
          RaisedButton(
            child: Text('set selected'),
            onPressed: () {
              setState(() {
                _selectedId = 3;
              });
            },
          ),
          RaisedButton(
            child: Text('get selected'),
            onPressed: () {
              print(_selectedId.toString());
            },
          )
        ],
      ),
    );
  }
}

class Item {
  int id;
  String text;
  Item(this.id, this.text);
}
导入“包装:颤振/材料.省道”;
类TestPage扩展了StatefulWidget{
TestPage({Key}):超级(Key:Key);
@凌驾
_TestPageState createState();
}
类_TestPageState扩展了状态{
int_selectedId;
列表_项=[];
@凌驾
void initState(){
super.initState();
对于(int i=0;i<5;i++){
_添加(项目(i,“选项”+i.toString());
}
}
@凌驾
小部件构建(构建上下文){
返回脚手架(
appBar:appBar(
标题:文本(“测试”),
),
正文:专栏(
儿童:[
下拉按钮窗体字段(
是的,
项目:_items.map((项目){
返回新的DropdownMenuItem(
值:item.id,
子项:文本(item.Text),
);
}).toList(),
一旦更改:(值){
设置状态(()=>_selectedId=value);
},
值:_selectedId,
装饰:输入装饰(
labelText:“选择我”,
),
),
升起的按钮(
子项:文本('set selected'),
已按下:(){
设置状态(){
_选择D=3;
});
},
),
升起的按钮(
子项:文本('get selected'),
已按下:(){
打印(_selectedId.toString());
},
)
],
),
);
}
}
类项目{
int-id;
字符串文本;
项目(this.id,this.text);
}
通过按钮将_selectedId设置为3时,不会发生任何情况,下拉列表不会更新。如果在变量初始化时将_selectedId设置为3,则在加载页面时会选择第三个选项。
然而,我需要有计划地完成它。

我没有得到你想要的结果?您想只在用户从下拉列表中单击新值,然后单击“设置选定项”时才能设置新值吗?此外,我还尝试通过复制粘贴代码(仅更改文本颜色,因为它在白色背景上是白色的)以编程方式进行设置,并通过按button@LoVe我有一个下拉列表,如果用户愿意,可以在其中添加新项目。一旦他创建了他的项目,我想自动选择它,这样他就不必点击下拉菜单来搜索新项目。将项目添加到列表中效果很好,但通过编程选择一个项目却没有效果。Flatter 1.12.13+热修复。9•channel stable•@LoVe我重新启动了应用程序,但没有,没有帮助。我使用Channel master,v1.18.0-6.0.pre.70。也许这是新版本中的一个bug。我不明白你想要实现什么?您想只在用户从下拉列表中单击新值,然后单击“设置选定项”时才能设置新值吗?此外,我还尝试通过复制粘贴代码(仅更改文本颜色,因为它在白色背景上是白色的)以编程方式进行设置,并通过按button@LoVe我有一个下拉列表,如果用户愿意,可以在其中添加新项目。一旦他创建了他的项目,我想自动选择它,这样他就不必点击下拉菜单来搜索新项目。将项目添加到列表中效果很好,但通过编程选择一个项目却没有效果。Flatter 1.12.13+热修复。9•channel stable•@LoVe我重新启动了应用程序,但没有,没有帮助。我使用Channel master,v1.18.0-6.0.pre.70。也许这是新版本中的一个bug。