Загрузите SnackBar перед переходом на страницу входа

У меня есть форма регистрации, и я пытаюсь сделать так, чтобы она сначала показывала успешное сообщение SnackBar, прежде чем оно перейдет на страницу входа. когда я добавляю его в свой оператор if, он просто подталкивает экран входа в систему, не показывая никаких сообщений Snackbar

                   onPressed: ()  {
    
                        if (_formKey.currentState.validate()) {
                          Scaffold.of(context).showSnackBar(SnackBar(
                            content: Text('processing data'),
                          ));

                          User user = User(
                            fullName: fullName.text,
                            phoneNumber: phoneNumber.text,
                            password: password.text,
                          );

                          final database = DatabaseProvider.db;
                          database.insert(user);
                         
                          Scaffold.of(context).showSnackBar(SnackBar(
                            content: Text('registration successful'),
                          ));

                       Navigator.popAndPushNamed(context, Routes.home);
                        }

                        _formKey.currentState.save();
                      },

2 ответа

Решение

Это решение сработало для меня. Прикованный.closed а также .then в закусочную

onPressed: () {
                        if (_formKey.currentState.validate()) {
                          Scaffold.of(context).showSnackBar(SnackBar(
                            content: Text('processing data'),
                          ));

                          User user = User(
                            fullName: fullName.text,
                            phoneNumber: phoneNumber.text,
                            password: password.text,
                          );

                          final database = DatabaseProvider.db;
                          database.insert(user);

                          Scaffold.of(context)
                              .showSnackBar(SnackBar(
                                content: Text('registration successful'),
                              ))
                              .closed
                              .then((value) => Navigator.popAndPushNamed(
                                  context, Routes.home));
                        }

                        _formKey.currentState.save();
                      },

Ты можешь это сделать:

onPressed: () async {

                    if (_formKey.currentState.validate()) {
                      await Scaffold.of(context).showSnackBar(SnackBar(
                        content: Text('processing data'),
                      ));

                      User user = User(
                        fullName: fullName.text,
                        phoneNumber: phoneNumber.text,
                        password: password.text,
                      );

                      final database = DatabaseProvider.db;
                      await database.insert(user);
                     
                      await Scaffold.of(context).showSnackBar(SnackBar(
                        content: Text('registration successful'),
                      ));

                   Navigator.popAndPushNamed(context, Routes.home);
                    }

                    _formKey.currentState.save();
                  },
Другие вопросы по тегам