runOnNewVersion<T> method Null safety

Future<T?> runOnNewVersion<T>(
  1. {required T? callback(
      ),
    1. T? fallback(
        )?}
      )

      Runs only on every new app number version

      Implementation

      static Future<T?> runOnNewVersion<T>({
        required T? Function() callback,
        T? Function()? fallback,
      }) async {
        const key = 'ON_NEW_VERSION';
        final preferences = await SharedPreferences.getInstance();
        PackageInfo packageInfo = await PackageInfo.fromPlatform();
        String currentVersion = packageInfo.version;
      
        if (preferences.containsKey(key)) {
          final savedVersion = preferences.getString(key)!.replaceAll(".", "");
          String existingVersion = currentVersion.replaceAll(".", "");
      
          if (num.parse(existingVersion) > num.parse(savedVersion)) {
            preferences.setString(key, currentVersion);
            return callback.call();
          }
          return fallback?.call();
        }
        preferences.setString(key, currentVersion);
        return callback.call();
      }