• 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 () и выйти там, возникла та же проблема