我想根据下面模型类的布尔值(user.status(在登录屏幕和主屏幕之间切换
class User extends ChangeNotifier {
int phoneNumber;
bool status = false;
notifyListeners();
}
bool User.status值从函数下方翻转
User _user = Provider.of<User>(context);
...
...
if (form.validate()) {
_user.status = true;
}
下面的函数必须监听User模型中状态值的变化,并将屏幕更改为Home((。
class Wrapper extends StatelessWidget {
@override
Widget build(BuildContext context) {
User authStatus = Provider.of<User>(context);
return authStatus.status ? Home() : Auth();
}
}
我没有任何错误,所有的值都在相应地更新,但Wrapper((在听取ChangeNotifier 的更改后没有重建
以下是我如何使用提供程序:
routes: {
"/": (context) => MainPage(),
"/detail": (context) => UserDetailPage(),
},
builder: (context, child) {
return Consumer<UsersProvider>(
child: child,
builder: (context, provider, child) {
final value = provider.user;
if (!value.status) {
return Navigator(
onGenerateRoute: (settings) => MaterialPageRoute(
settings: settings, builder: (context) => LoginPage()),
);
}
return MultiProvider(
providers: [
ChangeNotifierProvider(create: (context) => UsersProvider()),
ChangeNotifierProvider(
create: (context) => InvoicesProvider()),
ChangeNotifierProvider(create: (context) => EventsProvider()),
],
child: child,
);
},
);
},
基本上在main.dart中使用构建器并定义路由,然后在构建器内部使用Consumer are child是初始路由MainPage()
,所以如果用户已经登录,他们将转到那里,如果没有,他们将根据状态重定向到LoginPage()
。我希望你能理解,随时评论