No Flutter / Dart, qual é a diferença entre usar “==” vs “é” em uma instrução if condicional [duplicado]

Dec 02 2020

Estou fazendo um tutorial sobre BLoC no Flutter e o tutor usa a palavra-chave "é" em sua instrução if condicional, que ele disse "smartcasts" o estado. Alguém pode me ajudar a entender como a operadora "is" me dá acesso ao estado do bloco no código abaixo?

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

Quando tentei o mesmo código com if (state == WeatherLoaded), não consegui passar o state.weather para a função buildColumnWithData. Por que é isso?

Respostas

4 Lesiak Dec 02 2020 at 05:08

'==' é um operador de igualdade .

Para testar se dois objetos x e y representam a mesma coisa, use o operador ==. (No caso raro em que você precisa saber se dois objetos são exatamente o mesmo objeto, use a função idêntica ().) Veja como funciona o operador ==:

Se x ou y for nulo, retorna verdadeiro se ambos forem nulos e falso se apenas um for nulo.

Retorne o resultado da invocação do método x. == (y). (Isso mesmo, operadores como == são métodos que são chamados em seu primeiro operando. Para obter detalhes, consulte Operadores.)

'é' é um operador de teste de tipo

O resultado de obj is Té verdadeiro se obj implementa a interface especificada por T. Por exemplo, obj is Object é sempre verdadeiro.

Em seu código:

isverifica se o estado é uma instância da WeatherLoadedclasse.

Além disso, você não precisa fazer uma conversão para WeatherLoadedse a verificação foi bem-sucedida - no escopo da variável de estado da instrução if WeatherLoadedé reduzida para ("é smartcasts o estado").

Com o ==operador, você pode comparar 2 instâncias de uma classe.