Skip to content

how to setup Upgrader in GoRouter with routerDelegate. #323

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
ShubhalaxmiSarwate opened this issue Aug 29, 2023 · 5 comments · May be fixed by #486
Open

how to setup Upgrader in GoRouter with routerDelegate. #323

ShubhalaxmiSarwate opened this issue Aug 29, 2023 · 5 comments · May be fixed by #486

Comments

@ShubhalaxmiSarwate
Copy link

ShubhalaxmiSarwate commented Aug 29, 2023

how to implement Upgrader in MaterialApp.router with routerDelegate. i tried using the below code but no alert popped up.

return MaterialApp.router(
      routerDelegate: goRouter.routerDelegate,
      builder: (context, child) {
        return UpgradeAlert(
          navigatorKey: goRouter.routerDelegate.navigatorKey,
          child: child ?? Text('child'),
        );
      },
);

Then i tried implementing the Upgrader in my dashboard page(base of stack). whenever a page is pushed or popped in the stack using GoRouter.of(context).push or context.pop() or context.go(), then all the pages in the stack are rebulit and the alert pops up again on the page which is on the top of stack.

I only want to display the alert on the dashboard of my application. Could someone please help me with this issue?

flutter: upgrader: instantiated.
flutter: upgrader: initialize called
flutter: upgrader: initialize called
flutter: upgrader: initialize called
flutter: upgrader: build UpgradeAlert
flutter: upgrader: initializing
flutter: upgrader: languageCode: de
flutter: upgrader: default operatingSystem: ios Version 16.6 (Build 20G75)
flutter: upgrader: operatingSystem: ios
flutter: upgrader: isAndroid: false, isIOS: true, isLinux: false, isMacOS: false, isWindows: false, isFuchsia: false, isWeb: false
flutter: upgrader: _____
flutter: upgrader: package info appName: ______
flutter: upgrader: package info version: 2.0.0
flutter: upgrader: countryCode: CH
flutter: upgrader: languageCode: de
flutter: upgrader: download: https://itunes.apple.com/lookup?___________
flutter: upgrader: response statusCode: 200
flutter: upgrader: need to evaluate version
flutter: upgrader: blocked: false
flutter: upgrader: debugDisplayAlways: true
flutter: upgrader: debugDisplayOnce: false
flutter: upgrader: hasAlerted: false
flutter: upgrader: shouldDisplayUpgrade: true
flutter: upgrader: shouldDisplayReleaseNotes: true
flutter: upgrader: showDialog title: App aktualisieren?
flutter: upgrader: showDialog message: Eine neue Version von ________ ist verfügbar! Die Version 2.0.2 ist verfügbar, installiert ist die Version 2.0.0.
flutter: upgrader: showDialog releaseNotes: In dieser Version wurden verschiedene Fehlerbehebungen und Verbesserungen implementiert, wie z.B.: ___________________.
flutter: upgrader: button tapped: later

upgrader: ^8.1.0

@d76g
Copy link

d76g commented Oct 13, 2023

@ShubhalaxmiSarwate , did you find a solution for this issue? I am facing the same problem.

@d76g
Copy link

d76g commented Oct 14, 2023

Facing the same problem.
My App( )

Widget build(BuildContext context) {
    return ProviderScope(
      child: SmartlookRecordingWidget(
        child: ScreenUtilInit(
          designSize: const Size(375, 812), // size phone design
          builder: (_, __) =>
              Consumer(
                builder: (context, ref, child) {
                  final router = ref.watch(routerProvider);
                  final localizationState = ref.watch(localizationProvider);
                  return  MaterialApp.router(
                      locale: localizationState.currentLocale,
                      localizationsDelegates: AppLocalizations.localizationsDelegates,
                      supportedLocales: AppLocalizations.supportedLocales,
                      routeInformationParser: router.routeInformationParser,
                      routerDelegate: router.routerDelegate,
                      routeInformationProvider: router.routeInformationProvider,
                      debugShowCheckedModeBanner: false,
                      theme: AppTheme.light,
                      builder: (context, _) {
                        LocalizationProvider.initBuild(context);
                        var child = _!;
                       /* child = FlashBarHelper.setupOverlay(
                          context: context,
                          child: child,
                        );*/
                        child = AppTextStyle.wrapAppToStopTextScaleFactor(
                          child: child,
                          context: context,
                        );
                        child =
                            AppTextStyle.wrapAppToRemoveFirstAndLastLineHeight(
                              child: child,
                            );
                        return UpgradeAlert(
                          upgrader: Upgrader(
                            countryCode: 'nl',
                            languageCode: localizationState.currentLocale.toString(),
                            debugLogging: true,  
                            platform: Platform.isIOS ? TargetPlatform.iOS : TargetPlatform.android,
                            dialogStyle: Platform.isIOS ? UpgradeDialogStyle.cupertino : UpgradeDialogStyle.material                        
                          ),
                          child: child,
                        );
                      },
                    );
                },
              ),
        ),
      ),
    );
  }
flutter: upgrader: instantiated.
flutter: upgrader: build UpgradeAlert
flutter: upgrader: initialize called
flutter: upgrader: initializing
flutter: upgrader: languageCode: en
flutter: upgrader: default operatingSystem: ios Version 17.0 (Build 21A5303d)
flutter: upgrader: operatingSystem: ios
flutter: upgrader: platform: TargetPlatform.iOS
flutter: upgrader: defaultTargetPlatform: TargetPlatform.iOS
flutter: upgrader: isAndroid: false, isIOS: true, isLinux: false, isMacOS: false, isWindows: false, isFuchsia: false, isWeb: false
flutter: upgrader: package info packageName: ---
flutter: upgrader: package info appName: ----
flutter: upgrader: package info version: 1.2.7
flutter: upgrader: countryCode: nl
flutter: upgrader: languageCode: en
flutter: upgrader: download: https://itunes.apple.com/lookup?bundleId=com.---.----&country=NL
flutter: upgrader: response statusCode: 200
flutter: upgrader: blocked: false
flutter: upgrader: debugDisplayAlways: false
flutter: upgrader: debugDisplayOnce: false
flutter: upgrader: hasAlerted: false
flutter: upgrader: appStoreVersion: 1.2.10
flutter: upgrader: installedVersion: 1.2.7
flutter: upgrader: minAppVersion: null
flutter: upgrader: isUpdateAvailable: true
flutter: upgrader: shouldDisplayUpgrade: true
flutter: upgrader: shouldDisplayReleaseNotes: true
flutter: upgrader: showDialog title: Update App?
flutter: upgrader: showDialog message: A new version of App is available! Version 1.2.10 is now available-you have 1.2.7.

upgrader: ^8.2.0

@larryaasen , any idea how to solve this issue ?

@ShubhalaxmiSarwate
Copy link
Author

hallo @d76g ,
i have still not found any solution for the issue. Sorry

@sh0o0
Copy link

sh0o0 commented Oct 28, 2023

@ShubhalaxmiSarwate @d76g

I might fix this problem.

The following is my solution. (Sorry if my English is not good.)

First (couldn't solve)

I moved Upgrader to static. Like below:

  static final _upgrader = Upgrader(
    dialogStyle: Platform.isIOS
        ? UpgradeDialogStyle.cupertino
        : UpgradeDialogStyle.material,
    debugLogging: true
    debugDisplayOnce: true,
  );


  @override
  Widget build(BuildContext context, WidgetRef ref) {
    final router = ref.watch(routerProvider);
    return MaterialApp.router(
      ...
      builder: (context, child) {
        return UpgradeAlert(
          navigatorKey: router.routerDelegate.navigatorKey,
          upgrader: _upgrader,
          child: child,
        );
      },
    );
  }

Then sometimes UpgradeAlert showed, but sometimes didn't show.
Technically, UpgradeAlert always showed. But that page transited soon after UpgradeAlert showed.

Conclusion

I used UpgradeCard to solve adobe problem.
UpgradeCard wasn't changed to cupertino style. But I will use this code.

import 'package:flutter/material.dart';
import 'package:otomo/views/bases/screens/screen_barrier.dart';
import 'package:upgrader/upgrader.dart';

class UpgradeModal extends UpgradeCard {
  UpgradeModal(
      {Key? key, Upgrader? upgrader, margin = const EdgeInsets.all(4.0)})
      : super(key: key, upgrader: upgrader, margin: margin);

  @override
  Widget buildUpgradeCard(BuildContext context, UpgradeBaseState state) {
    return ScreenBarrier(
      child: Center(child: super.buildUpgradeCard(context, state)),
    );
  }
}

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  static final _upgrader = Upgrader(
    dialogStyle: Platform.isIOS
        ? UpgradeDialogStyle.cupertino
        : UpgradeDialogStyle.material,
    debugLogging: true,
    debugDisplayOnce: true,
  );

  @override
  Widget build(BuildContext context) {
    return MaterialApp.router(
      ...
      builder: (context, child) {
        return Stack(
          children: [
            child!,
            UpgradeModal(
              upgrader: _upgrader,
              margin: const EdgeInsets.symmetric(horizontal: 20),
            ),
          ],
        );
      },
    );
  }
}

@nateshmbhat
Copy link

facing same issue . can u please fix this ?

RyanCarrier added a commit to RyanCarrier/upgrader that referenced this issue Feb 28, 2025
Issue most likely rises from the Future.delayed
fixes larryaasen#323
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging a pull request may close this issue.

4 participants