PokeDex/lib/UpdateCheck.dart
2025-06-01 14:18:56 -07:00

114 lines
3.2 KiB
Dart

import 'package:dio/dio.dart';
import 'package:flutter/material.dart';
import 'package:libacflutter/Constants.dart';
import 'package:ota_update/ota_update.dart';
import 'package:pokedex/Consts.dart';
import 'package:pokedex/Session.dart';
class UpdateCheck extends StatefulWidget {
const UpdateCheck({super.key});
@override
State<StatefulWidget> createState() {
return _UPDCheck();
}
}
class _UPDCheck extends State<UpdateCheck> {
Future<void> checkUpdate() async {
Dio dio = Dio();
// retrieve the latest version info file.
var reply = await dio.get(
"https://git.zontreck.com/zontreck/PokeDex/raw/branch/main/LATEST_VERSION",
);
String replyStr = reply.data as String;
replyStr = replyStr.trim();
// Check if version mismatch!
if (replyStr != Constants.VERSION) {
SessionData.isUpdateAvailable = true;
} else {
SessionData.isUpdateAvailable = false;
}
}
@override
void initState() {
// Check for updates
checkUpdate();
super.initState();
}
@override
void didChangeDependencies() {
SessionData.callbacks.updateCheckPage = () async {
setState(() {});
};
super.didChangeDependencies();
}
@override
void dispose() {
SessionData.callbacks.updateCheckPage = null;
super.dispose();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text("PokeDex - Update Checker"),
backgroundColor: LibACFlutterConstants.TITLEBAR_COLOR,
),
body: Padding(
padding: EdgeInsetsGeometry.all(8),
child: SingleChildScrollView(
child: Column(
children: [
ListTile(
title: Text("Check for updates..."),
subtitle: Text("Checks for an update immediately."),
leading: Icon(Icons.update_outlined),
onTap: () async {
await checkUpdate();
setState(() {});
},
),
if (SessionData.isUpdateAvailable)
ListTile(
title: Text("Install Update"),
subtitle: Text("Download and install the available update"),
leading: Icon(Icons.system_update),
onTap: () async {
// Do the update!
SessionData.isUpdateAvailable = false;
setState(() {});
OtaUpdate updater = OtaUpdate();
updater.execute(
"https://ci.zontreck.com/job/Projects/job/Dart/job/PokeDex/job/main/lastSuccessfulBuild/artifact/pokedex.apk",
destinationFilename: "pokedex.apk",
);
},
),
if (!SessionData.isUpdateAvailable)
ListTile(
title: Text("No Available Update"),
subtitle: Text(
"There is not a update available at this time.",
),
leading: Icon(Icons.disabled_by_default),
tileColor: LibACFlutterConstants.TITLEBAR_COLOR,
),
],
),
),
),
);
}
}