颤动键盘完成按钮导致文本字段内容消失

2024-02-04

我的表单中有 2 个文本字段。当我单击第二个文本字段中键盘上的“完成”按钮时,键盘会隐藏,两个文本字段都会变空。当我手动关闭键盘时也会发生同样的情况,然后文本字段的内容也会丢失。 看起来每次发生这种情况屏幕都会刷新。为什么会这样呢?

@override
  Widget build(BuildContext context) {
    TextEditingController nameTextFieldController = TextEditingController();
    TextEditingController emailTextFieldController = TextEditingController();

    FocusNode emailFocusNode = new FocusNode();

    // TODO: implement build
    return WillPopScope(
        onWillPop: () {
          moveToLastScreen();
        },
        child: Scaffold(
          appBar: AppBar(
            title: Text("Signup"),
            leading: IconButton(
                icon: Icon(Icons.arrow_back),
                onPressed: () {
                  moveToLastScreen();
                }),
          ),
          body: Form(
              key: _formKey,
              child: Container(
                child: ListView(
                  padding: EdgeInsets.only(top: 20, left: 35, right: 35),
                  children: <Widget>[
                    Center(
                        child: GestureDetector(
                            onTap: () {
                              imageSelectorGalary();
                            },
                            child: new Container(
                                width: 100.0,
                                height: 100.0,
                                child: _image == null
                                    ? new Image.asset(
                                        'images/profilepic.png',
                                        fit: BoxFit.fitWidth,
                                      )
                                    : new CircleAvatar(
                                        backgroundImage: new FileImage(_image),
                                        radius: 200.0,
                                      )))),
                    Text(
                      "NAME",
                      style: TextStyle(fontWeight: FontWeight.bold),
                    ),
                    Padding(
                      padding: EdgeInsets.only(top: 5, bottom: 10),
                      child: TextFormField(
                          inputFormatters:[
                            LengthLimitingTextInputFormatter(10),
                          ],
                          onFieldSubmitted: (String  value){
                            FocusScope.of(context).requestFocus(emailFocusNode);
                          },
                          keyboardType: TextInputType.text,
                          controller: nameTextFieldController,
                          validator: (String value) {
                            if (value.isEmpty) {
                              return 'Please enter the name';
                            }
                          },
                          decoration: InputDecoration(
                              border: OutlineInputBorder(
                                  borderRadius: BorderRadius.circular(5.0)),
                              contentPadding: EdgeInsets.only(
                                  top: 15, bottom: 15, left: 20, right: 20))),
                    ),
                    Text(
                      "EMAIL ID",
                      style: TextStyle(fontWeight: FontWeight.bold),
                    ),
                    Padding(
                      padding: EdgeInsets.only(top: 5, bottom: 10),
                      child: TextFormField(
                        controller: emailTextFieldController,
                        focusNode: emailFocusNode ,
                        onFieldSubmitted: (String  value){
                          FocusScope.of(context).requestFocus(new FocusNode());
                        },
                        validator: (String value){
                          if(value.isEmpty){
                            return "Please enter your email-id";
                          }
                        },
                        decoration: InputDecoration(
                            contentPadding: EdgeInsets.only(
                                top: 15, bottom: 15, left: 20, right: 20),
                            border: OutlineInputBorder(
                                borderRadius: BorderRadius.circular(5.0))),
                      ),
                    ),
                    Text(
                      "CITY AND AREA",
                      style: TextStyle(fontWeight: FontWeight.bold),
                    ),
                    GestureDetector(
                        onTap: () {
                          CityAreasDialog cityAreasDialog =
                              new CityAreasDialog();
                          cityAreasDialog.information(context);
                        },
                        child: Container(
                          margin: EdgeInsets.only(top: 5, bottom: 10),
                          padding: EdgeInsets.only(left: 20, right: 20),
                          decoration: new BoxDecoration(
                              border: new Border.all(color: CustomColors.grey),
                              borderRadius: BorderRadius.all(Radius.circular(
                                      5.0) //                 <--- border radius here
                                  )),
                          child: Container(
                              padding: EdgeInsets.only(top: 10, bottom: 10),
                              child: Row(
                                mainAxisAlignment:
                                    MainAxisAlignment.spaceBetween,
                                children: <Widget>[
                                  Column(
                                    crossAxisAlignment:
                                        CrossAxisAlignment.start,
                                    children: <Widget>[
                                      Text("Select Your City"),
                                      Text(
                                        "and area",
                                        style: TextStyle(
                                            color: Colors.grey, fontSize: 10),
                                      )
                                    ],
                                  ),
                                  Icon(
                                    Icons.arrow_drop_down,
                                    color: Colors.black,
                                  )
                                ],
                              )),
                        )),
                    Container(
                        margin: EdgeInsets.only(top: 20, left: 10, right: 10),
                        child: RaisedButton(
                          onPressed: () {
                            debugPrint("Next Click");
                            onSignup();
                          },
                          child: new Text(
                            "NEXT",
                          ),
                        ))
                  ],
                ),
              )),
        ));
  }

这个问题是因为你正在创建新的TextEditingController每次重建你的小部件时。 因此,要解决此问题,请移动这些变量nameTextFieldController ,emailTextFieldController在你的构建方法之外。

像这样:

  TextEditingController nameTextFieldController = TextEditingController();
   TextEditingController emailTextFieldController = TextEditingController();

@override
  Widget build(BuildContext context) {
    ...
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

颤动键盘完成按钮导致文本字段内容消失 的相关文章

  • 带 NestedScrollview 的 RefreshIndicator

    我想要 2 个带有 ListView 的选项卡页共享一个 RefreshIndicator 但是 RefreshIndicator 必须具有 Scrollable 作为子级 TabBarView 则不然 因此我尝试为每个选项卡创建 2 个
  • PushReplacement 或 PushAndRemoveUntil(Route 路线) => false 不工作

    基于页面的路由无法使用命令式 api 完成 而是提供一个没有相应页面的新列表到 Navigator pages 包 flutter src widgets navigator dart 断言失败 第 3075 行 pos 7 hasPage
  • flutter web http.get 返回“不支持的操作:Platform._version”

    我正在开发 flutter web 应用程序并尝试从互联网获取一些数据 我正在使用包 http http dart 并尝试这样做 await http get url 但我得到了这个错误 不支持的操作 Platform version da
  • 如何更改文本字段颤动内部的值?

    我有一个TextEditingController如果用户单击按钮 它就会填写信息 我似乎不知道如何更改 a 中的文本Textfield or TextFormField 有解决办法吗 只需更改text财产 TextField contro
  • 打开键盘会导致有状态小部件重新初始化

    我在 Stable 分支中使用 Flutter 1 2 1 为了说明我的问题 假设我有页面 A 和 B A 使用以下命令导航到 BNavigator pushB 使用以下命令导航回 ANavigator pop 两者都是有状态的小部件 当我
  • 如何在flutter项目中使用http拦截器?

    我必须向我的所有 Api 添加标头 有人告诉我为此使用 http 拦截器 但我无法理解如何做到这一点 因为我是颤振的新手 谁能帮我举个例子吗 您可以使用http 拦截器 https pub dev packages http interce
  • 使用 Flutter 基础类型而不使用 Flutter

    我需要在没有 Flutter 的环境中使用 lib package flutter foundation dart 中存在三种类型 他们是 ByteData ReadBuffer and WriteBuffer 是否可以在不依赖整个 Flu
  • 如何在 Flutter Provider 中删除 StreamController 中的数据?

    我正在使用provider来构建我的应用程序 因此数据被添加到StreamController中 每次刷新我的应用程序时 它都会调用API 然后将数据推送到StreamController 问题是如何在替换之前删除数据新的那一个 contr
  • 自定义卡片形状 Flutter SDK

    我在 Flutter 上使用 GridView 开发了一个应用程序 GridView 项目是卡片 默认卡片形状是半径为 4 的矩形 我知道 Card Widget 有 shape 属性 并且它需要 ShapeBorder 类 但我无法找到如
  • 当我使用 ListView 时,ListTile OnTap 正在工作。但是当我使用 ListWheelScrollView 时它不起作用

    当我使用 ListView 时 ListTile OnTap 正在工作 但是当我使用 ListWheelScrollView 时它不起作用 我的意思是它不会被窃听 观点发生变化 但我似乎无法点击它 我在很多地方和链接中寻找解决方案 但仍然找
  • Javafx 从 TextField 获取输入

    这是我当前的代码 它所做的只是为我制作的计算器设置一个 GUI 界面 我希望用户输入两个值 然后当按下 Sum 按钮时 它将两个值加在一起并将其显示在 Sum 文本字段中 我正在尝试使用 JavaFX 如果您能提供一些帮助 我将不胜感激 i
  • 扑。应用程序不会崩溃并发送崩溃报告

    我已经集成了Firebase Crashlytics在我的应用程序中 我正在测试 Android 应用程序 我强迫崩溃来检查它 if true List arr throw arr 1 2 我的问题是应用程序不会崩溃 我只是在日志中得到这个
  • 如何在 flutter 中仅显示列表中的 5 项

    我想在 flutter 中显示一个列表 我正在使用listView 问题是我只想显示 5 个项目 我的意思是当用户向下滚动时我想从开始索引中删除并将另一个小部件添加到包含我的小部件的列表的末尾 但是当我这样做时ScrollView 不会停留
  • 配置根项目“firebase_auth”时出现问题

    my error 我无法构建 apk 发布文件 我完成了应用程序一段时间 没有出现错误 几天后 我在构建应用程序时收到此错误 请告诉我如何摆脱它 我尝试了 4 个小时 什么也没得到 FAILURE Build failed with an
  • Flutter 网络图像作为 Google 地图标记

    我想在屏幕上的谷歌地图上添加网络图像作为标记 API确实支持一个功能Bitmapdescriptor fromBytes 但是 我不知道如何将它与网络图像一起使用 BitmapDescriptor fromBytes byteData 首先
  • Flutter Web 崩溃并显示无法打开文件 client.js

    我可以就这个错误请求你的帮助吗 当我第一次尝试使用 flutter run d chrome 运行 flutter web 时会发生这种情况 Launching lib main dart on Chrome in debug mode S
  • 在 Flutter 中渲染小部件之前,如何等待异步函数完成执行

    On my main dart文件中 我想检查用户是否已登录 以便将他定向到适当的屏幕 我正在使用 SharedPrefence 来存储 Firebase 中的用户详细信息 如何告诉我的函数等到 SharedPreference 异步函数完
  • Firebase Analytics 禁用受众国家/地区跟踪

    我正在开发一个严格不允许位置跟踪的应用程序 我想使用 Firebase Analytic 的其他功能 例如 PageTransitions 和 Crashalitics 但如果我无法禁用受众位置跟踪 我就无法使用其中任何功能 这是我在 An
  • Cloud Functions,删除Firestore SubCollections,是否需要AdminToken?

    我正在尝试构建可调用的云函数 当用户删除帖子时 它也会尝试删除评论 这是帖子的子集合 所以我看到了这个例子并像文档示例一样实现 const admin require firebase admin const firebase tools
  • Flutter 中的自动关闭对话框

    我想在打开后几秒钟自动关闭对话框 我找到的解决方案是调用Navigator of context pop 延迟并且有效 但如果我在执行 Navigator pop 命令之前手动关闭它 通过单击外部 就会出现问题 然后 Navigator p

随机推荐