如何将上下文传递给另一个小部件?

问题描述 投票:0回答:1

我正在使用flutter_local_notifications的应用程序通知。我的应用程序包含两个小部件。 FirstPage和SecondPage小部件/类。我的FirstPage小部件的目的是显示将来会发生的警报/通知列表。而SecondPage小部件的目的是创建通知。

基本上,当我打开我的应用程序时,它将显示FirstPage,然后我可以使用Navigation pushNamed导航到我的SecondPage。

理想情况下,当我点击通知时,它将在FirstPage上显示一个对话框。

问题是,当我点击通知时,FirstPage上没有任何内容,但是当我导航到我的SecondPage时,对话框出现在那里。

我试图使用全局变量将我的FirstPage的上下文传递给SecondPage上的对话框:

BuildContext _contextOfFirst; // The global variable I used to store the context of FirstPage

...

class FirstPageState extends State<FirstPage> {

    ...

    @override
    Widget build(BuildContext context){
        _contextOfFirst = context; // FirstPage's context was stored on my global variable
    }

}

...

class SecondPageState extends State<SecondPage> {

    ...

    Future onselectNotification(String payload) async{

        print(_contextOfFirst); // Just for checking 

        showCupertinoDialog(
            context: _contextOfFirst, // I placed it here. Hoping that it will be displayed on the FirstPage
            builder: (_) => new CupertinoAlertDialog(
                title: new Text("Some Title"),
                content: new Text("$payload")
           )
        );
    }
...
}

即使我将FirstPage的上下文传递给对话框后,对话框仍然不会显示在FirstPage上,当我导航到SecondPage时,它会出现在那里。

我认为通过从FirstPage提供上下文到对话框,它将使对话框出现在FirstPage上。但是我错了。

我很想知道我哪里出错了。

我很感激你们的任何启发。

android dart flutter
1个回答
0
投票

您正在第一个活动中显示通知并调用onselectNotification,您将在第二个活动中显示对话框!这没有意义。

所以我建议你将onselectNotification放在First类中,并作为Callback调用你的Dialog来显示你设置一个计时器或点击按钮你会显示第二个活动(如果你分享了showCupertinoDialog的代码,我可以知道你试图实现什么样的场景)。

所以你的问题不是一个上下文问题,它只是一个错误的调用指令。

© www.soinside.com 2019 - 2024. All rights reserved.