0

我正在使用 ChangeNotifierProvider 提供一个布尔值,该布尔值根据用户是否登录返回 true 或 false。如何使布尔值可侦听,以便提供者在用户登录/退出时自动更新它?

Widget build(BuildContext context) {
var socialProvider = Provider.of<SocialProvider>(context);
return Container(  
           child: new FlatButton(
           onPressed: () {
               if (
                  socialProvider.currentlogged != true
                  ) {                        
       Do something
             } else {
        Do something else
                      },
),}
4

1 回答 1

1

使用提供者实现身份验证功能的最佳方法是使用提供者包装您的父类。例如,

MultiProvider(
    providers: [
      ChangeNotifierProvider(
        create: (_) => Authentication(),
      ),
      )
    ],
    child: MaterialApp(
          ........
    ),

通过这种方式,您可以在应用程序的任何地方使用提供者,只需使用 Consumer 包装子小部件。

Consumer<Authentication>(
      builder: (context, auth, _) => Container(  
       child: new FlatButton(
       onPressed: () {
           if (auth.currentlogged != true) {                        
             Do something
         } else { 
             Do something else
         }

由于身份验证控制整个应用程序本身,我将 MaterialApp 与 Provider 包装在一起,您可以在任何小部件中执行此操作,以便其所有子级都可以使用它。当你调用 notifyListeners(); 在提供者中,它将重新呈现整个消费者部分。

于 2020-07-14T17:26:12.327 回答