深度链接在调试模式下运行良好但在发布模式下运行不佳

问题描述 投票:0回答:0

当我在调试中运行此代码时,深度链接工作正常,但在发布模式下它在终端中显示错误。它正在打开应用程序,但没有打开应用程序中的特定页面。目前我正在点击“/page/sehat-scan linking”...................................... ................................? enter image description here

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(),
                                    ],
                                  ),
                                ],
                              ),
                            ),
                          );
                        },
                      );
                    },
                  );
                },
              );
            },
          );
        },
      ),
    );
  }

/// 
 
android flutter mobile cross-platform
© www.soinside.com 2019 - 2024. All rights reserved.