微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何根据bool值在Auth屏幕和Home屏幕之间切换?

如何解决如何根据bool值在Auth屏幕和Home屏幕之间切换?

我要基于以下模型类中的布尔值(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()

解决方法

这是我与Provider一起做的方式:

routes: {
  "/": (context) => MainPage(),"/detail": (context) => UserDetailPage(),},builder: (context,child) {
  return Consumer<UsersProvider>(
    child: child,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()。希望您能理解,随时发表评论

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。