1
resposta

Mantendo o SnackBar após a extração de código

Ao extrair o código que estava dentro do onPressed para fora do método build, tive problemas em manter a SnackBar que faz uso do context.

Se eu desejar que o métodoonPressed: () => _criaTransferencia() faça aparecer uma SnackBar, eu preciso passar o context como parâmetro? Ou seja, onPressed: () => _criaTransferencia(context)? Se houver outra solução para esse tipo de situação, gostaria de saber.

Segue o código da classe por completo:

class FormularioTransferencia extends StatelessWidget {
  final TextEditingController _controladorCampoConta = TextEditingController();
  final TextEditingController _controladorCampoValor = TextEditingController();

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Nova Transferência'),
      ),
      body: Column(
        children: <Widget>[
          Editor(_controladorCampoConta, '0000', 'Conta',
              Icons.account_balance_wallet),
          Editor(
              _controladorCampoValor, '0.00', 'Valor', Icons.monetization_on),
          ElevatedButton(
            onPressed: () => _criaTransferencia(context),
            child: Text('Confirmar'),
          )
        ],
      ),
    );
  }

  void _criaTransferencia(BuildContext context) {
    final int? conta = int.tryParse(_controladorCampoConta.text);
    final double? valor = double.tryParse(_controladorCampoValor.text);
    if (valor != null && conta != null) {
      debugPrint('TOCOU EM CONFIRMAR');
      final Transferencia transferencia = Transferencia(valor, conta);
      ScaffoldMessenger.of(context).showSnackBar(
          SnackBar(content: const Text('Transferência criada com sucesso')));
      debugPrint(transferencia.toString());
    }
  }
}

Espero que tenha sido claro.

Desde já, agradeço qualquer ajuda.

1 resposta

Bom dia Pedro,

O snackBar realmente funciona quando se passa o context, se não ele ficaria de forma errada. Você está certo.

Qualquer dúvida, estamos a disposição.