Маршрутизация к определенному экрану флаттера при уведомлении о клике - PullRequest
0 голосов
/ 19 октября 2019

Как перейти на конкретный экран при нажатии на уведомление? я использовал облачную функцию в javascript и когда я нажимаю на уведомление, оно открывает мне приложение, а не конкретный экран

 _fcm.configure(
  onMessage: (Map<String, dynamic> message) async {
    print("onMessage: $message");
    getOrder(message['data']['order_id']);
    showDialog(
      context: context,
      builder: (context) => AlertDialog(
        content: ListTile(
          title: Text(message['notification']['title']),
          subtitle: Text(message['notification']['body']),
        ),
        actions: <Widget>[
          FlatButton(
            child: Text('Ok'),
            onPressed: () => Navigator.of(context).pop(),
          ),
        ],
      ),
    );
  },
  onLaunch: (Map<String, dynamic> message) async {
    print("onLaunch: $message");
    Navigator.push(
        context,
        MaterialPageRoute(
            builder: (context) => DetailOrder()));
  },
  onResume: (Map<String, dynamic> message) async {
    print("onResume: $message");
    Navigator.push(
        context,
        MaterialPageRoute(
            builder: (context) => DetailOrder()));
  },
);

1 Ответ

1 голос
/ 19 октября 2019

Вы можете попробовать использовать именованные маршруты + глобальную клавишу навигатора, у меня это работает в несколько иной ситуации.
Сначала настройте глобальную клавишу навигатора, как это:

...
class MyApp extends StatelessWidget {
  static final navigatorKey = GlobalKey<NavigatorState>();
  ...

Затем прямо под определениемименованный менеджер маршрутов:

...
Route routes(RouteSettings settings) {
  if (settings.name == "/") {
    return MaterialPageRoute(
      builder: (_) => HomePage(),
    );
  } else if (settings.name.startsWith("/details/")) {
    try {
      String id = settings.name.split("/")[2];
      return MaterialPageRoute(
        builder: (_) => DetailPage(id),
      );
    } catch (e) {
      return MaterialPageRoute(
        builder: (_) => HomePage(),
      );
    }
  } else {
    return MaterialPageRoute(
      builder: (_) => HomePage(),
    );
  }
}
...

и добавьте вместе ключ навигации и маршруты к MaterialApp:

...
@override
Widget build(BuildContext context) {
  return MaterialApp(
    initialRoute: "/",
    onGenerateRoute: routes,
    title: 'MyApp',
    navigatorKey: navigatorKey,
    theme: ThemeData(
      primarySwatch: Colors.blue,
    ),
    home: HomePage(),
  );
}
...

После настройки всего этого вы можете перемещаться между домашней страницей и деталями, используяКлавиша навигатора, как это:

MyApp.navigatorKey.currentState.pushNamed("/"); // to navigate to HomePage
MyApp.navigatorKey.currentState.pushNamed("/details/1"); // to navigate to DetailPage

Надеюсь, что это работает, удачи!

...