尝试使用提供程序包在需要时更新值。值也在更新,但问题是没有通过上下文,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。该如何解决?