В чем разница между использованием «==» и «is» во Flutter / Dart в условном операторе if [дубликат]
Я делаю учебник по BLoC во Flutter, и преподаватель использует ключевое слово «is» в своем условном операторе if, который, по его словам, «умно передает» состояние. Может ли кто-нибудь помочь мне понять, как оператор "is" дает мне доступ к состоянию блока в приведенном ниже коде?
BlocBuilder<WeatherBloc, WeatherState>(
builder: (context, state) {
if (state is WeatherLoaded) {
return buildColumnWithData(context,state.weather);
}
Когда я попробовал тот же код с if (state == WeatherLoaded), я не смог передать state.weather в функцию buildColumnWithData. Почему это?
Ответы
'==' - оператор равенства .
Чтобы проверить, представляют ли два объекта x и y одно и то же, используйте оператор ==. (В редком случае, когда вам нужно знать, являются ли два объекта одним и тем же объектом, используйте вместо этого функцию identify ().) Вот как работает оператор ==:
Если x или y равны нулю, верните истину, если оба равны нулю, и ложь, если только один из них равен нулю.
Вернуть результат вызова метода x. == (y). (Это верно, такие операторы, как ==, являются методами, которые вызываются для их первого операнда. Подробнее см. В разделе Операторы.)
'is' - оператор проверки типа
Результатом
obj is Tявляется истина, если obj реализует интерфейс, указанный T. Например, obj is Object всегда истинен.
В вашем коде:
isпроверяет, является ли состояние экземпляром WeatherLoadedкласса.
Кроме того, вам не нужно выполнять приведение к, WeatherLoadedесли проверка прошла успешно - в области действия оператора if переменная состояния WeatherLoadedпонижается до («умно передает состояние»).
С помощью ==оператора вы можете сравнить 2 экземпляра класса.