我正在尝试使用setState更改事件(例如按钮按下)时的DropdownButtonFormField值。但这不起作用。
注意:如果我使用DropdownButton,它可以工作,但是使用DropdownButtonFormField时,它没有响应。
这是显示我要实现的简单代码。
df['translated'] = df['words'].str.translate(trans)
words translated
0 Cat cvc
1 DOG cvc
2 bike cvcv
3 APPLE vcccv
4 foo bar cvv cvc
答案 0 :(得分:3)
从全局关键字中定义实例变量,并将其传递给 DropdownButtonFormField
final dropdownState = GlobalKey<FormFieldState>();
您可以通过调用此方法来更改dropDownFieldItem的值
dropdownState.currentState.didChange('two');
最终代码:
import 'package:flutter/material.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
debugShowCheckedModeBanner: false,
home: Testing(),
);
}
}
class Testing extends StatefulWidget {
@override
_TestingState createState() => _TestingState();
}
class _TestingState extends State<Testing> {
String selectedValue;
final dropdownState = GlobalKey<FormFieldState>();
@override
Widget build(BuildContext context) {
return Material(
child: Column(
children: <Widget>[
DropdownButtonFormField(
key: dropdownState,
value: selectedValue,
items: ['one', 'two'].map((value) {
return DropdownMenuItem<String>(
value: value,
child: Text(value),
);
}).toList(),
onChanged: (value) {
setState(() {
selectedValue = value;
});
},
),
RaisedButton(
child: Text('test'),
onPressed: () {
dropdownState.currentState.didChange('one');
},
),
],
),
);
}
}
答案 1 :(得分:1)
此处与DropdownButtonFormField
和DropdownButton
正常工作。
flutter --version
Flutter 1.12.13+hotfix.9 • channel stable •
答案 2 :(得分:1)
在Flutter 1.17.2版中,该错误已修复,因此请务必进行升级。
Github问题:https://github.com/flutter/flutter/issues/56898
已在版本1.17.2中修复:https://github.com/flutter/flutter/wiki/Hotfixes-to-the-Stable-Channel#1172-may-28-2020