xuelongqy / flutter_easy_refresh

A flutter widget that provides pull-down refresh and pull-up load.
https://xuelongqy.github.io/flutter_easy_refresh/
MIT License
3.91k stars 635 forks source link

Null check operator used on a null value #506

Closed foreverGoUp closed 3 years ago

foreverGoUp commented 3 years ago

Steps to Reproduce

  1. I am upgrading my project to null-safety.
  2. I upgrade lib which name "xuelongqy/flutter_easyrefresh" in github to v2.2.1 for adapting null-safety.
  3. run my project.

我看了 flutter/src/widgets/scroll_position.dart:136:49)的源码:


@override
  double get minScrollExtent => _minScrollExtent!;
  double? _minScrollExtent;

  @override
  double get maxScrollExtent => _maxScrollExtent!;
  double? _maxScrollExtent;

你的库是不是没给_minScrollExtent和_maxScrollExtent字段赋值?

Logs

``` E/flutter (24107): [ERROR:flutter/lib/ui/ui_dart_state.cc(199)] Unhandled Exception: Null check operator used on a null value E/flutter (24107): #0 ScrollPosition.minScrollExtent (package:flutter/src/widgets/scroll_position.dart:136:49) E/flutter (24107): #1 ScrollPosition._updateSemanticActions (package:flutter/src/widgets/scroll_position.dart:634:18) E/flutter (24107): #2 ScrollPosition.notifyListeners (package:flutter/src/widgets/scroll_position.dart:929:5) E/flutter (24107): #3 ScrollPosition.forcePixels (package:flutter/src/widgets/scroll_position.dart:377:5) E/flutter (24107): #4 ScrollPositionWithSingleContext.jumpTo (package:flutter/src/widgets/scroll_position_with_single_context.dart:198:7) E/flutter (24107): #5 ScrollPositionWithSingleContext.animateTo (package:flutter/src/widgets/scroll_position_with_single_context.dart:177:7) E/flutter (24107): #6 ScrollController.animateTo (package:flutter/src/widgets/scroll_controller.dart:154:68) E/flutter (24107): #7 _EasyRefreshState.callRefresh (package:flutter_easyrefresh/src/refresher.dart:366:10) E/flutter (24107): #8 _EasyRefreshState.initState. (package:flutter_easyrefresh/src/refresher.dart:294:9) ``` Logs ``` ``` ``` [√] Flutter (Channel stable, 2.2.3, on Microsoft Windows [Version 10.0.19042.1165], locale zh-CN) • Flutter version 2.2.3 at D:\software\flutter_sdk\flutter2.2.3 • Framework revision f4abaa0735 (7 weeks ago), 2021-07-01 12:46:11 -0700 • Engine revision 241c87ad80 • Dart version 2.13.4 • Pub download mirror https://pub.flutter-io.cn • Flutter download mirror https://storage.flutter-io.cn [√] Android toolchain - develop for Android devices (Android SDK version 30.0.0) • Android SDK at C:\Users\admin\AppData\Local\Android\Sdk • Platform android-30, build-tools 30.0.0 • ANDROID_HOME = C:\Users\admin\AppData\Local\Android\Sdk • ANDROID_SDK_ROOT = C:\Users\admin\AppData\Local\Android\Sdk • Java binary at: D:\Program Files\Android\Android Studio\jre\bin\java • Java version OpenJDK Runtime Environment (build 1.8.0_212-release-1586-b04) • All Android licenses accepted. [√] Chrome - develop for the web • Chrome at C:\Users\admin\AppData\Local\Google\Chrome\Application\chrome.exe [√] Android Studio (version 3.6) • Android Studio at D:\Program Files\Android\Android Studio • Flutter plugin version 49.0.1 • Dart plugin version 192.8052 • Java version OpenJDK Runtime Environment (build 1.8.0_212-release-1586-b04) [√] Connected device (3 available) • LND AL30 (mobile) • RPDBB18522201251 • android-arm64 • Android 8.0.0 (API 26) • Chrome (web) • chrome • web-javascript • Google Chrome 92.0.4515.131 • Edge (web) • edge • web-javascript • Microsoft Edge 92.0.902.73 • No issues found! ```
foreverGoUp commented 3 years ago

找到解决方案了:(题外话:官方说_minScrollExtent字段基本不会为空,所以就直接返回_minScrollExtent!,若是在不放心,也可以调用hasContentDimensions先判断一下)。当我把我的项目中其他不正确的写法改正后,这个错误不会从你的库报错了,你的库也正常了,看来你的库是被我的项目环境影响了才报了这个错误。大佬,误会了,手动笑哭。