Можно ли использовать закусочную внутри функции во флаттере?

В настоящее время в моем приложении есть страница сброса пароля.

Виджет вызывает функцию сброса пароля при нажатии кнопки. У меня есть кнопка сброса внутри Builder. У меня есть закусочная внутри onPressed, и она работает нормально. Но я хочу иметь возможность использовать ошибку аутентификации Firebase внутри закусочной, если пароль содержит ошибку. но при попытке вызвать закусочную все равно возникает ошибка контекста эшафота. мой код ниже. Я не помещаю полное дерево виджетов, так как оно довольно длинное, но я записал то, что я считаю важной частью. Код для обновления пароля работает нормально, поэтому я не думаю, что там есть какой-либо блокировщик.

class _PasswordBuyerState extends State<PasswordBuyer> {

final newpassword = TextEditingController();
final confirmpassword = TextEditingController();
final _PasswordformKey = GlobalKey<FormState>();

void SubmitBuyerPassword(password) async{

 var user = await FirebaseAuth.instance.currentUser();

 user.updatePassword(password).then((_){

   print("Succesfully changed password");

   final snackbar = SnackBar(content: Text("Password changes Successfully"));
   Scaffold.of(context).showSnackBar(snackbar);
 // this is not showing

   Navigator.push(context,MaterialPageRoute(builder: (context) => EditProfileBuyer()));

 }).catchError((error){

   final snackbar = SnackBar(content: Text("Password can't be changed" + error.toString()));

   Scaffold.of(context).showSnackBar(snackbar);  // If the form is valid, display a Snackbar.
 // this is not showing

   print("Password can't be changed" + error.toString());

 });

  }
  @override
  Widget build(BuildContext context) {
return MaterialApp(
  home: Scaffold(

Далее в коде находится Builder с кнопкой:

child:Builder(
builder: (context) => RaisedButton(
onPressed: (){

if (_PasswordformKey.currentState.validate()) {

if(newpassword.text == confirmpassword.text){

print('matching');

setState(() {

final snackbar = SnackBar(content: Text('password changing'));

Scaffold.of(context).showSnackBar(snackbar);
// the above snackbar works when tested

SubmitBuyerPassword(newpassword.text.toString());

});

} else if(newpassword.text != confirmpassword.text){

 print('not matching');


}

};

},

color: Colors.blue[500],

child:  Text('Submit',textAlign: TextAlign.center,style: TextStyle(color:Colors.white),),
                                ),
                              ),

person Waseem Ahmed    schedule 08.05.2020    source источник
comment
я думаю, вам следует просто использовать такой пакет, как Flushbar или flash и не нужно беспокоиться о контексте скаффолда.   -  person hewa jalal    schedule 08.05.2020
comment
@hiwa, Flushbar потрясающий и такой простой, как ответ, и я поддержу ваш ответ   -  person Waseem Ahmed    schedule 08.05.2020
comment
я разместил его как ответ здесь.   -  person hewa jalal    schedule 10.05.2020


Ответы (1)


См. Ответ @Hiwa Jala выше. используйте расширение Flushbar или flash.

Я лично использовал Flushbar из-за его простоты.

person Waseem Ahmed    schedule 16.07.2020