Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 如何将变量从颤振中的模态返回到小部件?_Flutter_Dart - Fatal编程技术网

Flutter 如何将变量从颤振中的模态返回到小部件?

Flutter 如何将变量从颤振中的模态返回到小部件?,flutter,dart,Flutter,Dart,我有一个带有列表框的小部件,单击一个项目会打开一个窗口进行编辑。在其中,我可以更改两个字段,都是DateTime类型 我不明白如何将这些变量从模式窗口返回到主窗口小部件,我很高兴能得到任何帮助 在modal中,我有两个用于编辑的文本编辑控制器: TextEditingController _comeInController = TextEditingController(); TextEditingController _goOutController = TextEditingControll

我有一个带有列表框的小部件,单击一个项目会打开一个窗口进行编辑。在其中,我可以更改两个字段,都是DateTime类型

我不明白如何将这些变量从模式窗口返回到主窗口小部件,我很高兴能得到任何帮助

在modal中,我有两个用于编辑的文本编辑控制器:

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模式来访问它,以便返回变量。但我正在寻找一种更好的方法从模式窗口返回变量。你知道从另一个小部件使用控制器的方法吗?