🏪Checar Update do APP nas lojas

Descrição de como implementar uma lógica, para o app realizar a checagem se existem novas versões disponíveis nas lojas.

Para que não fosse necessário criar uma lógica própria, na mão, se comunicando diretamente com as lojas ou com o backend, a descrição de uso é utilizando o plugin new_version_plus e também o plugin package_info_plus.

Para isso, é bem simples, basta instanciar um objeto do NewVersionPlus utilizando os ids da aplicação (tanto android quanto iOS) utilizando o package info plus.

Com isso, o plugin nos permite buscar um objeto do tipo VersionStatus, e é com ele que vamos verificar se um update da aplicação nas lojas já está disponível.

Também é possível através dele ter acesso aos links do app nas lojas, da versão local, da última release note das lojas, e outras coisas. No exemplo abaixo vou apenas checar se há update disponível:

late NewVersionPlus? newVersionPlus;

String appStoreLink = "";

Future<void> checkForAppUpdate(BuildContext context) async {
  try {
    PackageInfo packageInfo = await PackageInfo.fromPlatform();

    newVersionPlus = NewVersionPlus(
      iOSId: packageInfo.packageName,
      androidId: packageInfo.packageName,
      androidPlayStoreCountry: "pt_BR",
    );

    final status = await newVersionPlus?.getVersionStatus();

    if (status?.canUpdate == true) {
      appStoreLink = status?.appStoreLink ?? "";

      showCustomModalBottomSheet(
        context,
        const AppUpdateAvailableDialogContent(),
      );
    }
  } catch (e) {
    log(e.toString());
  }
}

Então, caso existe um update disponível, podemos realizar nossa própria lógica, dependendo da aplicação. Nesse caso, a aplicação mostra um modalBottomSheet, dizendo que tem um update disponível, e um botão que leva diretamente para a loja.

class AppUpdateAvailableDialogContent extends StatefulWidget {
  const AppUpdateAvailableDialogContent({super.key});

  @override
  State<AppUpdateAvailableDialogContent> createState() =>
      _AppUpdateAvailableDialogContentState();
}

class _AppUpdateAvailableDialogContentState
    extends State<AppUpdateAvailableDialogContent> {
  @override
  Widget build(BuildContext context) {
    return Column(
      mainAxisSize: MainAxisSize.min,
      children: [
        Padding(
          padding: const EdgeInsets.symmetric(vertical: 30),
          child: Image.asset(
            AssetsHelper().getAssetImageUrl(
              "att_app.png",
            ),
            width: 140,
            height: 140,
          ),
        ),
        const SizedBox(
          height: 30,
        ),
        Text(
          "Atualize seu app TUYYO!",
          style: Fonts.headline4.copyWith(
            fontFamily: "AvenirBlack",
          ),
        ),
        const SizedBox(
          height: 35,
        ),
        Padding(
          padding: const EdgeInsets.symmetric(horizontal: 30.0),
          child: Text(
            "Atualizar o aplicativo é importante para obter os recursos mais recentes, correções de bugs e melhorias de segurança.",
            textAlign: TextAlign.center,
            style: Fonts.headline6.copyWith(
              color: CustomColors.black.withOpacity(0.8),
            ),
          ),
        ),
        Padding(
          padding: const EdgeInsets.fromLTRB(35, 35, 35, 20),
          child: CustomButton(
            text: "Atualizar agora",
            expanded: true,
            backgroundColor: CustomColors.secondary,
            padding: const EdgeInsets.symmetric(vertical: 20),
            onTap: () {
              newVersionPlus?.launchAppStore(
                appStoreLink,
                launchMode: LaunchMode.externalApplication,
              );
            },
          ),
        ),
        Padding(
          padding: const EdgeInsets.fromLTRB(35, 0, 35, 16),
          child: CustomButton(
            text: "Talvez mais tarde",
            expanded: true,
            backgroundColor: Colors.transparent,
            textColor: Colors.grey,
            onTap: () {
              Navigator.of(context).pop();
            },
          ),
        )
      ],
    );
  }
}

E para que de fato, a verificação seja realizada, basta chamar essa função checkForAppUpdate onde desejar. Por exemplo, no initState da sua HomeScreen.

Last updated