问题描述
在我的应用中,用户可以下载一些数据。如果完成,我想显示一个 Snackbar
。
我知道我可以在 Widget
中显示它:
ScaffoldMessenger.of(context).showSnackBar(snackBar);
问题是用户可以在下载过程中更改屏幕。但是,无论用户当前在哪个页面上,仍会收到 snackbar
提示。
实现这一目标的最佳方法是什么?我找不到任何关于此的信息...如果您需要更多信息,请告诉我!
解决方法
您在新的 dart 文件上使用下载功能并将小吃店放在该页面上,以便在下载成功后调用它。现在正常工作或使用mounted方法调用小吃店功能。
使用flush bar包以获得最佳输出。
,不确定这是否是您要找的东西,但使用下面的包可能是实现它的最简单方法。
flutter_local_notifications: ^5.0.0+1 // 我用这个版本来测试这个概念。
根据需要编辑 LocalNotificationService 配置,比如静默通知用户。
从 flutter_local_notification 设置软件包。
PowerShell -NoP "((gcim Win32_USBControllerDevice).Dependent).DeviceID|%%{gp \"HKLM:\SYSTEM\CurrentControlSet\Enum\$_\"}|Select FriendlyName,HardwareID"
从任何地方调用这个函数,
// Setting up flutter_local_notifications: ^5.0.0+1 as a Service
import 'package:timezone/timezone.dart' as tz;
import 'package:timezone/data/latest.dart' as tz;
import 'package:flutter_local_notifications/flutter_local_notifications.dart';
class LocalNotificationService {
static final instance = LocalNotificationService();
FlutterLocalNotificationsPlugin flutterLocalNotificationsPlugin =
FlutterLocalNotificationsPlugin();
initialize() async {
tz.initializeTimeZones();
var initializationSettingsAndroid =
AndroidInitializationSettings('ic_notification');
var initializationSettingsIOS = IOSInitializationSettings(
onDidReceiveLocalNotification: onDidReceiveLocalNotification,);
var initializationSettings = InitializationSettings(
iOS: initializationSettingsIOS,android: initializationSettingsAndroid,);
await flutterLocalNotificationsPlugin.initialize(
initializationSettings,onSelectNotification: (String payload) {
// Do something on notification click
return null;
}
);
}
Future<void> scheduleNotification({
int id,String body,String title,String payload,DateTime scheduledNotificationDateTime,}) async {
final epoch = scheduledNotificationDateTime.microsecondsSinceEpoch;
var androidSpecifics = AndroidNotificationDetails(
'$epoch',title,body,priority: Priority.low,importance: Importance.min,);
var iOSSpecifics = IOSNotificationDetails();
NotificationDetails platformChannelSpecifics = NotificationDetails(
iOS: iOSSpecifics,android: androidSpecifics,);
final tzTime = tz.TZDateTime.fromMicrosecondsSinceEpoch(tz.local,epoch);
await flutterLocalNotificationsPlugin.zonedSchedule(
id,tzTime,platformChannelSpecifics,payload: payload,androidAllowWhileIdle: true,uiLocalNotificationDateInterpretation:
UILocalNotificationDateInterpretation.wallClockTime,);
}
Future onDidReceiveLocalNotification(
int i,String string1,String string2,String string3) async {}
Future cancelAllNotifications() async {
await flutterLocalNotificationsPlugin.cancelAll();
}
Future cancelNotification({int withId}) async {
await flutterLocalNotificationsPlugin.cancel(withId);
}
}