Flutter 如何将变量从颤振中的模态返回到小部件?
我有一个带有列表框的小部件,单击一个项目会打开一个窗口进行编辑。在其中,我可以更改两个字段,都是DateTime类型 我不明白如何将这些变量从模式窗口返回到主窗口小部件,我很高兴能得到任何帮助 在modal中,我有两个用于编辑的文本编辑控制器:Flutter 如何将变量从颤振中的模态返回到小部件?,flutter,dart,Flutter,Dart,我有一个带有列表框的小部件,单击一个项目会打开一个窗口进行编辑。在其中,我可以更改两个字段,都是DateTime类型 我不明白如何将这些变量从模式窗口返回到主窗口小部件,我很高兴能得到任何帮助 在modal中,我有两个用于编辑的文本编辑控制器: TextEditingController _comeInController = TextEditingController(); TextEditingController _goOutController = TextEditingControll
TextEditingController _comeInController = TextEditingController();
TextEditingController _goOutController = TextEditingController();
我希望将这些变量返回到主窗口小部件并发送到服务器
我的情态:
showMaterialModalBottomSheet(
expand: false,
context: context,
builder: (context, scrollController) =>
Container(
height: 400,
child: RedactTimesheeft(
comeIN: DateTime.parse(
staffTimeList.parseComeIn),
goOut: staffTimeList.parseGoOut != null
? DateTime.parse(
staffTimeList.parseGoOut)
: null,
),
),
)
如果您想在ModalBottomSheet中键入文本并在底层小部件中获取它,只需在这两个小部件中使用相同的TextEditingController,在主小部件中初始化并处理它 以下是一个工作示例:
import 'package:flutter/material.dart';
import 'package:flutter/widgets.dart';
main() {
runApp(MaterialApp(
home: Scaffold(
body: MyApp(),
),
));
}
class MyApp extends StatefulWidget {
@override
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
TextEditingController _controller = TextEditingController();
@override
void dispose() {
_controller.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return Center(
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
RaisedButton(
onPressed: () => showModalBottomSheet(
isScrollControlled: true,
context: context,
builder: (BuildContext context) {
return Material(
child: Padding(
padding: MediaQuery.of(context).viewInsets,
child: TextField(
controller: _controller,
),
),
);
}).whenComplete(() => setState(() {})),
child: Text('Click to enter text'),
),
Text(_controller.text == '' ? 'No text entered yet' : _controller.text),
],
),
);
}
}
导入“包装:颤振/材料.省道”;
导入“package:flatter/widgets.dart”;
main(){
runApp(材料应用程序)(
家:脚手架(
正文:MyApp(),
),
));
}
类MyApp扩展了StatefulWidget{
@凌驾
_MyAppState createState()=>\u MyAppState();
}
类MyAppState扩展了状态{
TextEditingController _controller=TextEditingController();
@凌驾
无效处置(){
_controller.dispose();
super.dispose();
}
@凌驾
小部件构建(构建上下文){
返回中心(
子:列(
mainAxisSize:mainAxisSize.min,
儿童:[
升起的按钮(
已按下:()=>showModalBottomSheet(
是的,
上下文:上下文,
生成器:(BuildContext上下文){
退货(
孩子:填充(
填充:MediaQuery.of(context).viewInsets,
孩子:TextField(
控制器:_控制器,
),
),
);
}).whenComplete(()=>setState((){}))时,
子项:文本(“单击以输入文本”),
),
文本(_controller.Text=''?尚未输入文本:_controller.Text),
],
),
);
}
}
为什么不在主窗口小部件中使用TextEditingController?然后在ModalBottomSheet中使用它们,当您关闭ModalBottomSheet时,您仍然可以在主窗口中访问它们!我想了想,但不明白如何从另一个小部件使用控制器。我在主窗口小部件中创建了一个函数,并将其传递给GlobalKey模式来访问它,以便返回变量。但我正在寻找一种更好的方法从模式窗口返回变量。你知道从另一个小部件使用控制器的方法吗?