提供商试图更新我的计数,我何时会收到通知?

问题描述

我无法更新我的用户界面

//// 在这里,我正在控制台中获取更新数据,但无法在我的 UI 内部进行更新

我的 NotificationCountClass

class NotificationCount extends ChangeNotifier{
   var count;

   NotificationCount({
     this.count =0,});

   addNotificationCount(){
    count++;
    notifyListeners();
    print("Notification Count $count"); 
  }

}

main :在这里我将小部件包装在 multiprovider 中,以便我可以在我的应用程序中的任何位置使用它

return MultiProvider(
          providers: [
            ChangeNotifierProvider(create: (context) => AppService()),ChangeNotifierProvider(create: (context) => NotificationCount()),],child: Consumer<AppService>(
            builder: (context,appService,child) {
              return GetMaterialApp(
                title: AppStrings.APP_TITLE,theme: AppTheme.lightTheme,darkTheme: AppTheme.dartTheme,navigatorKey: GlobalVariable.navigatorKey,supportedLocales: [
                  Locale('en'),localizationsDelegates: [
                  CountryLocalizations.delegate,themeMode: appService.isDarkMode ? ThemeMode.dark : ThemeMode.light,initialRoute: AppRouter.SPLASH_SCREEN,onGenerateRoute: AppRouter.router.generator,// routes: {
                //   "/":(context) =>Home(),//   "/AppChat" : (context) => AppChat(),// },debugShowCheckedModeBanner: false,// home: AppChat(),);
            },),);

// 将状态与消费者小部件一起使用,以便只需要重新构建小部件

Consumer<NotificationCount>(
                                              builder: (context,value,child) {
                                                var count = value.count;
                                                print("Count of Not : $count");
                                                return Text(
                                                  "$count",style: TextStyle(
                                                    color: Colors.white,);
                                              },

使用提供程序获取 NotificationCount 类,但仍然无法更新 UI

 final notificationCount = Provider.of<NotificationCount>(context,listen: false);

解决方法

我可以在我这边重现您的问题,并且可以通过使用 MultiProvider 的构建器而不是 child 来修复它。

代替

return MultiProvider(
          providers: [
            ChangeNotifierProvider(create: (context) => AppService()),ChangeNotifierProvider(create: (context) => NotificationCount()),],child: Consumer<AppService>(

写一些类似的东西:

return MultiProvider(
        providers: [
          ChangeNotifierProvider(create: (context) => AppService()),builder: (context,_) => Consumer<AppService>(
...