ios Flutter应用程序终止时,单击通知时导航到所需屏幕的问题

jecbmhm3  于 2023-08-08  发布在  iOS
关注(0)|答案(1)|浏览(121)

场景

我有一个Flutter应用程序,有三个屏幕:

  1. SplashScreen(Material App首页)
  2. SecondScreen
    1.第三屏幕

要求

1.当应用程序启动时,SplashScreen加载,3秒后导航到SecondScreen。
1.当应用程序被终止并且用户点击通知时,他应该被带到第三屏幕。

问题

当应用程序终止时单击通知时,应用程序将启动并将用户带到SecondScreen并停止在那里。它不会导航到第三屏幕。
但是,如果我禁用了从启动画面到第二画面的导航,当应用程序终止时,我可以在点击通知时到达第三画面。不幸的是,这是一个强制性的要求,我的应用程序采取用户从闪屏自动到第二屏幕后3秒钟。

编码

下面的代码负责在单击通知时导航到ThirdScreen。

navigatorKey.currentState
          ?.push(MaterialPageRoute(builder: (context) => const ThirdScreen()));

字符串

申请

我想知道这是否是Flutter的一个缺点,如果应用程序的主屏幕有自己的导航,它会阻止导航到所需的屏幕。我看过的所有教程,只向我们展示了如何在应用程序终止时单击通知时导航到所需的屏幕,但在所有这些教程中,没有像我一样实现SplashScreen。
对此是否有解决方案或变通办法?

编辑
启动画面导航代码

class _HomePageState extends State<HomePage> {
  @override
  void initState() {
    super.initState();
    navigate();
  }

  Future<void> navigate() async {
    await Future.delayed(const Duration(seconds: 3));
    if (context.mounted) {
      Navigator.push(context,
          MaterialPageRoute(builder: (context) => const SecondScreen()));
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: const Text("Notifications")),
      body: // Widgets
  }

brgchamk

brgchamk1#

您可以有一个方法来确定应用程序是否由通知启动。举例来说:

Future<bool> getInitNotif() async {
    ReceivedAction? receivedAction = await AwesomeNotifications().getInitialNotificationAction(removeFromActionEvents: true);
    if (receivedAction?.buttonKeyPressed == 'ACCEPT') {
        return true;
    }
    return false;
}

字符串
然后在main方法中,你可以这样做:

bool acceptedNotification = await getInitNotif();
runApp(MainApp(acceptedNotification ? const ThirdScreen() : const HomePage()));


您将MainApp修改为:

class MainApp extends StatelessWidget {
    const MainApp(this.startPage, {super.key});
    final Widget startPage;

    @override
    Widget build(BuildContext context) {
        return MaterialApp(
            home: startPage,
        );
    }
}

相关问题