0

我是新手,我遇到了一个问题,非常感谢您的帮助。

我在两个不同的屏幕上有两个单独的表格。单击第一页上的“下一步”按钮验证表单并使用Navigator.push(). 一切正常,直到我使用自动创建的应用栏左上角的箭头返回第一页。第一页上 TextFormFields 内的数据仍然填写,这很好,但是当我单击下一步(使用 验证并推送到第二页Navigator.push)并转到第二页时,TextFormFields 内的所有数据都消失了。

我的目的是让用户数据在TextFormFields两个表单中输入后,在不同的屏幕中来回导航。

我已经查看了这个stackoverflow 页面,但是那里的解决方案并没有解决我的问题。我查看了 shared_preferences 但 Flutter discord 上的人建议不要使用它。

这是代码:

第一页

第二页

(我使用 PasteUbuntu 的代码,因为它有点太长,所以我不想在这篇文章中复制它)

这是我的formField()功能的定义:

class formField extends StatelessWidget {
  Function validator;
  Function onSaved;
  String fieldTitle;
  String hintText;
  TextEditingController textController;
  TextInputType keyboardStyle;

  formField(
      {this.onSaved,
      this.validator,
      this.fieldTitle,
      this.hintText,
      this.textController,
      this.keyboardStyle});

  @override
  Widget build(BuildContext context) {
    return Column(
      crossAxisAlignment: CrossAxisAlignment.start,
      mainAxisSize: MainAxisSize.min,
      children: <Widget>[
        RichText(
          textAlign: TextAlign.left,
          text: TextSpan(
              text: fieldTitle,
              style: GoogleFonts.questrial(
                fontSize: 16,
                color: Colors.black,
                fontWeight: FontWeight.w500,
              )),
        ),
        SizedBox(height: 10),
        Container(
          width: 335,
          height: 50,
          child: Material(
            elevation: 5.0,
            borderRadius: BorderRadius.circular(10.0),
            child: TextFormField(
              validator: validator,
              onSaved: onSaved,
              textAlignVertical: TextAlignVertical.bottom,
              textCapitalization: TextCapitalization.sentences,
              keyboardType: keyboardStyle,
              controller: textController,
              decoration: InputDecoration(
                filled: true,
                fillColor: Color(0xFFF0F0F0),
                enabledBorder: OutlineInputBorder(
                    borderRadius: BorderRadius.circular(10),
                    borderSide: BorderSide(color: Color(0xFFE8E8E8))),
                focusedBorder: OutlineInputBorder(
                  borderSide: BorderSide(color: Color(0xFFE8E8E8)),
                  borderRadius: BorderRadius.circular(8.0),
                ),
                hintText: hintText,
                hintStyle:
                    GoogleFonts.inter(color: Color(0xFFBDBDBD), fontSize: 16),
              ),
              style: GoogleFonts.inter(color: Colors.black, fontSize: 16),
            ),
          ),
        ),
      ],
    );
  }
}
4

0 回答 0