1
resposta

SnackBar só funciona no Android?

No meu mac tive problemas com a inicialização do emulador.. E para não perder mais tempos usei o emulator do IOS mesmo. Mas por algum motivo o meu snackbar não funcionou, acredito que isso seja por conta da plataforma.

════════ Exception caught by gesture ═══════

The following assertion was thrown while handling a gesture: Scaffold.of() called with a context that does not contain a Scaffold.

1 resposta

Olá Bruno, tudo bem com você?

Na verdade como o flutter não teremos problema de plataforma em relação aos widgets, o que aconteceu provavelmente é que perdemos o contexto e ao chamar a função explodiu o erro :)

A questão é que da maneira que estamos querendo fazer fica um pouco difícil de capturar o contexto para utilizar o Scaffold.of(context), para conseguir o comportamento esperado o ideal seria envolver o nosso botão com outro widget da seguinte forma:

Builder(
       builder: (BuildContext context) => RaisedButton(
                    child: Text(_confirm, style: TextStyle(fontSize: 16)),
                    onPressed: () {
                      final int numeroConta =
                          int.tryParse(_controllerNumeroConta.text);
                      final double valor =
                          double.tryParse(_controllerCampoValor.text);

Com o Builder a gente consegue garantir essa passagem de contexto e dessa forma conseguimos imprimir a informação:

final transferencia = Transferencia(valor, numeroConta);
Scaffold.of(context).showSnackBar(
      SnackBar(content: Text("$transferencia"))
);
Future.delayed( Duration(seconds: 4)).then( (_) => Navigator.pop(context, transferencia));

Veja que no final eu dou um Future.delayed porque se eu chamasse o SnackBar e depois o Navigator.pop instantaneamente iria fechar, dessa forma eu consigo garantir a duração necessária para mostrar a informação antes de fechar a tela :)

Acredito que na parte de comunicação com web api o instrutor irá falar sobre essa questão de perder o contexto do widget, mas por enquanto essa seria a solução para essa Snackbar :)

Abraços e Bons Estudos!