You need to enable JavaScript to run this app. Flutter初始化器无法访问实例成员_setFilters报错如何修复?
优惠活动
大模型
产品
解决方案
定价
更多

Flutter初始化器无法访问实例成员_setFilters报错如何修复?

报错原因

Dart类的初始化顺序中,类字段的初始化器执行阶段,类实例还未完全创建完成,无法访问未初始化完成的实例成员。你代码中直接将routes定义为类的final字段,初始化时直接引用了实例方法_setFilters和实例变量_availableMeals,因此触发报错。

解决方案

有两种常用修复方案,选择任意一种即可:

方案1:将路由表改为动态getter(改动最小)

将原来的routes字段定义替换为getter,getter会在每次被调用时动态生成路由表,此时State实例已完成初始化,可以正常访问实例成员:

// 替换原有的final routes = ... 代码段
Map<String, WidgetBuilder> get routes => <String, WidgetBuilder>{
  TabsScreen.tag: (context) => TabsScreen(),
  HomePage.tag: (context) => HomePage(),
  FilterPage.tag: (context) => FilterPage(_setFilters),
  CategoryMealScreen.tag: (context) => CategoryMealScreen(_availableMeals),
  MealDetailScreen.tag: (context) => MealDetailScreen(),
};

方案2:改用onGenerateRoute处理路由

删除静态路由表配置,在MaterialApp中通过onGenerateRoute回调处理路由跳转,回调执行时实例已初始化完成,可以正常访问实例成员:

@override
Widget build(BuildContext context) {
  const String _category = 'Categories';

  return MaterialApp(
    title: _category,
    home: TabsScreen(),
    debugShowCheckedModeBanner: false,
    onGenerateRoute: (settings) {
      switch (settings.name) {
        case TabsScreen.tag:
          return MaterialPageRoute(builder: (context) => TabsScreen());
        case HomePage.tag:
          return MaterialPageRoute(builder: (context) => HomePage());
        case FilterPage.tag:
          return MaterialPageRoute(builder: (context) => FilterPage(_setFilters));
        case CategoryMealScreen.tag:
          return MaterialPageRoute(builder: (context) => CategoryMealScreen(_availableMeals));
        case MealDetailScreen.tag:
          return MaterialPageRoute(builder: (context) => MealDetailScreen());
        default:
          return MaterialPageRoute(builder: (ctx) => HomePage());
      }
    },
    onUnknownRoute: (settings) {
      return MaterialPageRoute(
        builder: (ctx) => HomePage(),
      );
    },
  );
}

内容的提问来源于stack exchange,提问作者Punlork Chek

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.11 06:18:03