颤振:如何从颤振/提供程序更改通知程序获取值

时间:2021-03-25 17:39:48

标签: flutter

我有一个程序,我需要在底部导航图标旁边添加一个计数。所以,我正在尝试使用 ChangeNotifierProvider 并将其包裹在我的根小部件周围。如何从 IterableModel 获取计数到我的小部件?

主应用

ChangeNotifierProvider(create: (_) => IterableModel()),

HOME.DART

BottomNavigationBarItem(
 icon: Container(
   margin: EdgeInsets.only(top: 20.0),
   child: ImageWithBadge(
      text: 'notification',
      iconData: Icons.mail,
      notificationCount: "NEED MESSAGE COUNT,
   ),
 ),      
),

IterableModel.dart

class IterableModel extends ChangeNotifier {
  List<InAppMessages> inAppMessages;
  int cnt;
  IterableModel({this.inAppMessages});

  void messageCnt(List inAppMessages) {
    cnt = inAppMessages.length;
    notifyListeners();
  }

  IterableModel.fromJson(Map<String, dynamic> json) {
    if (json['inAppMessages'] != null) {
      inAppMessages = [];
      json['inAppMessages'].forEach((v) {
        inAppMessages.add(new InAppMessages.fromJson(v));
      });
      messageCnt(inAppMessages);
    }
  }
}

我想我需要一个消费者和建设者,但我现在不知道把它放在哪里

1 个答案:

答案 0 :(得分:1)

final count = Provider.of<IterableModel>(context).cnt; 

在你的构建方法的顶部插入这一行,这样它就可以访问,但也重建整个小部件,一种更好的方法是使用消费者

Consumer<IterableModel>(
  builder: (context,model,_) => BottomNavigationBarItem(
icon: Container(
margin: EdgeInsets.only(top: 20.0),
child: ImageWithBadge(
  text: 'notification',
  iconData: Icons.mail,
  notificationCount: model.cnt.toString(),
 ),
 ),      
 ),
)