首页 > 解决方案 > 在 Flutter/Dart 中,在条件 if 语句中使用“==”与“is”有什么区别

问题描述

我正在做一个关于 Flutter 中 BLoC 的教程,导师在他的条件 if 语句中使用关键字“is”,他说“智能广播”状态。谁能帮我理解“is”运算符如何让我在下面的代码中访问集团的状态?

BlocBuilder<WeatherBloc, WeatherState>(
            builder: (context, state) {
              if (state is WeatherLoaded) {
                return buildColumnWithData(context,state.weather);
              }

当我使用 if (state == WeatherLoaded) 尝试相同的代码时,我无法将 state.weather 传递给 buildColumnWithData 函数。为什么是这样?

标签: flutterdart

解决方案


'==' 是一个相等运算符

要测试两个对象 x 和 y 是否代表相同的事物,请使用 == 运算符。(在极少数情况下,您需要知道两个对象是否是完全相同的对象,请改用 same() 函数。)以下是 == 运算符的工作原理:

如果 x 或 y 为 null,如果两者都为 null,则返回 true,如果只有一个为 null,则返回 false。

返回方法调用 x.==(y) 的结果。(没错,== 等运算符是在其第一个操作数上调用的方法,详情请参阅运算符。)

'is' 是类型测试运算符

如果 obj 实现了 T 指定的接口,则结果obj is T为 true。例如,obj is Object 始终为 true。

在您的代码中:

is检查状态是否是类的实例WeatherLoaded

最重要的是,如果检查成功,您不需要进行WeatherLoaded强制转换 - 在 if 语句的范围内,状态变量被向下转换为WeatherLoaded(“is smartcasts the state”)。

使用==运算符,您可以比较一个类的 2 个实例。


推荐阅读