如何在颤动中从类(小部件外部)打开屏幕

Posted

技术标签:

【中文标题】如何在颤动中从类(小部件外部)打开屏幕【英文标题】:How to open a screen from a class (outside a widget) in flutter 【发布时间】:2021-03-01 00:35:05 【问题描述】:

所以,我的 lab_widget 有一个普通按钮,它从另一个名为 not_plugin 的文件中调用一个函数。我希望每次单击按钮时,not_pugin 中的函数都会打开一个确定的屏幕。这就是我在 not_plugin 中的内容:


Future<dynamic> onClick(String payload) async 
     //Do other things

     Navigator.push(context, MaterialPageRoute(builder: (context) => LabMdScreen()));


但它会引发以下错误:

46:24:错误:没有为类“NotPlugin”定义吸气剂“上下文”。

“NotPlugin”来自“not_plugin.dart”。 尝试将名称更正为现有 getter 的名称,或定义一个名为“context”的 getter 或字段。 Navigator.push(context, MaterialPageRoute(builder: (context) => MyScreen()));

那么我该如何解决呢?

更新

传递一个 BuildContext 后,在另一个函数中抛出此错误:

Future<void> initLocalNotification() async 
    androidInitializationSettings =
        AndroidInitializationSettings('@mipmap/ic_launcher');//here
    iosInitializationSettings = IOSInitializationSettings(
        onDidReceiveLocalNotification: onDidReceiveLocalNotification);
    initializationSettings = InitializationSettings(
        android: androidInitializationSettings, iOS: iosInitializationSettings);

    await flutterLocalNotificationsPlugin.initialize(initializationSettings,
        onSelectNotification: onClick());
  

在最后一行(onSelectNotification: onClick());)

错误:无法将参数类型“Future”分配给参数类型“Future Function(String)”

【问题讨论】:

【参考方案1】:

您需要将 BuildContext 传递给您的函数:

void onClick(String payload, BuildContext context) 
     //Do other things

     Navigator.push(context, MaterialPageRoute(builder: (context) => LabMdScreen()));

【讨论】:

错误:参数类型“Future Function(String, BuildContext)”不能分配给参数类型“Future Function(String)”。 为什么你的函数是异步的? 你是否传递了调用这个函数的上下文和这个类中的导入材料? 是的,但是我有另一个函数正在抛出,我会更新问题给你看 我还是看不到你在哪里调用了onClick函数,你能说明你在哪里调用这个函数吗?

以上是关于如何在颤动中从类(小部件外部)打开屏幕的主要内容,如果未能解决你的问题,请参考以下文章

如何在颤动中从父小部件调用子小部件的initState()方法

如何在颤动中从父小部件访问所有孩子的状态?

如何在颤动的屏幕上显示一个小部件?

如何在颤动中截取屏幕之外的小部件屏幕截图?

如何模拟用于测试颤动屏幕小部件的导航参数?

如何在颤动中将数据从一个小部件传递到另一个小部件?