flutter_boost icon indicating copy to clipboard operation
flutter_boost copied to clipboard

[iOS] Unhandled Exception: Null check operator used on a null value

Open mozartee opened this issue 1 year ago • 9 comments

iOS, Native to Flutter success, Flutter pop to Native, failed.

log:

[VERBOSE-2:dart_vm_initializer.cc(41)] Unhandled Exception: Null check operator used on a null value
#0      FlutterBoostAppState.pop (package:flutter_boost/src/flutter_boost_app.dart:497:51)
#1      FlutterBoostAppState.popWithResult (package:flutter_boost/src/flutter_boost_app.dart:391:18)
#2      BoostNavigator.pop (package:flutter_boost/src/boost_navigator.dart:109:28)
#3      NavigatorExtState.pop (package:flutter_boost/src/boost_container.dart:222:31)
#4      _SplashPageState.build.<anonymous closure> (package:ost_flutter_module/splash/view.dart:55:39)
#5      _InkResponseState.handleTap (package:flutter/src/material/ink_well.dart:1154:21)
#6      GestureRecognizer.invokeCallback (package:flutter/src/gestures/recognizer.dart:275:24)
#7      TapGestureRecognizer.handleTapUp (package:flutter/src/gestures/tap.dart:654:11)
#8      BaseTapGestureRecognizer._checkUp (package:flutter/src/gestures/tap.dart:311:5)
#9      BaseTapGestureRecognizer.handlePrimaryPointer (package:flutter/src/gestures/tap.dart:244:7)
#10     PrimaryPointerGestureRecognizer.handleEvent (package:flutter/src/gestures/recognizer.dart:630:9)
#11     PointerRouter._dispatch (package:flutter/src/gestures/pointer_router.dart:98:12)
#12     PointerRouter._dispatchEventToRoutes.<anonymous closure> (package:flutter/src/gestures/pointer_router.dart:143:9)
#13     _LinkedHashMapMixin.forEach (dart:collection-patch/compact_hash.dart:625:13)
#14     PointerRouter._dispatchEventToRoutes (package:flutter/src/gestures/pointer_router.dart:141:18)
#15     PointerRouter.route (package:flutter/src/gestures/pointer_router.dart:127:7)
#16     GestureBinding.handleEvent (package:flutter/src/gestures/binding.dart:465:19)
#17     GestureBinding.dispatchEvent (package:flutter/src/gestures/binding.dart:445:22)
#18     RendererBinding.dispatchEvent (package:flutter/src/rendering/binding.dart:331:11)
#19     GestureBinding._handlePointerEventImmediately (package:flutter/src/gestures/binding.dart:400:7)
#20     GestureBinding.handlePointerEvent (package:flutter/src/gestures/binding.dart:363:5)
#21     GestureBinding._flushPointerEventQueue (package:flutter/src/gestures/binding.dart:320:7)
#22     GestureBinding._handlePointerDataPacket (package:flutter/src/gestures/binding.dart:293:9)
#23     _invoke1 (dart:ui/hooks.dart:158:13)
#24     PlatformDispatcher._dispatchPointerDataPacket (dart:ui/platform_dispatcher.dart:382:7)
#25     _dispatchPointerDataPacket (dart:ui/hooks.dart:91:31)

感觉是boostNavigator appState 为null导致的。

mozartee avatar Jun 21 '23 04:06 mozartee

呃,如果flutterboost被正确初始化了,appState 不应该为null啊~

看看具体是哪个对象为null,有没有其他错误提示输出?

0xZOne avatar Jun 23 '23 02:06 0xZOne

我还特意参照example对比,没有什么问题,flutterboost初始化是成功的,因为我push是成功的,只有pop不成功。另外,没有其他日志。

mozartee avatar Jun 25 '23 01:06 mozartee

呃,如果flutterboost被正确初始化了,appState 不应该为null啊~

看看具体是哪个对象为null,有没有其他错误提示输出?

 Future<void> _removeContainer(BoostContainer container) async {
    if (container.pageInfo.withContainer!) { // withContainer 这里为 null
      Logger.log('_removeContainer ,  uniqueId=${container.pageInfo.uniqueId}');
      final params = CommonParams()
        ..pageName = container.pageInfo.pageName
        ..uniqueId = container.pageInfo.uniqueId
        ..arguments = container.pageInfo.arguments;
      return await _nativeRouterApi.popRoute(params);
    }
  }

是withContainer为空了

nslogx avatar Jun 30 '23 07:06 nslogx

这个并不是appState为null。应该是下面的空判定报错: image

这个是因为直接把Flutter页面当作App启动的第一个页面导致的吧。空不过的原因是initialRoute对应的PageInfo如下: image 没有填withContainer字段

joechan-cq avatar Jun 30 '23 07:06 joechan-cq

这个并不是appState为null。应该是下面的空判定报错: image

这个是因为直接把Flutter页面当作App启动的第一个页面导致的吧。空不过的原因是initialRoute对应的PageInfo如下: image 没有填withContainer字段

谢谢解答,但是我并没有把flutter作为app的启动页,我的操作是启动是原生,原生通过按钮跳转到flutter。不知道你这里所说的启动页是不是这个意思?

mozartee avatar Jun 30 '23 07:06 mozartee

如果是从原生启动Flutter页面,FlutterBoost应该会先初始化initialRoute("/"),再在上面启动一个由Native传递过来的路由(比方说"flutterPage")才对。不应该启动Flutter后,直接就是根路由。或者你Native跳转Flutter时,没填路由?

joechan-cq avatar Jun 30 '23 07:06 joechan-cq

native跳转到flutter我传的是flutter的根路由,也就是默认的初始页面

mozartee avatar Jun 30 '23 07:06 mozartee

你不用根路由估计就好了

joechan-cq avatar Jun 30 '23 07:06 joechan-cq

我明白你的意思

mozartee avatar Jun 30 '23 07:06 mozartee