【问题标题】:Flutter: Unhandled Exception: 'package:provider/src/provider.dart': Failed assertion: line 240 pos 12: 'context != null': is not trueFlutter:未处理的异常:'package:provider/src/provider.dart':断言失败:第 240 行 pos 12:'context != null':不正确
【发布时间】:2020-12-03 10:27:45
【问题描述】:

当我从该页面 (shoe_box_page.dart) 导航到另一个页面并且该页面 (shoe_box_page.dart) 中的内容尚未完全加载时,出现上述异常。

The error message I get

class ShoeBoxPage extends StatefulWidget {
  @override
  _ShoeBoxPageState createState() => _ShoeBoxPageState();
}

class _ShoeBoxPageState extends State<ShoeBoxPage> {
  final _scrollController = ScrollController();

  @override
  void initState() {
    super.initState();
    Future.delayed(Duration(seconds: 1)).then((_) {
      _checkRequestLoad();
    });
  }

  bool get _canScroll {
    if (!_scrollController.hasClients) return false;
    final x = _scrollController.position.maxScrollExtent;
    final deviceHeight = MediaQuery.of(context).size.height;
    return x - _progressIndicatorHeight > deviceHeight;
  }

  void _checkRequestLoad() {
    final bloc = context.bloc<ShoeBoxBloc>();
    if (bloc.state.billsAvailable && !_canScroll) {
      context
          .bloc<ShoeBoxBloc>()
          .add(ShoeBoxEvent.scrollingOverUnloadedScope());
      Future.delayed(Duration(seconds: 1)).then((_) {
        _checkRequestLoad();
      });
    }
  }

  @override
  Widget build(BuildContext context) {
    return BlocBuilder<ShoeBoxBloc, ShoeBoxState>(
  ...

我希望你们中的某个人可以帮助我:)

最好, 亚历克斯

【问题讨论】:

  • 只需将上下文传递给您的函数。

标签: flutter dart navigation


【解决方案1】:

我认为问题是:函数内部的上下文为空。

因此,您要么需要在构建方法中定义这些函数以获取上下文,要么在调用这些函数时将上下文作为函数参数传递。

【讨论】:

    【解决方案2】:

    _checkRequestLoad 中的future 完成时,可能不再使用该状态。所以在异步间隙之后做某事之前,你应该检查元素(状态所属的)是否仍然挂载:

    void _checkRequestLoad() {
        final bloc = context.bloc<ShoeBoxBloc>();
        if (bloc.state.billsAvailable && !_canScroll) {
          context
              .bloc<ShoeBoxBloc>()
              .add(ShoeBoxEvent.scrollingOverUnloadedScope());
          Future.delayed(Duration(seconds: 1)).then((_) {
            if (mounted) // <---
              _checkRequestLoad();
          });
        }
      }
    

    我不确定这是否会导致您看到的异常,但这是一个错误。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-09-14
      • 2021-01-16
      • 2020-03-01
      • 2021-03-22
      • 1970-01-01
      • 2021-08-07
      • 2021-07-24
      • 1970-01-01
      相关资源
      最近更新 更多