Флаттер: не удается перейти к любому виджету при нажатии на уведомление - PullRequest
0 голосов
/ 21 мая 2019

Я использую android_alarm_manager для отправки уведомлений по расписанию.Push-уведомление работает нормально.Но когда я нажимаю Push-уведомление , он вызывает onSelectNotification() метод, при котором я печатаю полезные данные push-уведомления, а затем перехожу к новому Widget.

Здесь успешно печатается Push-уведомление полезная нагрузка, но навигация не работает.Из отладки я вижу:

_globalKey.currentContext имеет значение null

Может кто-нибудь сказать мне, что не так с кодом или есть лучший способ решить эту проблему?

import 'dart:isolate';

import 'package:flutter/material.dart';
import 'package:android_alarm_manager/android_alarm_manager.dart';
import 'package:flutter_local_notifications/flutter_local_notifications.dart';
import 'package:daily_quotes/helpers/second_page.dart';
import 'package:daily_quotes/helpers/local_notification_helper.dart';

final notifications = FlutterLocalNotificationsPlugin();

GlobalKey _globalKey = new GlobalKey();

void pushNotification() async {
  showIconNotification(_globalKey.currentContext, notifications,
      icon: Image.asset("assets/screen.png"),
      title: "Some title",
      body: "HelloWorld",
      id: 40);
}

Future onSelectNotification(String payload) async {
  //This one is getting printed
  print("Payload : " + payload);
  //But the redirection is not working. As _globalKey.currentContext is null
  await Navigator.push(_globalKey.currentContext,
      MaterialPageRoute(builder: (context) => SecondPage(payload: payload)));
} 


void main() async {
  final settingsAndroid = AndroidInitializationSettings('@mipmap/screen');
  final settingsIOS = IOSInitializationSettings(
      onDidReceiveLocalNotification: (id, title, body, payload) =>
          onSelectNotification(payload));
  notifications.initialize(InitializationSettings(settingsAndroid, settingsIOS),
      onSelectNotification: onSelectNotification);
  final int helloAlarmID = 0;
  await AndroidAlarmManager.initialize();

  runApp(MyApp());

  await AndroidAlarmManager.periodic(
      const Duration(seconds: 10), helloAlarmID, pushNotification);
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
        title: 'Daily Quotes',
        theme: ThemeData(
          primarySwatch: Colors.pink,
        ),
        home: CategoryPage());
  }
}

...