Flutter 在不同屏幕上显示 Snacksbar

问题描述

在我的应用中,用户可以下载一些数据。如果完成,我想显示一个 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);
      }
    }

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...