如何在Flutter中从不同的文件访问类方法?

puruo6ea  于 2023-05-29  发布在  Flutter
关注(0)|答案(1)|浏览(209)

我在main.dart文件中有一个简单的类MyApp,其中有两个函数(setLocalesetThemeMode)。

class MyApp extends StatefulWidget {
  const MyApp({super.key});

  @override
  State<MyApp> createState() => _MyAppState();

  static State<MyApp> of(BuildContext context) =>
      context.findAncestorStateOfType<_MyAppState>()!;
}

class _MyAppState extends State<MyApp> {

    void setLocale(String language) {}
    void setThemeMode(ThemeMode mode) {}

}

我想在不同文件flutter_flow.dart中的函数中使用它们(没有类,带有这些函数的干净文件)。

void setAppLanguage(BuildContext context, String language) =>
    MyApp.of(context).setLocale(language);

void setDarkModeSetting(BuildContext context, ThemeMode themeMode) =>
    MyApp.of(context).setThemeMode(themeMode);

我被这个错误困住了。The method 'setLocale' isn't defined for the type 'State'. Try correcting the name to the name of an existing method, or defining a method named 'setLocale'.
据我所知,虽然我用类MyApp导入文件,但文件看不到此方法。我可以寻求帮助吗?我该做什么?在哪里寻找解决方案?

hlswsv35

hlswsv351#

您需要更改

State<MyApp> of(BuildContext context)

_MyAppState of(BuildContext context)

使用您当前的代码,当您这样做

MyApp.of(context)

它返回类型State<MyApp>,这是泛型Statefrom flutter,它不包含任何自定义方法。
当您将of(BuildContext context)的返回值更改为_MyAppState时,MyApp.of(context)将返回_MyAppState类型。dart分析器知道它有您的自定义方法setLocalesetThemeMode,并且不会再抛出错误。

相关问题