没有提供者上下文时,UI中的UI不会更新

时间:2020-07-27 22:23:39

标签: flutter flutter-provider

尝试使用提供程序包在需要时更新值。值也在更新,但问题是没有通过上下文,UI不会更新。

使用get_it注册提供商

sl.registerSingleton<AppBarProvider>(
 AppBarProvider(),
);

更新值

final appBarProvider = sl<AppBarProvider>();

void setUpFcm() async {
_fcm.configure(
  onMessage: (Map<String, dynamic> message) async {
   appBarProvider.setMessageArrivedDot = true;

  },
  onLaunch: (Map<String, dynamic> message) async {
    print(message.toString());
   },
  onResume: (Map<String, dynamic> message) async {
    print(message.toString());
   },
 );
}

并在用户界面中消费

Consumer<AppBarProvider>(
        builder: (context, provider, _) {
          return Stack(
            overflow: Overflow.visible,
            children: <Widget>[
              IconButton(
                padding: EdgeInsets.only(top: 12.0, right: 20.0),
                icon: Icon(
                  Icons.message,
                  color: Colors.white,
                  size: _iconSize,
                ),
                onPressed: () {
               
                },
                tooltip: 'Messages',
              ),
              provider.messageArrived == true
                  ? buildMessageArrivedDot()
                  : Container()
            ],
          );
        },
      ),

因此,尽管模型类数据已更新,但UI从未更新。但是,如果像下面这样写,并在setupFCM(context)方法中传递上下文参数,则可以正常工作。

Provider.of<AppBarProvider>(context).setMessageArrivedDot = true;

那么这里出了什么问题。为什么我必须传递上下文才能在使用者中调用以更新UI。该如何解决?

0 个答案:

没有答案