Flutter中auto_route+modal_bottom_sheet实现Deep Link时Navigator Overlay为空问题
我遇到了Navigator的overlay为空的错误,不知道该如何解决。
深层链接命令
~/Library/Android/sdk/platform-tools/adb shell am start -a android.intent.action.VIEW \ -c android.intent.category.BROWSABLE \ -d "https://my.app.com/news/xx-xx-xx" \ com.app.my
路由代码
... AutoRoute( path: 'news', page: EmptyRouterPage, name: 'NewsTab', children: [ AutoRoute( page: NewsCategoryScreen, name: 'NewsCategoryRoute', path: 'category/:id', ), CustomRoute( path: ':newsSlug', page: NewsDetailScreen, name: 'NewsDetailOverlay', fullscreenDialog: false, barrierDismissible: true, customRouteBuilder: modalSheetBuilder, maintainState: true, usesPathAsKey: true, ), AutoRoute( page: NewsListScreen, path: '', name: 'NewsList', ), RedirectRoute(path: '', redirectTo: '/') ], ), ... Route<T> modalSheetBuilder<T>( BuildContext context, Widget child, CustomPage<T> page) { return ModalBottomSheetRoute( settings: page, builder: (context) => child, expanded: false, ); }
错误栈信息
#1 TransitionRoute.install package:flutter/…/widgets/routes.dart:224 #2 ModalRoute.install package:flutter/…/widgets/routes.dart:1180 #3 _RouteEntry.handleAdd package:flutter/…/widgets/navigator.dart:2822 #4 NavigatorState._flushHistoryUpdates package:flutter/…/widgets/navigator.dart:3843 #5 NavigatorState.restoreState package:flutter/…/widgets/navigator.dart:3324 #6 RestorationMixin._doRestore package:flutter/…/widgets/restoration.dart:872 #7 RestorationMixin.didChangeDependencies package:flutter/…/widgets/restoration.dart:858 #8 NavigatorState.didChangeDependencies package:flutter/…/widgets/navigator.dart:3342 #9 StatefulElement._firstBuild package:flutter/…/widgets/framework.dart:5036 #10 ComponentElement.mount package:flutter/…/widgets/framework.dart:4853 #11 Element.inflateWidget package:flutter/…/widgets/framework.dart:3863 #12 Element.updateChild package:flutter/…/widgets/framework.dart:3586 #13 ComponentElement.performRebuild package:flutter/…/widgets/framework.dart:4904 #14 StatefulElement.performRebuild package:flutter/…/widgets/framework.dart:5050 #15 Element.rebuild package:flutter/…/widgets/framework.dart:4604 #16 StatefulElement.update package:flutter/…/widgets/framework.dart:5082 #17 Element.updateChild package:flutter/…/widgets/framework.dart:3570 #18 ComponentElement.performRebuild package:flutter/…/widgets/framework.dart:4904 #19 StatefulElement.performRebuild package:flutter/…/widgets/framework.dart:5050 #20 Element.rebuild package:flutter/…/widgets/framework.dart:4604 #21 StatefulElement.update package:flutter/…/widgets/framework.dart:5082 #22 Element.updateChild package:flutter/…/widgets/framework.dart:3570 #23 ComponentElement.performRebuild package:flutter/…/widgets/framework.dart:4904 #24 Element.rebuild package:flutter/…/widgets/framework.dart:4604 #25 ProxyElement.update package:flutter/…/widgets/framework.dart:5228 #26 Element.updateChild package:flutter/…/widgets/framework.dart:3570 #27 ComponentElement.performRebuild package:flutter/…/widgets/framework.dart:4904 #28 Element.rebuild package:flutter/…/widgets/framework.dart:4604 #29 ProxyElement.update package:flutter/…/widgets/framework.dart:5228 #30 Element.updateChild package:flutter/…/widgets/framework.dart:3570 #31 ComponentElement.performRebuild package:flutter/…/widgets/framework.dart:4904 #32 StatefulElement.performRebuild package:flutter/…/widgets/framework.dart:5050 #33 Element.rebuild package:flutter/…/widgets/framework.dart:4604 #34 BuildOwner.buildScope package:flutter/…/widgets/framework.dart:2667 #35 WidgetsBinding.drawFrame package:flutter/…/widgets/binding.dart:882 #36 RendererBinding._handlePersistentFrameCallback package:flutter/…/rendering/binding.dart:378 #37 SchedulerBinding._invokeFrameCallback package:flutter/…/scheduler/binding.dart:1175 #38 SchedulerBinding.handleDrawFrame package:flutter/…/scheduler/binding.dart:1104 #39 SchedulerBinding._handleDrawFrame package:flutter/…/scheduler/binding.dart:1015
定位到的问题代码
调试发现错误出现在modal_bottom_sheet-2.1.2包的bottom_sheet_route.dart文件中,这里的navigator!.overlay!为空:
@override AnimationController createAnimationController() { assert(_animationController == null); _animationController = ModalBottomSheet.createAnimationController( navigator!.overlay!, duration: transitionDuration, ); return _animationController!; }
补充说明
- 导航到
NewsListScreen、使用https://my.app.com/news这类链接时,深层链接可以正常工作 - 使用的包版本:
- auto_route: ^5.0.2
- modal_bottom_sheet: ^2.1.2
- 已尝试按照auto_route文档使用Navigation Observer调试,但未找到明确解决方案
请问该如何让出现问题的Navigator拥有动画所需的overlay?
内容的提问来源于stack exchange,提问作者ǝlpoodooɟƃuooʞ
相关产品推荐
相关产品推荐

