当我在调试中运行此代码时,深度链接工作正常,但在发布模式下它在终端中显示错误。它正在打开应用程序,但没有打开应用程序中的特定页面。目前我正在点击“/page/sehat-scan linking”...................................... ................................?
class BottomNavBar extends StatefulWidget { final Function()? onAppBarLeadingPressed; const BottomNavBar({ Key? key, required this.onAppBarLeadingPressed, }) : super(key: key); @override State<BottomNavBar> createState() => BottomNavBarState(); } class BottomNavBarState extends State<BottomNavBar> with SingleTickerProviderStateMixin { // deep link method **_handleDeepLinks() async { final PendingDynamicLinkData? initialLink = await FirebaseDynamicLinks.instance.getInitialLink(); if (initialLink != null) { final Uri deepLink = initialLink.link; print('Deeplinks uri:${deepLink.path}'); if (deepLink.path == '/doctor-now') { pageController.jumpToPage( 2, ); _bottomNavCubit.updateIndex(3); pageController.page ==3; currentIndex = 3; } // this link i am clicking right now else if (deepLink.path == '/page/sehat-a-z') { pageController.jumpToPage( 1, ); _bottomNavCubit.updateIndex(1); pageController.page ==1; currentIndex = 1; } else if (deepLink.path == '/doctors/karachi') { NavigationUtil.push( context, RouteConstants .instantConsultationIntroRoute12); } else if (deepLink.path == '/page/sehat-scan') { pageController.jumpToPage( 2, ); _bottomNavCubit.updateIndex(2); pageController.page ==2; currentIndex = 2; } else if (deepLink.path == '/wellness') { NavigationUtil.push( context, RouteConstants .wellnessRoute); } } }** PageController pageController = PageController(initialPage: 0); late BottomNavCubit _bottomNavCubit; var _familyMembersList = <FamilyMember>[]; late BinahCubit _binahCubit; List<String> _scanTypesList = []; final _battery = Battery(); late FamilyMember _myFamilyMemberData; late HealthCheckHistoryCubit hmhCubit; UserModel? _user; List<HealthScans> myHealthScansHistoryList = []; List<HealthScans> familyHealthScansHistoryList = []; bool scansDataLoaded = false; bool isSuccess = false; late FamilyMembersCubit familyMembersCubit; bool _cameraPermissionEnabled = false; int currentIndex = 0; Future<void> getAllData() async { scansDataLoaded = true; setState(() {}); _user = _appCubit.user; final userName = _user?.name; if (_appCubit.isLoggedIn) { _myFamilyMemberData = FamilyMember.fromJson( _user?.toJson(), )..updateName = '$userName (Me)'; scansDataLoaded = true; } else { isSuccess = true; _familyMembersList.add(FamilyMember(name: 'Guest')); } setState(() {}); } Future<void> _getToken(SplashCubit splashCubit_) async { await splashCubit_.getToken( platform: Platform.isIOS ? AppConstants.iosPlatform : AppConstants.androidPlatform, appVersion: AppConstants.appVersion, screen: TokenScreenTypeEnum.bottomNav, ); } void _setScanTypeData() { _scanTypesList = []; if (_binahCubit.defaultSessionType == SessionType.face) { _scanTypesList.add(StringConstants.face); if (_scanTypesList.contains(StringConstants.face)) { _scanTypesList.add(StringConstants.finger); } } else if (_binahCubit.defaultSessionType == SessionType.finger) { _scanTypesList.add(StringConstants.finger); if (_scanTypesList.contains(StringConstants.finger)) { _scanTypesList.add(StringConstants.face); } } } @override void initState() { pageController.addListener(() { currentIndex = pageController.page!.toInt(); }); _appCubit = BlocProvider.of<AppCubit>(context); _binahCubit = BlocProvider.of<BinahCubit>(context); hmhCubit = BlocProvider.of<HealthCheckHistoryCubit>(context); familyMembersCubit = BlocProvider.of<FamilyMembersCubit>(context); _user = _appCubit.user; _appCubit.isLoggedIn ? WidgetsBinding.instance.addPostFrameCallback((timeStamp) async { await BlocProvider.of<HomeCubit>(context).getSettings(); await getAllData(); setState(() {}); }) : null; _bottomNavCubit = BlocProvider.of<BottomNavCubit>(context); pageController = PageController( initialPage: _bottomNavCubit.getBottomNavIndex, ); _setScanTypeData(); WidgetsBinding.instance.addPostFrameCallback((timeStamp) { FirebaseMessagingService.onFirebaseNotificationTapWhenAppIsKill(); }); super.initState(); _handleDeepLinks(); } void _onPageChanged(int index, {bool updatedCubit = false}) { pageController.jumpToPage( index, ); if (updatedCubit) { _bottomNavCubit.updateIndex(index); } currentIndex = index; setState(() {}); } Widget _bottomNavItem({ required String label, String? svgPath, required int index, required bool isVideo, }) { return GestureDetector( onTap: () => _onPageChanged( index, updatedCubit: true, ), child: Stack( alignment: Alignment.center, children: [ Container( padding: const EdgeInsets.only( bottom: 6, ), color: ColorConstants.transparent, child: Column( mainAxisAlignment: MainAxisAlignment.end, crossAxisAlignment: CrossAxisAlignment.center, children: [ if (svgPath == null) const Icon(null) else SizedBox( child: index == 2 ? SvgPicture.asset( height: 40, svgPath, color: index == _bottomNavCubit.getBottomNavIndex ? ColorConstants.pink : ColorConstants.grey, ) : SvgPicture.asset( height: 20, svgPath, color: index == _bottomNavCubit.getBottomNavIndex ? ColorConstants.pink : ColorConstants.grey, ), ), SizedBoxConstants.sizedBoxEightH(), SizedBox( child: TextComponent( label, textAlign: TextAlign.center, style: FontStylesConstants.subtitleThree( color: index == _bottomNavCubit.getBottomNavIndex ? ColorConstants.pink : ColorConstants.grey, ), ), ), SizedBoxConstants.sizedBoxEightH() ], ), ), if (isVideo) Positioned( top: 2, right: 4, child: Container( decoration: boxDecoration( boxColor: ColorConstants.lightGreen, borderRadius: 4), child: Text( 'Video', style: FontStylesConstants.subtitleThree( color: ColorConstants.white), ), ), ) ], ), ); } static const snackBarDuration = Duration(seconds: 2); DateTime? backButtonPressTime; Future<bool> onWillPop() async { final now = DateTime.now(); final backButtonHasNotBeenPressedOrSnackBarHasBeenClosed = backButtonPressTime == null || now.difference(backButtonPressTime!) > snackBarDuration; if (backButtonHasNotBeenPressedOrSnackBarHasBeenClosed) { backButtonPressTime = now; ToastComponent(context).showToast( context, StringConstants.tapAgainToClose, makeToastPositionBottom: true, ); return false; } return closeApp(); } closeApp() { if (Platform.isAndroid) { SystemNavigator.pop(); } else if (Platform.isIOS) { exit(0); } } late AppCubit _appCubit; @override Widget build(BuildContext context) { final isUrdu = getIt<AppCubit>().isUrdu(context.locale.toString()); return GestureDetector( onTap: () => FocusManager.instance.primaryFocus?.unfocus(), child: BlocConsumer<HomeCubit, HomeState>( listener: (context, state) { if (state is SettingsLoadingState) { } else if (state is SettingsSuccessState) { _appCubit.settings = state.settingsPreferanceWrapper.data!.settings; LoggerUtil.logs('@@ $state'); } else if (state is SettingsFailureState) { ToastComponent(context).showToast(context, state.error); } }, builder: (context, state) { return BlocConsumer<AppCubit, AppState>( listener: (context, state) { }, builder: (context, state) { return BlocConsumer<UpdateUserCubit, UpdateUserState>( listener: (context, state) { }, builder: (context, state) { return BlocConsumer<SplashCubit, SplashState>( listener: (context, state) async { if (state is SplashTokenLoadingBottomNavState) { } else if (state is SplashTokenSuccessBottomNavState) { await getIt<DioClientNetwork>() .initializeDioClientNetwork( token: state.token, userId: (_appCubit.user?.id ?? 0).toString(), locale: isUrdu ? 2 : 1, ); if (!mounted) return; await BlocProvider.of<BottomNavCubit>( context, ).updateIndex(0); await NavigationUtil.popAllAndPush( context, RouteConstants.bottomNavRoute, ); } else if (state is SplashTokenFailureBottomNavState) { // LoadingDialog.hide(context); if (!mounted) return; ToastComponent(context).showToast( context, state.error, ); } }, builder: (context, state) { return BlocConsumer<BottomNavCubit, BottomNavState>( listener: (context, state) async { if (state is BottomNavLogoutLoadingState) { LoggerUtil.logs('###logoutLoading'); } else if (state is BottomNavLogoutSuccessState) { LoggerUtil.logs('###logoutSuccess'); _appCubit.user = null; await getIt<SharedPreferencesUtil>().removeValue( SharedPreferenceConstants.user, ); await getIt<SharedPreferencesUtil>().removeValue( SharedPreferenceConstants.userId, ); if (!mounted) return; await getIt<DioClientNetwork>() .initializeDioClientNetwork( deleteToken: true, locale: isUrdu ? 2 : 1, ); await _getToken( BlocProvider.of<SplashCubit>(context), ); if (!mounted) return; ToastComponent(context).showToast( context, state.message, ); } else if (state is BottomNavLogoutFailureState) { LoggerUtil.logs('###logoutFailure'); ToastComponent(context).showToast( context, state.error, ); } else if (state is BottomNavIndexUpdated) { _onPageChanged(state.index); } else if (state is BottomNavDeleteAccountLoadingState) { LoggerUtil.logs('###deleteLoading'); } else if (state is BottomNavDeleteAccountSuccessState) { LoggerUtil.logs('###DeleteAccountSuccess'); _appCubit.user = null; await getIt<SharedPreferencesUtil>().removeValue( SharedPreferenceConstants.user, ); if (!mounted) return; await getIt<DioClientNetwork>() .initializeDioClientNetwork( deleteToken: true, locale: isUrdu ? 2 : 1, ); await _getToken( BlocProvider.of<SplashCubit>(context), ); if (!mounted) return; ToastComponent(context).showToast( context, state.message, ); } else if (state is BottomNavDeleteAccountFailureState) { LoggerUtil.logs('###DeleteAccountFailure'); ToastComponent(context).showToast( context, state.error, ); } }, builder: (context, state) { return WillPopScope( onWillPop: onWillPop, child: MainScaffold( extendBody: true, bottomNavigationBar: _bottomAppBar(), appBar: AppBarComponent( onLeadingPressed: widget.onAppBarLeadingPressed, leadingImagePath: _appCubit.user?.image ?? '', titleImage: AssetConstants.appBarTitleSvg, trailingWidget: Row( mainAxisAlignment: MainAxisAlignment.center, crossAxisAlignment: CrossAxisAlignment.center, children: [ if (_appCubit.isLoggedIn) Container( padding: const EdgeInsets.only(bottom: 5.0), child: GestureDetector( onTap: () { final NotificationArgs args = NotificationArgs( userImage: _appCubit.user?.image ?? '', onAppBarLeadingPressed: widget.onAppBarLeadingPressed, userId: _appCubit.user?.id .toString() ?? '21', ); NavigationUtil.push( context, RouteConstants.notificationRoute, args: args, ); }, child: Image.asset( width: 18.0, color: const Color(0xff545554), AssetConstants.noti, ), ), ), SizedBoxConstants.sizedBoxTwelveW(), appStartScan( hmhCubit: hmhCubit, appCubit: _appCubit, component: Padding( padding: const EdgeInsets.only( bottom: 0.0, ), child: SvgPicture.asset( "assets/vector/start_scan.svg", width: 70, ), ), ), ], ), showBottomLine: true, ), widget: Stack( alignment: BlocProvider.of<AppCubit>(context) .isUrdu( context.locale.toString()) == true ? Alignment.bottomLeft : Alignment.bottomRight, children: [ PageView( controller: pageController, physics: const NeverScrollableScrollPhysics(), children: const [ HomeScreen(), SehatAtoZCompleteScreen(), HealthCheckHomeScreen(), InstantConsultationIntroScreen(), SearchBarScreen(), ], ), ], ), ), ); }, ); }, ); }, ); }, ); }, ), ); } ///