我怎样才能让我的更改通知程序触发我的警报对话框?
How can I have my change notifier trigger my alert dialog?
我有一个通知服务,它是一个更改通知程序。当服务收到通知时,它会通知所有侦听器。我想在收听者收到通知时显示一个对话框。所以我在构建方法中执行以下操作
Consumer<NotificationService>(
builder: (BuildContext context, NotificationService notificationNotifier, _) {
if (notificationNotifier.hasNotifications)
_showNotification(context, notificationNotifier.popNotification());
return Scaffold(
这是显示的通知方法
Future<dynamic> _showNotification(BuildContext context, NotificationModel notification) async {
try {
print(notification.title);
await PlatformAlertDialog(
notification.title,
notification.body,
).show(context);
} on UserFriendlyException catch (error) {
await PlatformAlertDialog(
error.title,
error.message,
).show(context);
}
}
所以这会引发错误,因为我想在构建对话框时构建对话框 Unhandled Exception: setState() or markNeedsBuild() called during build.
我喜欢使用更改通知程序提供程序。那么我怎样才能使它起作用呢?
可以使用Flutter的SchedulerBinding.instance Api来防止这个异常。发生此错误是因为在构建构建方法之前,您调用了一个对话框,该对话框将阻止重建完成。
所以没有报错:
Consumer<NotificationService>(
builder: (BuildContext context, NotificationService notificationNotifier, _) {
if (notificationNotifier.hasNotifications){
SchedulerBinding.instance.addPostFrameCallback((_) =>
_showNotification(context, notificationNotifier.popNotification()));
}
return Scaffold(
但是,Flutter 文档建议您不要在构建方法中执行函数。这可能有副作用。
由于对话框需要的上下文,您可能正在使用这种方法。我建议看看这个插件:
有了它,您可以从代码中的任何位置打开对话框,而无需上下文,而且它的状态管理器比 changeNotifier 更容易,但性能还不错。
根据文档,changeNotifier 必须用于一个或最多两个侦听器。他的性能很差,和这个插件很像,但是不使用changeNotifier,相信会让你的项目更进化一点。
https://api.flutter.dev/flutter/foundation/ChangeNotifier-class.html
我有一个通知服务,它是一个更改通知程序。当服务收到通知时,它会通知所有侦听器。我想在收听者收到通知时显示一个对话框。所以我在构建方法中执行以下操作
Consumer<NotificationService>(
builder: (BuildContext context, NotificationService notificationNotifier, _) {
if (notificationNotifier.hasNotifications)
_showNotification(context, notificationNotifier.popNotification());
return Scaffold(
这是显示的通知方法
Future<dynamic> _showNotification(BuildContext context, NotificationModel notification) async {
try {
print(notification.title);
await PlatformAlertDialog(
notification.title,
notification.body,
).show(context);
} on UserFriendlyException catch (error) {
await PlatformAlertDialog(
error.title,
error.message,
).show(context);
}
}
所以这会引发错误,因为我想在构建对话框时构建对话框 Unhandled Exception: setState() or markNeedsBuild() called during build.
我喜欢使用更改通知程序提供程序。那么我怎样才能使它起作用呢?
可以使用Flutter的SchedulerBinding.instance Api来防止这个异常。发生此错误是因为在构建构建方法之前,您调用了一个对话框,该对话框将阻止重建完成。
所以没有报错:
Consumer<NotificationService>(
builder: (BuildContext context, NotificationService notificationNotifier, _) {
if (notificationNotifier.hasNotifications){
SchedulerBinding.instance.addPostFrameCallback((_) =>
_showNotification(context, notificationNotifier.popNotification()));
}
return Scaffold(
但是,Flutter 文档建议您不要在构建方法中执行函数。这可能有副作用。 由于对话框需要的上下文,您可能正在使用这种方法。我建议看看这个插件:
有了它,您可以从代码中的任何位置打开对话框,而无需上下文,而且它的状态管理器比 changeNotifier 更容易,但性能还不错。
根据文档,changeNotifier 必须用于一个或最多两个侦听器。他的性能很差,和这个插件很像,但是不使用changeNotifier,相信会让你的项目更进化一点。
https://api.flutter.dev/flutter/foundation/ChangeNotifier-class.html