flutter - DropdownButtonFormField 不是第一次重置
问题描述
我想重置 DropdownButtonFormField。我设法通过将其设置为 null 并使用 globalkey 作为以下代码来重置它。
在这里,问题是我需要单击两次才能重置它。
注意:我知道使用 DropdownButton,我们可以更轻松地重置,但我的问题是为什么 DropdownButtonFormField 在我第一次单击时没有重置。
更新后:
import 'package:flutter/material.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatefulWidget {
@override
MyAppState createState() => MyAppState();
}
class MyAppState extends State<MyApp> {
String abc;
FocusNode _node = FocusNode();
GlobalKey<FormState> _key = GlobalKey<FormState>();
@override
Widget build(BuildContext context) {
return MaterialApp(
debugShowCheckedModeBanner: false,
home: Scaffold(
body: Form(
key: _key,
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Focus(
focusNode: _node,
onFocusChange: (bool focus) {
setState(() {});
},
child: Listener(
onPointerDown: (_) {
FocusScope.of(context).requestFocus(_node);
},
child: DropdownButtonFormField(
hint: Text('select value'),
value: abc,
items: <String>['A', 'B', 'C', 'D'].map((String value) {
return DropdownMenuItem<String>(
value: value,
child: Text(value),
);
}).toList(),
onChanged: (String newValue) {
setState(() {
abc = newValue;
});
},
),
),
),
Text("value is $abc"),
],
),
),
floatingActionButton: FloatingActionButton(
onPressed: () {
setState(() {
abc = null;
_key.currentState.reset();
});
},
tooltip: 'Reset',
child: Icon(Icons.clear),
)),
);
}
}
解决方案
您可能需要手动聚焦您还需要提供全局键来形成
FocusNode _node = FocusNode();
...
Focus(
focusNode: _node,
onFocusChange: (bool focus) {
setState(() {});
},
child: Listener(
onPointerDown: (_) {
FocusScope.of(context).requestFocus(_node);
},
child: DropdownButtonFormField(
iconSize: 50,
onChanged: (s) {
setState(() {
abc = s;
});
},
hint: Text(
'Select Text',
),
items: [
DropdownMenuItem(value: '1', child: Text('A')),
DropdownMenuItem(value: '2', child: Text('B')),
DropdownMenuItem(value: '3', child: Text('C')),
DropdownMenuItem(value: '4', child: Text('D')),
],
),
),
),
...
FloatingActionButton(
onPressed: () {
setState(() {
print("hello");
abc = null;
_key.currentState.reset();
});
// _flyIronMan();
},
child: Icon(Icons.add),
),
推荐阅读
- c# - 带有硬编码任务栏的 WPF NotifyIcon ContextMenu
- azure - Azure 数据工厂链接服务问题
- html - How do I create the onClick function for a button with Kotlinx.html?
- microsoft-graph-api - 使用图形 api 以编程方式创建 Microsoft 团队会议邀请
- javascript - 在视口中如何触发 AMP 脚本?
- batch-file - 用“&”替换每一行
- rest - WSO2 API Manager 3.2.0 POST 标头中的额外文本
- android - Kotlin Jetpack Compose 理解 Delegate 属性中的类型
- html - NoReverseMatch 在 Django 中的“url”,找不到“my_app”的反向。“my_app”不是有效的视图函数或模式名称
- python - 为什么这个分组数据框没有显示预期的情节?