выход не работает с поставщиком потока - PullRequest
0 голосов
/ 05 августа 2020
• 1000 *
class User with ChangeNotifier {
  final String uid;
  final String email;

  User({this.uid, this.email});
}

У меня есть оболочка, которая возвращает либо Authentication (), либо SectionWrapper ()

class Wrapper extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    final user = Provider.of<User>(context);
    return user == null ? Authentication() : SectionWrapper();
  }
}

В оболочке раздела у меня есть 2 кнопки для перехода к 2 различным разделам приложения.

class SectionWrapper extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      backgroundColor: Theme.of(context).primaryColor,
      body: SizedBox.expand(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          crossAxisAlignment: CrossAxisAlignment.center,
          children: <Widget>[
            CupertinoButton(
                color: Theme.of(context).accentColor,
                child: Text('Go to individual sells'),
                onPressed: () {
                  Navigator.pushReplacementNamed(
                      context, IndividualsTabsScreen.routeName);
                }),
            SizedBox(height: 10.0),
            CupertinoButton(
                color: Theme.of(context).accentColor,
                child: Text('Go to bookstores'),
                onPressed: () {
                  Navigator.pushReplacementNamed(
                      context, BookstoresTabsScreen.routeName);
                }),
          ],
        ),
      ),
    );
  }
}

Функциональность входа в систему отлично работает с поставщиком потока. но при выходе пользовательский интерфейс не обновляется, поскольку я помещаю метод выхода в ящик обоих разделов. Я попытался поместить кнопку выхода в SectionWrapper (), и она сработала и вышла из системы с обновлением пользовательского интерфейса (возвращая Authentication ()), но когда я помещаю ее в ящик приложения или на любой экран внутри одного из разделов, он выходит, но пользовательский интерфейс не обновляется. Я также пытался обернуть ящик потребителем, это тоже не сработало.

в ящике, я пробовал использовать это

 Consumer<User>(
            builder: (ctx, user, _) => ListTile(
              title: Text('Sign Out'),
              leading: Icon(Icons.exit_to_app),
              onTap: () async {
                print(user.uid.toString()); //prints user id
                await _auth.signOut();
                print(user.uid.toString()); //also prints user id but i am expecting null value.
              },
            ),
          ),

, когда я использую приложение, прежде чем обновлять его uid = null, и после обновления приложения отображается экран аутентификации. Не могли бы вы помочь мне с этим? Я борюсь с этой проблемой около 2 недель.

edit: Мне надоело использовать построитель потоков, у меня возникла та же проблема, которая требует, чтобы я обновил sh приложение чтобы показать виджет аутентификации

class Wrapper extends StatelessWidget {
  static const String routeName = '/';
  @override
  Widget build(BuildContext context) {
//    final user = Provider.of<User>(context);

//    return user == null ? Authentication() : SectionWrapper();
//    return Authentication();

    return StreamBuilder<User>(
        stream: AuthService().user,
        builder: (context, snapshot) {
          if (snapshot.hasData)
            return SectionWrapper();
          else
            return Authentication();
        });
  }
}

проблема определена из-за навигатора, потому что я пытался go вернуться в SectionWrapper () и выйти там, возникла та же проблема

1 Ответ

0 голосов
/ 05 августа 2020

По сути, после выхода пользователей вы не уведомляете слушателей об изменении состояния User.

Ознакомьтесь с этим учебником здесь. Посмотрите, как они уведомляют слушателей о новом состоянии при каждом изменении объекта с помощью метода notifyListeners().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...