larryaasen / upgrader

A Flutter package for prompting users to upgrade when there is a newer version of the app in the store.
MIT License
553 stars 270 forks source link

[iOS] Upgrader Dialog Does Not Work Well After User Returns From the AppStore #441

Open achrafmam2 opened 2 weeks ago

achrafmam2 commented 2 weeks ago

Steps to reproduce:

  1. Open App
  2. Assuming the binary App is OLD, a dialog is shown
  3. Click on Update
  4. User is taken to the App store, return back to app WITHOUT updating
  5. Click on Update

Expected Behavior: User is taken to the store Current Behavior: Alert Dialog is popped

flutter: upgrader: UpgraderAppcastStore: version info: appStoreListingURL: <redacted>, appStoreVersion: 0.3.11, installedVersion: 0.3.10, isCriticalUpdate: true, minAppVersion: null, releaseNotes: New version
flutter: upgrader: need to evaluate version
flutter: upgrader: blocked: true
flutter: upgrader: debugDisplayAlways: false
flutter: upgrader: debugDisplayOnce: false
flutter: upgrader: hasAlerted: false
flutter: upgrader: installedVersion: 0.3.10
flutter: upgrader: minAppVersion: null
flutter: upgrader: isUpdateAvailable: true
flutter: upgrader: shouldDisplayUpgrade: true
flutter: upgrader: shouldDisplayReleaseNotes: false
flutter: upgrader: current locale: fr
flutter: upgrader: languageCode: fr
flutter: upgrader: showTheDialog title: Mettre à jour l'application ?
flutter: upgrader: showTheDialog message: Une nouvelle version de <redacted> est disponible ! La version 0.3.11 est maintenant disponible, vous avez la version 0.3.10.
flutter: upgrader: showTheDialog releaseNotes: null
flutter: upgrader: onCanPop called
flutter: upgrader: button tapped: update now
flutter: upgrader: launching: <redacted>
flutter: upgrader: instantiated
flutter: upgrader: build UpgradeAlert
flutter: upgrader: need to evaluate version
flutter: upgrader: instantiated
flutter: upgrader: build UpgradeAlert
flutter: upgrader: need to evaluate version
flutter: upgrader: current locale: en_US
flutter: upgrader: countryCode: US
flutter: upgrader: languageCode: en
flutter: upgrader: UpgraderAppcastStore item count: 1
flutter: upgrader: UpgraderAppcastStore best item version: 0.3.11
flutter: upgrader: UpgraderAppcastStore critical update item version: 0.3.11
flutter: upgrader: UpgraderAppcastStore: version info: appStoreListingURL: <redacted>, appStoreVersion: 0.3.11, installedVersion: 0.3.10, isCriticalUpdate: true, minAppVersion: null, releaseNotes: New version

Also, please include the upgrader version number from the pubspec.lock file, which should look something like this:

  upgrader:
    dependency: "direct main"
    description:
      name: upgrader
      sha256: d45483694620883107c2f5ca1dff7cdd4237b16810337a9c9c234203eb79eb5f
      url: "https://pub.dev"
    source: hosted
    version: "10.3.0"

Code

return MaterialApp.router(
      theme: MainTheme().light(),
      routerConfig: defaultAppRouter,
      localizationsDelegates: localizationsDelegates,
      supportedLocales: supportedLocales,
      scrollBehavior: const MaterialScrollBehavior().copyWith(
        dragDevices: {
          PointerDeviceKind.touch,
          PointerDeviceKind.mouse,
        },
      ),
      builder: (context, child) {
        const appcastURL = String.fromEnvironment("appcastUrl");
        final upgrader = Upgrader(
          storeController: UpgraderStoreController(
            oniOS: () => UpgraderAppcastStore(appcastURL: appcastURL),
            onAndroid: () => UpgraderAppcastStore(appcastURL: appcastURL),
          ),
          debugLogging: kDebugMode,
        );

        return UpgradeAlert(
          navigatorKey: defaultAppRouter.routerDelegate.navigatorKey,
          upgrader: upgrader,
          showReleaseNotes: false,
          child: child ?? Container(),
        );
      },
    );
  }
achrafmam2 commented 2 weeks ago

I tried to root cause the issue but didn't find the main culprit, but the UpgraderState::versionInfo gets null at some point. I've put several breakpoints but wasn't able to find where it gets null.