具有空安全性的 Flutter 条件渲染

tea*_*ake 1 dart flutter dart-null-safety

如果过期不为空,我想渲染文本小部件。所以我检查了 null

但出现错误

在此输入图像描述

class TileButton extends StatelessWidget {
  final DateTime? expires;

  const TileButton({
    Key? key,
    this.expires,
  }) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return Row(
      children: [
        Text(
          'Hello Flutter',
        ),
        if (expires != null)
          Text(
            expires.day.toString(),
          ),
      ],
    );
  }
}
Run Code Online (Sandbox Code Playgroud)

tea*_*ake 7

感谢社区里的那个人。他告诉我应该看哪里

\n

所以这个检查不适用于类字段

\n
\n

分析器可以对整个应用程序的流程进行建模,因此它可以预测全局变量或类字段的值。

\n
\n
\n

对于非局部变量,编译器无法轻易做出这样的保证。非局部变量隐式提供 getter 函数,该函数可以被派生类重写,并且可以从一次访问到下一次访问返回不同的值。

\n
\n

另请检查此帖子评论中的链接以获取更多信息

\n

Dart 2.1.0 使用“is”的智能转换不起作用

\n

空检查不会导致 Dart 中的类型提升

\n

Dart null 安全性不适用于类字段

\n

所以。如果我想使用 null 检查而不使用! \n我应该创建本地 var Final _expires = expires;并使用 _expires 进行检查

\n
class TileButton extends StatelessWidget {\n  final DateTime? expires;\n\n  const TileButton({\n    Key? key,\n    this.expires,\n  }) : super(key: key);\n\n  @override\n  Widget build(BuildContext context) {\n    final _expires = expires;\n    return Row(\n      children: [\n        Text(\n          \'Hello Flutter\',\n        ),\n        if (_expires != null)\n          Text(\n            _expires.day.toString(),\n          ),\n      ],\n    );\n  }\n}\n
Run Code Online (Sandbox Code Playgroud)\n