【问题标题】:Flutter WorkManager And PushNotification Callback Execution IssueFlutter WorkManager 和 PushNotification 回调执行问题
【发布时间】:2021-08-30 13:32:24
【问题描述】:

我正在开发工作经理以获取 api 数据并在 Flutter 中启动通知,

    //this is the name given to the background fetch
    const simplePeriodicTask = "simplePeriodicTask";
    Workmanager workmanager = Workmanager();
    // flutter local notification setup

    Future initializeWorkManagerAndPushNotification() async {
      await workmanager.initialize(
        callbackDispatcher,
        isInDebugMode: false,
      ); //to true if still in testing lev turn it to false whenever you are launching the app
      await workmanager.registerPeriodicTask(
        "1", simplePeriodicTask,
        existingWorkPolicy: ExistingWorkPolicy.replace,
        frequency: Duration(minutes: 1), //when should it check the link
        initialDelay:
            Duration(seconds: 5), //duration before showing the notification
        constraints: Constraints(
          networkType: NetworkType.connected,
        ),
      );
    }

    void callbackDispatcher() async {
      workmanager.executeTask((task, inputData) async {
        print('Ruuning - callbackDispatcher');
        FlutterLocalNotificationsPlugin flutterLocalNotificationsPlugin =
            FlutterLocalNotificationsPlugin();
        var androidSettings = AndroidInitializationSettings('@mipmap/ic_launcher');
        var iOSSettings = IOSInitializationSettings();
        var initSetttings =
            InitializationSettings(android: androidSettings, iOS: iOSSettings);

        //
        // TODO: Permission
        //
        await flutterLocalNotificationsPlugin.initialize(initSetttings);

        String message =
            await WebServiceController.getInstance.getPushNotificationMessage();
        print("here 1 ================");
        // print(response);
        // var convert = json.decode(response.body);
        // if (convert['status'] == true) {
        //   showNotification(convert['msg'], flutterLocalNotificationsPlugin);
        // } else {
        //   print("no messgae");
        // }
        print("messgae");
        print(message);
        await showNotification(message, flutterLocalNotificationsPlugin);

        return Future.value(true);
      });
    }

    Future showNotification(payloadmessage, flutterLocalNotificationsPlugin) async {
      print("showing notification");
      var androidDetails = AndroidNotificationDetails(
          'channel id', 'channel NAME', 'CHANNEL DESCRIPTION',
          priority: Priority.high, importance: Importance.max);
      var iOSDetails = IOSNotificationDetails();
      var platform = NotificationDetails(android: androidDetails, iOS: iOSDetails);
      await flutterLocalNotificationsPlugin.show(
          0, 'Message - Virtual intelligent solution', '$payloadmessage', platform,
          payload: 'OnClick Payload -VIS \n $payloadmessage');
    }

    void main() async {
      WidgetsFlutterBinding.ensureInitialized();
      SystemChrome.setPreferredOrientations(
          [DeviceOrientation.portraitUp, DeviceOrientation.portraitDown]);

      await initializeWorkManagerAndPushNotification();

      runApp(MyApp());
    }

这个函数callbackDispatcher()函数用于初始化通知并从下面的方法中获取api数据。

    Future<String> getPushNotificationMessage() async {
      print("getting - getPushNotificationMessage");
      try {
        var response = await _dio.get(APIURLConstants.pushNotification);
        print(response);
        print("here================ ${response.data}");
        var convert = json.decode(response.data);
        return convert['message'].toString() ?? "";
      } on DioError catch (error) {
        print("Dio Error ${error.message}");
      } catch (error) {
        print("Error - ${error.toString()}");
      }
    }

根据下面的输出,似乎只有 print(response);的 getPushNotificationMessage() 是在下面的代码没有执行之后执行的,

    Performing hot restart...
    Restarted application in 2,266ms.
    W/WM-WorkSpec(31092): Interval duration lesser than minimum allowed value; Changed to 900000
    I/flutter (31092): getting - getPushNotificationMessage
    I/flutter (31092): {"message":"Hi There I am notification","seen":0,"notification_id":"111"}
    I/WM-WorkerWrapper(31092): Worker result SUCCESS for Work [ id=6c935b3b-bfe4-47fa-b30a-0965299f5224, tags={ be.tramckrijte.workmanager.BackgroundWorker } ]

【问题讨论】:

    标签: android flutter dart push-notification android-workmanager


    【解决方案1】:

    我创建了这个问题,为了使代码执行,我需要热重启应用程序来执行代码

      main() method
    

    【讨论】:

    • 是的,您只需进行热重启或重新运行应用程序
    • 您好,请问您遇到了什么问题?
    • 我只需要源代码试试,拜托
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-29
    • 1970-01-01
    • 2022-07-03
    • 2021-12-25
    • 2012-08-26
    • 1970-01-01
    相关资源
    最近更新 更多