无法无条件访问属性“isEmpty”,因为接收者可以为“null”

2024-04-02

import 'package:flutter/material.dart';
    import 'package:flutter_app_1/utils/routes.dart';
    
    class LoginPage extends StatefulWidget {
      @override
      _LoginPageState createState() => _LoginPageState();
    }
    
    class _LoginPageState extends State<LoginPage> {
      String name = "";
      bool changeButton = false;
    
      final _formKey = GlobalKey<FormState>();
    
      moveToHome(BuildContext context) async {
        if (_formKey.currentState.validate()) {
          setState(() {
            changeButton = true;
          });
          await Future.delayed(Duration(seconds: 1));
          await Navigator.pushNamed(context, MyRoutes.homeRoute);
          setState(() {
            changeButton = false;
          });
        }
      }
    
      @override
      Widget build(BuildContext context) {
        return Material(
            color: Colors.white,
            child: SingleChildScrollView(
              child: Form(
                key: _formKey,
                child: Column(
                  children: [
                    Image.asset(
                      "assets/images/login_image.png",
                      fit: BoxFit.cover,
                      height: 500,
                    ),
                    SizedBox(
                      height: 20.0,
                    ),
                    Text(
                      "Welcome $name",
                      style: TextStyle(fontSize: 22, fontWeight: FontWeight.bold),
                    ),
                    SizedBox(
                      height: 28.0,
                    ),
                    Padding(
                      padding: const EdgeInsets.symmetric(
                          vertical: 16.0, horizontal: 32.0),
                      child: Column(
                        children: [
                          TextFormField(
                            decoration: InputDecoration(
                              hintText: "Enter User Name",
                              labelText: "Username",
                            ),
                            validator: (String? value) {
                              if (value != null && value.isEmpty) {
                                return "Username can't be empty";
                              }
    
                              return null;
                            },
                            onChanged: (value) {
                              name = value;
                              setState(() {});
                            },
                          ),
                          TextFormField(
                            obscureText: true,
                            decoration: InputDecoration(
                              hintText: "Enter password",
                              labelText: "Password",
                            ),
                            validator: (String? value) {
                              if (value != null && value.isEmpty) {
                                return "Password can't be empty";
                              }
    
                              return null;
                            },
                          ),
                          SizedBox(
                            height: 40.0,
                          ),
                          Material(
                            color: Colors.deepPurple,
                            borderRadius:
                                BorderRadius.circular(changeButton ? 50 : 8),
                            child: InkWell(
                              onTap: () => moveToHome(context),
                              child: AnimatedContainer(
                                duration: Duration(seconds: 1),
                                width: changeButton ? 50 : 150,
                                height: 50,
                                //color: Colors.deepPurple,
                                alignment: Alignment.center,
                                child: changeButton
                                    ? Icon(
                                        Icons.done,
                                        color: Colors.white,
                                      )
                                    : Text(
                                        "Login",
                                        style: TextStyle(
                                            color: Colors.white,
                                            fontWeight: FontWeight.bold,
                                            fontSize: 18),
                                      ),
                                // decoration: BoxDecoration(
                                //     //color: Colors.deepPurple,
                                //     // shape: changeButton
                                //     //     ? BoxShape.circle
                                //     //     : BoxShape.rectangle,
                                //     ),
                              ),
                            ),
                          ),
                          // ElevatedButton(
                          //     child: Text("Login"),
                          //     style: TextButton.styleFrom(minimumSize: Size(150, 40)),
                          //     onPressed: () {
                          //       Navigator.pushNamed(context, MyRoutes.homeRoute);
                          //     })
                        ],
                      ),
                    )
                  ],
                ),
              ),
            ));
      }
    }

大家好, 我正在尝试将验证器添加到小部件,但收到此错误,请帮助。来解决这个错误。

错误:

The method 'validate' can't be unconditionally invoked because the receiver can be 'null'. Try making the call conditional (using '?.') or adding a null check to the target ('!')

我尝试替换提供的代码,但仍然收到错误。请调查一下。

第二个错误:

The method 'validate' can't be unconditionally invoked because the receiver can be 'null'. Try making the call conditional (using '?.') or adding a null check to the target ('!')

我尝试替换提供的代码,但仍然收到错误。请调查一下。


您需要使代码为 null 安全,为此您有几个选项,具体取决于您期望的值。

如果你想要一个String值然后设置initialValue to ''并将验证器条件更新为(value!.isEmpty) add an ! after value.

如果该值确实可以为null,则添加一个测试以确保仅当该值不为null时才访问成员,即ifinitialValue被设定为null,那么您需要更新验证器来检查 null。

validator: (String? value) {                        
  if (value != null && value.isEmpty) {
    return "Username can't be empty";
  }

  return null;
}

如果您想了解有关 dart 中空安全的更多信息,请查看官方文档 https://flutter.dev/docs/null-safety

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

无法无条件访问属性“isEmpty”,因为接收者可以为“null” 的相关文章

  • 滑动时向 PageView 添加新页面

    我目前正在制作一个日历应用程序 我想向右或向左滑动以转到下个月或上个月 我使用 PageView 时首先设置了一个包含 3 个项目的数组 第一个页面是第二个项目 我想向右滑动并在末尾添加一个页面 我想向左滑动并在开头添加一个页面 目前 如果
  • Flutter中如何在弹出屏幕后调用函数更新值?

    屏幕 1 显示带有添加按钮的项目列表 屏幕 2 用于将新项目添加到列表的表单 屏幕 2 gt gt 屏幕 1 在屏幕 2 中调用 navigator pop 时 如何在屏幕 1 中调用方法 setState 更新列表 谁能帮我吗 我不想再次
  • 使用 flutter 处理 Appcheck 时出错

    我想在 firebase 存储中上传文件 但经过多次研究后出现了 appcheck 错误 我发现我必须在 firebase 上激活 Appcheck 而且还要在我的应用程序上激活它 在 youtube 上的谷歌视频中 我看到我必须在构建我的
  • 底部有无限像素溢出的 RenderFlex

    我有一个非常简单的控件 我试图在其中展示DropdownButton与几个TextFields 当应用程序在模拟器中运行时 我收到一条错误消息 BOTTOM OVERFLOWED BY Infinity PIXELS The Stack T
  • 我想将对象列表添加到 firestore 文档中,-flutter

    我想将对象列表添加到 firestore 文档 我定义了产品数据模型 我还有类别数据模型 我想将类别列表添加到 firestore 中的产品文档中 我将类别添加到临时列表 然后将值放入product categories 产品 类别 类别t
  • 当 flutter 应用程序终止时,普通推送通知会默默出现或根本不出现

    我在 nodejs 上使用 firebase admin 向用户发送推送通知 https firebase google com docs admin setup https firebase google com docs admin s
  • Flutter:致命错误:回调查找失败! (带有音频播放器包)

    以下代码片段是按钮 单击该按钮会发出短促的蜂鸣声 FlatButton onPressed gt final player new AudioCache player play note1 wav child Text Click to d
  • Flutter Firebase 身份验证 currentUser() 返回 null

    这是关于 Flutter Firebase 身份验证插件的 我试图在创建新用户后发送验证电子邮件 但 sendEmailVerification 内部使用 currentUser 这对我来说似乎是一个错误 但为了以防万一 我在 stacko
  • flutter web http.get 返回“不支持的操作:Platform._version”

    我正在开发 flutter web 应用程序并尝试从互联网获取一些数据 我正在使用包 http http dart 并尝试这样做 await http get url 但我得到了这个错误 不支持的操作 Platform version da
  • NestedScrollView 与 ListView 中的粘性选项卡

    布局按预期工作 但以下情况除外 当我滚动一页时 第二页也会滚动 没有那么多 但足以掩盖第一个项目 我可以想象它与 NestedScrollView 有关 但我不知道如何继续 import package flutter material d
  • Flutter如何在BottomNavigationBar中添加边距或填充

    我正在尝试制作底部导航栏 但在屏幕上左右填充 现在 我用容器包裹 BottomNavigationBar 并在其中添加填充 问题是 BottomNavigationBar 默认背景仍然包裹所有图层 所以我们可以删除那里的背景颜色吗 Goal
  • Flutter Spotify Api 身份验证

    我需要在使用 Spotify api 的 Flutter 应用程序中对用户进行身份验证 我使用 flutter web auth 打开 WebView 并让用户在那里登录 我无法返回应用程序 在 Spotify 仪表板中 我将回调 Uri
  • 如何在Flutter中使用多个ChangeNotifierProvider?

    我最近开始使用provider对于我的状态管理 我知道如何一次使用一个 class Home extends StatelessWidget override Widget build BuildContext context return
  • 扑。应用程序不会崩溃并发送崩溃报告

    我已经集成了Firebase Crashlytics在我的应用程序中 我正在测试 Android 应用程序 我强迫崩溃来检查它 if true List arr throw arr 1 2 我的问题是应用程序不会崩溃 我只是在日志中得到这个
  • flutter:动画过渡到命名路线

    当我使用Navigator pushNamed context someRoute 有一个最小的动画 从屏幕底部沿着新路线滑动 在 Android 上 在 iOS 上可能看起来不同 如何向此过渡添加自定义动画 I found 本文 http
  • Flutter 网络图像作为 Google 地图标记

    我想在屏幕上的谷歌地图上添加网络图像作为标记 API确实支持一个功能Bitmapdescriptor fromBytes 但是 我不知道如何将它与网络图像一起使用 BitmapDescriptor fromBytes byteData 首先
  • Flutter http请求上传mp3文件

    我使用这个 api 上传 mp3 文件 使用这种方法 Future
  • 实施 ChangeNotifier 与 StateNotifier

    我很熟悉Provider https pub dev packages provider打包并将其与ChangeNotifier 假设我有 3 个 getter 和具有不同功能的方法 切换加载 切换图像加载 切换 ObsecurePassw
  • 传递 Stack 中两个小部件之间的所有手势

    我正在开发一个应用程序 在地图上显示标记 如下所示 它的工作方式是标记在地图小部件 上方 呈现为Stack 我的问题是 目前 标记 吸收 用于控制下方地图的手势 如果手势在标记上开始 因此我想知道 有没有办法在堆栈中的两个小部件之间传递所有
  • 如何在 Flutter 中恢复上次路由

    我正在开发 Flutter 应用程序 但遇到了问题 在我的 main dart 中 我设置了一个名为 FirstScreen 的主路由 然后用户可以转到 LoginScreen 登录帐户 因此 如果我按主页按钮 然后尝试重新打开应用程序 出

随机推荐

  • 自定义 jQuery 子菜单定位

    我正在尝试创建一个至少有两层子菜单的水平菜单 所有子菜单都是垂直的 Submenu1 将位于其父菜单的正下方 所有后续子菜单级别 2 应位于其父菜单的右侧 我刚刚开始学习如何使用 jQuery 菜单 他们似乎没有对此进行自定义 我不知道如何
  • 计算机如何进行浮点运算?

    我看过很长的文章解释如何存储浮点数以及如何完成这些数字的算术运算 但请简要解释一下为什么当我写的时候 cout lt lt 1 0 3 0 lt
  • 从头开始创建,还是从头开始构建?

    我正在考虑建立一个可视化编程语言 http en wikipedia org wiki Visual programming language 类似于Scratch http scratch mit edu 供儿童 又称可怜的打字员 在对微
  • Go中如何生成固定长度的随机数?

    在 Go 中生成固定长度随机数的最快 最简单的方法是什么 假设要生成8位长数字 问题是rand Intn 100000000 是结果可能远小于 8 位数字 并且用前导零填充它对我来说看起来不是一个好的答案 也就是说 我更关心随机性的质量 因
  • 将 Visual Studio 2008 指向第三方 DLL 的源代码进行调试

    我有一个 VS 2008 C 项目 它使用第三方库 开放场景图 当我开始调试项目时 每次调用此外部库中的函数时 调试器都会跳过它 因为 显然 调试器没有可在其中查找代码的 cpp 文件 它只会跳转到链接到我的项目的头文件 因为这些文件存在并
  • 如何将 Semantic-UI 导入 Angular 项目

    我正在开发一个基于 Semantic UI 框架 这是 Semantic UI 的一个分支 的 Angular 项目 我已经安装了 npm install save fomantic ui 然后我在中添加了以下几行angular json
  • Crashlytics Android NDK:崩溃报告中缺少所有符号

    我们的原生 Crashlytics 崩溃报告最近缺少所有符号信息 我曾希望最新的 Crashlytics NDK 能够解决该问题 但事实并非如此 我看到那里有一个类似的查询 但在这种情况下 我没有使用 Firebase 只是使用 Crash
  • 互动网留下大量多余粉丝是常事吗?

    我正在将 lambda 演算项编译到交互网络中 以便使用 Lamping 的抽象算法对其进行评估 为了测试我的实现 我使用了这个教堂编号除法函数 div a b c d b e e d a b e f g e h f h g e e e f
  • 是否可以用 CSS 来设计 C# 应用程序

    我更擅长用 C 创建基于计算机的应用程序 而不是用 ASP net 创建网页 但是 CSS 在设计按钮 表单等方面的强大功能确实让我喜欢它 我在谷歌上搜索是否可以在软件中只使用CSS 但还没有结果 是否可以 我知道这个问题太国外了而且有点愚
  • 如何在 Asp.net MVC 中编写集成和系统测试

    我的应用程序 我的应用程序设计如下所示 Web 应用程序层 带有使用 POCO 和调用服务的控制器和视图的 asp net MVC 应用程序 服务层 使用 POCO 和调用存储库的业务流程 数据层 使用 POCO 并以 EF 模型形式与模型
  • 将 Excel 工作簿的一部分复制/粘贴到当前未打开的工作簿

    我需要将 Excel 工作簿的一部分复制到大约 3500 个其他工作簿 由于工作簿数量众多 在每个工作簿上运行宏是不可行的 有没有办法复制该部分并将其粘贴到其他工作簿而不打开它们 番茄 不幸的是 正如 Ken White 和 L42 都指出
  • Windows 上“没有名为 scipy 的模块”

    在 sklearn base py 中 我有这样的声明from scipy import sparse 我收到这个错误 no module named scipy 我尝试安装使用pip install scipy 但我收到了很多错误 lib
  • 在 Xna/MonoGame 中按程序生成 Texture2D

    如何使用代码按程序生成Texture2D 例如 我希望在 32x32 图像上交替出现黑白像素 您可以使用 GraphicsDevice 创建一个新的纹理 public static Texture2D CreateTexture Graph
  • 将 UIViewController 添加到 UIScrollView

    我有一个UIViewCOntroller我已经添加了很多 UI 组件 标签 文本字段等 现在 我需要向其中添加更多字段 我发现我的视图控制器中没有任何空间可以添加任何空间 所以我想添加一个scrollView来解决这个问题 我可以在哪里添加
  • .net中RSA公钥模数和指数的格式是什么?

    一个简短的问题 如果我有来自第三方的以下输入 我该如何填写 RSAParameters 模数 123456 指数 111 长话短说 我使用以下代码 RSACryptoServiceProvider RSAalg 新 RSACryptoSer
  • 在选项卡式 UIPopover 中使用 UIImagePicker

    我正在开发一个 iPad 应用程序 需要在设备 相册 远程和应用程序中包含多个图像源 现在理想的情况是拥有一个 UIPopover 控制器 每个源有 3 个选项卡 唯一的问题是我似乎无法弄清楚如何让 UIImagePicker 位于其自己的
  • 客户端不可编辑属性的资源的 REST API 设计

    处理必须通过不向 API 使用者公开的另一种方法修改 更新的资源属性的最佳方法是什么 例子 请求用于 X 的新令牌 令牌必须按照一组特定的业务规则 逻辑生成 旧汇率到期后请求 刷新货币汇率 该汇率仅供参考 将在后续交易中使用 请注意 在上面
  • T-SQL 的漂亮打印机?

    我正在寻找一个好的 T SQL 漂亮打印机 以便我们项目中的开发人员之间的所有代码看起来都一致 最好是免费 开源的 但只要价格合理 付费也不是不可能的 有没有特定的行业领导者 我并不太关心它使用什么特定标准 但可配置性越高越好 这样 我们就
  • 为什么在 forEach 中重新分配参数元素不起作用[重复]

    这个问题在这里已经有答案了 对于以下代码块 const items id 1 name one id 2 name two const changes name hello items forEach item i gt item item
  • 无法无条件访问属性“isEmpty”,因为接收者可以为“null”

    import package flutter material dart import package flutter app 1 utils routes dart class LoginPage extends StatefulWidg