flutter - 如何从颤动的模态中将变量返回到小部件?
问题描述
我有一个带有列表框的小部件,单击一个项目会打开一个窗口进行编辑。在其中,我可以更改 2 个字段,均为 DateTime 类型。
我不明白如何将这些变量从模式窗口返回到主小部件,我会很高兴得到任何帮助
在模态中,我有两个用于编辑的 TextEdit 控制器:
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),
],
),
);
}
}