我要基于以下模型类中的布尔值(user.status)在登录屏幕和主屏幕之间切换
class User extends ChangeNotifier {
int phoneNumber;
bool status = false;
notifyListeners();
}
布尔User.status值从下面的函数中翻转
User _user = Provider.of<User>(context);
...
...
if (form.validate()) {
_user.status = true;
}
下面的函数必须侦听用户模型中状态值的更改,并将屏幕更改为Home()。
class Wrapper extends StatelessWidget {
@override
Widget build(BuildContext context) {
User authStatus = Provider.of<User>(context);
return authStatus.status ? Home() : Auth();
}
}
我没有任何错误,所有值都在相应更新,但是在侦听ChangeNotifier的更改后,不会重新构建Wrapper()
答案 0 :(得分:0)
这是我与Provider一起做的方式:
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中使用builder并定义路径,然后在builder内部使用Consumer子项是初始路径MainPage()
,因此,如果用户已经登录,他们将进入那里,如果不是,则基于状态,他们将进入重定向到LoginPage()
。希望您能理解,随时发表评论