flutter 无法在DidReceiveNotificationResponse上导航特定屏幕FCM,原因是MyApp()home

3duebb1j  于 2023-03-13  发布在  Flutter
关注(0)|答案(2)|浏览(161)

当我单击flutter中的通知时,我导航到一个特定的页面,但是由于我在MyApp小部件中为home参数指定的类,它没有重定向到我想要的页面。
当我给予这个给材料页主页;

home: ResponsiveSizer(
    builder: (context, orientation, screenType) {
      return const HomeScreen();
    },
  ),

它正在工作,但当我用LoginScreen更改返回类时;

home: ResponsiveSizer(
builder: (context, orientation, screenType) {
  return const LoginScreen();
},

),
导航过程不工作;

Navigator.push(
    context,
    MaterialPageRoute(
        builder: (context) =>
            const SpecificScreen(whereCome: "notification")));

难道它不导航,因为它是在同一树小部件树LoginScreen()和Specific Screen()?

如何解决此问题?

fhg3lkii

fhg3lkii1#

如果应用程序已关闭,则onDidReceiveNotificationResponse函数将不会调用,只有应用程序才会打开,否则如果应用程序已打开,则此方法将起作用
我通过以下操作解决了这个问题:
创建一个指示器来检查通知是否打开,您可以使用数据库来检查最后一个通知发布的内容,并检查它是否打开

yiytaume

yiytaume2#

导航可能不起作用,因为LoginScreen是应用程序的初始屏幕,并且在MaterialApp中设置为home参数。当您导航到SpecificScreen时,您尝试将新路线推送到导航器堆栈中,但是,由于导航器已经在LoginScreen路线上,因此导航不起作用。
要解决此问题,您必须在MaterialApp中将home参数更改为空Scaffold,然后使用Navigator小部件在屏幕之间导航。

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        body: LoginScreen(),
      ),
    );
  }
}

class LoginScreen extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Center(
        child: ElevatedButton(
          child: Text("Go to Specific Screen"),
          onPressed: () {
            Navigator.push(
              context,
              MaterialPageRoute(
                builder: (context) =>
                    SpecificScreen(whereCome: "notification"),
              ),
            );
          },
        ),
      ),
    );
  }
}

class SpecificScreen extends StatelessWidget {
  final String whereCome;

  const SpecificScreen({Key? key, required this.whereCome}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Center(
        child: Text("Where I come from: $whereCome"),
      ),
    );
  }
}

相关问题