【问题标题】:Flutter web: BlocProvider: TypeError: Cannot read property 'get$bloc' of undefinedFlutter web:BlocProvider:TypeError:无法读取未定义的属性'get$bloc'
【发布时间】:2020-04-18 00:44:11
【问题描述】:

我仅在配置文件和发布(Web)构建中遇到此问题,但在调试构建中运行良好。

所以我有这门课,它可以访问didChangeDependencies()中的集团

class _CategoryPageState extends State<CategoryPage> {
  BizBloc _bizBloc;
  @override
  void didChangeDependencies() {
    super.didChangeDependencies();
    _bizBloc = BizBlocProvider.of(context);
  }
}

BlocProvider 几乎在应用程序的根附近,在main.dart 中定义如下:

Widget build(BuildContext context) {
  return CityBlocProvider(
    child: CategoryBlocProvider(
        child: BizBlocProvider(
            child: MaterialApp( /** actual code goes here */ )
  )));
}

使用此设置,在调试模式下一切正常,但在配置文件构建时,我收到以下错误:

══╡ EXCEPTION CAUGHT BY WIDGETS LIBRARY ╞═══════════════════════════════════════════════════════════
js_primitives.dart:49 The following NullError was thrown building Builder:
js_primitives.dart:49 NoSuchMethodError: method not found: 'get$bloc' on null
js_primitives.dart:49 
js_primitives.dart:49 Widget creation tracking is currently disabled. Enabling it enables improved error messages. It can
js_primitives.dart:49 be enabled by passing `--track-widget-creation` to `flutter run` or `flutter test`.
js_primitives.dart:49 
js_primitives.dart:49 When the exception was thrown, this was the stack:
js_primitives.dart:49 TypeError: Cannot read property 'get$bloc' of undefined
js_primitives.dart:49     at Object.BizBlocProvider_of (https://bazon.in/app/main.dart.js:10277:126)
js_primitives.dart:49     at _CategoryPageState.didChangeDependencies$0 (https://bazon.in/app/main.dart.js:47315:25)
js_primitives.dart:49     at StatefulElement._firstBuild$0 (https://bazon.in/app/main.dart.js:85143:31)
js_primitives.dart:49     at StatefulElement.mount$2 (https://bazon.in/app/main.dart.js:85016:12)
js_primitives.dart:49     at SingleChildRenderObjectElement.inflateWidget$2 (https://bazon.in/app/main.dart.js:84733:16)
js_primitives.dart:49     at SingleChildRenderObjectElement.updateChild$3 (https://bazon.in/app/main.dart.js:84661:20)
js_primitives.dart:49     at SingleChildRenderObjectElement.mount$2 (https://bazon.in/app/main.dart.js:85506:39)
js_primitives.dart:49     at StatelessElement.inflateWidget$2 (https://bazon.in/app/main.dart.js:84733:16)
js_primitives.dart:49     at StatelessElement.updateChild$3 (https://bazon.in/app/main.dart.js:84661:20)
js_primitives.dart:49     at StatelessElement.performRebuild$0 (https://bazon.in/app/main.dart.js:85039:41)

更新 1:

现在我有一个父WidgetHomePage,其didChangeDependencies()如下:

  @override
  void didChangeDependencies() {
    print('Home: Did Change Dependencies');
    print(context);
    print(CityBlocProvider.of(context));
    _cityBloc = CityBlocProvider.of(context);
    _categoryBloc = CategoryBlocProvider.of(context);
    super.didChangeDependencies();
  }

我在本地运行上述代码时的日志是:

js_primitives.dart:32 Home: Did Change Dependencies
js_primitives.dart:32 HomePage(dirty, state: _HomePageState#eb8ac(lifecycle state: initialized))
js_primitives.dart:32 Instance of 'CityBloc'

但是当我在profile build 中运行相同的代码时,日志是:

js_primitives.dart:49 Home: Did Change Dependencies
js_primitives.dart:49 HomePage
js_primitives.dart:49 ══╡ EXCEPTION CAUGHT BY WIDGETS LIBRARY ╞═══════════════════════════════════════════════════════════
js_primitives.dart:49 The following NullError was thrown building _BodyBuilder:
js_primitives.dart:49 NoSuchMethodError: method not found: 'get$bloc' on null

HomePage 的实例看起来不同。配置文件构建托管@https://bazon.in/app/#/

这里可能出了什么问题?

【问题讨论】:

    标签: flutter flutter-web


    【解决方案1】:

    检查错误,CityBlocProvider 似乎为空。您可能需要考虑在 initState() 而不是 didChangeDependencies() 中初始化 _cityBloc

    【讨论】:

      猜你喜欢
      • 2017-04-28
      • 2020-09-04
      • 2021-04-29
      • 2021-12-01
      • 1970-01-01
      • 2021-12-31
      • 2021-12-17
      • 1970-01-01
      • 2020-07-14
      相关资源
      最近更新 更多