🏪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