首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Flutter form -多屏幕

Flutter form -多屏幕
EN

Stack Overflow用户
提问于 2020-01-13 02:25:08
回答 2查看 2.1K关注 0票数 0

我需要在app上有一个注册表,它是相当长的,所以我如何将注册分成2个屏幕,这样一旦你完成了第一个屏幕,你就会进入下一个屏幕,当你点击下一步按钮。在下一个屏幕上,所有的表单变量都应该在上一页中可用。在第二页上,我想将所有变量保存到Google Firebase。

有什么建议可以实现这一点吗?

提前谢谢。

EN

Stack Overflow用户

发布于 2020-01-13 02:45:48

这是一个非常简单的示例,说明了如何将TextFormFields中的数据从一个视图传递到下一个视图:

代码语言:javascript
运行
复制
class FirstFormPage extends StatefulWidget {
  @override
  _FirstFormPageState createState() => _FirstFormPageState();
}

class _FirstFormPageState extends State<FirstFormPage> {
  TextEditingController _firstFormFieldController = TextEditingController();
  TextEditingController _secondFormFieldController = TextEditingController();
  TextEditingController _thirdFormFieldController = TextEditingController();

  @override
  Widget build(BuildContext context) {
    return Column(
      children: <Widget>[
        TextFormField(
          controller: _firstFormFieldController,
        ),
        TextFormField(
          controller: _secondFormFieldController,
        ),
        TextFormField(
          controller: _thirdFormFieldController,
        ),
        RaisedButton(
          child: Text('Next'),
          onPressed: () => Navigator.of(context).push(MaterialPageRoute(
            builder: (context) {
              return SecondFormPage([
                _firstFormFieldController.text,
                _secondFormFieldController.text,
                _thirdFormFieldController.text,
              ]);
            }
          )),
        )
      ],
    );
  }
}

class SecondFormPage extends StatefulWidget {
  final List<String> previousFields;

  SecondFormPage(this.previousFields);

  @override
  _SecondFormPageState createState() => _SecondFormPageState();
}

class _SecondFormPageState extends State<SecondFormPage> {
  TextEditingController _firstFormFieldController = TextEditingController();
  TextEditingController _secondFormFieldController = TextEditingController();
  TextEditingController _thirdFormFieldController = TextEditingController();

  List<String> allData = [];

  @override
  Widget build(BuildContext context) {
    return Column(
      children: <Widget>[
        TextFormField(
          controller: _firstFormFieldController,
        ),
        TextFormField(
          controller: _secondFormFieldController,
        ),
        TextFormField(
          controller: _thirdFormFieldController,
        ),
        RaisedButton(
          child: Text('Next'),
          onPressed: submitData,
        )
      ],
    );
  }

  void submitData(){
    allData.addAll(widget.previousFields);
    allData.addAll([
      _firstFormFieldController.text,
      _secondFormFieldController.text,
      _thirdFormFieldController.text,
    ]);

    // Submit your data
  }
}
票数 2
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59706862

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档