✨ Auto update checking
This commit is contained in:
parent
9ea364640d
commit
989b5babd9
@ -1,8 +1,10 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_animate/flutter_animate.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:package_info_plus/package_info_plus.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
import 'package:solian/exts.dart';
|
||||
import 'package:solian/platform.dart';
|
||||
import 'package:solian/providers/auth.dart';
|
||||
import 'package:solian/providers/content/channel.dart';
|
||||
import 'package:solian/providers/content/realm.dart';
|
||||
@ -24,6 +26,7 @@ class BootstrapperShell extends StatefulWidget {
|
||||
class _BootstrapperShellState extends State<BootstrapperShell> {
|
||||
bool _isBusy = true;
|
||||
bool _isErrored = false;
|
||||
bool _isDismissable = true;
|
||||
String? _subtitle;
|
||||
|
||||
Color get _unFocusColor =>
|
||||
@ -38,6 +41,32 @@ class _BootstrapperShellState extends State<BootstrapperShell> {
|
||||
await context.read<ThemeSwitcher>().restoreTheme();
|
||||
},
|
||||
),
|
||||
(
|
||||
label: 'bsCheckForUpdate',
|
||||
action: () async {
|
||||
if (PlatformInfo.isWeb) return;
|
||||
try {
|
||||
final info = await PackageInfo.fromPlatform();
|
||||
final localVersionString = '${info.version}+${info.buildNumber}';
|
||||
final resp = await GetConnect().get(
|
||||
'https://git.solsynth.dev/api/v1/repos/hydrogen/solian/tags?limit=1',
|
||||
);
|
||||
if (resp.body[0]['name'] != localVersionString) {
|
||||
setState(() {
|
||||
_isErrored = true;
|
||||
_subtitle = PlatformInfo.isIOS || PlatformInfo.isMacOS
|
||||
? 'bsCheckForUpdateDescApple'.tr
|
||||
: 'bsCheckForUpdateDescCommon'.tr;
|
||||
});
|
||||
}
|
||||
} catch (e) {
|
||||
setState(() {
|
||||
_isErrored = true;
|
||||
_subtitle = 'bsCheckForUpdateFailed'.tr;
|
||||
});
|
||||
}
|
||||
},
|
||||
),
|
||||
(
|
||||
label: 'bsCheckingServer',
|
||||
action: () async {
|
||||
@ -47,12 +76,14 @@ class _BootstrapperShellState extends State<BootstrapperShell> {
|
||||
setState(() {
|
||||
_isErrored = true;
|
||||
_subtitle = 'bsCheckingServerDown'.tr;
|
||||
_isDismissable = false;
|
||||
});
|
||||
throw Exception('unable connect to server');
|
||||
} else if (resp.statusCode == null) {
|
||||
setState(() {
|
||||
_isErrored = true;
|
||||
_subtitle = 'bsCheckingServerFail'.tr;
|
||||
_isDismissable = false;
|
||||
});
|
||||
throw Exception('unable connect to server');
|
||||
}
|
||||
@ -148,9 +179,11 @@ class _BootstrapperShellState extends State<BootstrapperShell> {
|
||||
GestureDetector(
|
||||
child: Column(
|
||||
children: [
|
||||
if (_isErrored)
|
||||
const Icon(Icons.cancel, size: 24)
|
||||
else
|
||||
if (_isErrored && !_isDismissable)
|
||||
const Icon(Icons.cancel, size: 24),
|
||||
if (_isErrored && _isDismissable)
|
||||
const Icon(Icons.warning, size: 24),
|
||||
if (!_isErrored && _isBusy)
|
||||
const SizedBox(
|
||||
width: 24,
|
||||
height: 24,
|
||||
@ -161,15 +194,24 @@ class _BootstrapperShellState extends State<BootstrapperShell> {
|
||||
maxWidth: 280,
|
||||
child: Column(
|
||||
children: [
|
||||
Text(
|
||||
_subtitle ??
|
||||
'${_periods[_periodCursor].label.tr} (${_periodCursor + 1}/${_periods.length})',
|
||||
textAlign: TextAlign.center,
|
||||
style: TextStyle(
|
||||
fontSize: 13,
|
||||
color: _unFocusColor,
|
||||
if (_subtitle == null)
|
||||
Text(
|
||||
'${_periods[_periodCursor].label.tr} (${_periodCursor + 1}/${_periods.length})',
|
||||
textAlign: TextAlign.center,
|
||||
style: TextStyle(
|
||||
fontSize: 13,
|
||||
color: _unFocusColor,
|
||||
),
|
||||
),
|
||||
),
|
||||
if (_subtitle != null)
|
||||
Text(
|
||||
_subtitle!,
|
||||
textAlign: TextAlign.center,
|
||||
style: TextStyle(
|
||||
fontSize: 13,
|
||||
color: _unFocusColor,
|
||||
),
|
||||
).paddingOnly(bottom: 4),
|
||||
Text(
|
||||
'2024 © Solsynth LLC',
|
||||
textAlign: TextAlign.center,
|
||||
@ -185,12 +227,19 @@ class _BootstrapperShellState extends State<BootstrapperShell> {
|
||||
),
|
||||
onTap: () {
|
||||
if (_isBusy) return;
|
||||
setState(() {
|
||||
_isBusy = true;
|
||||
_isErrored = false;
|
||||
_periodCursor = 0;
|
||||
});
|
||||
_runPeriods();
|
||||
if (_isDismissable) {
|
||||
setState(() {
|
||||
_isBusy = false;
|
||||
_isErrored = false;
|
||||
});
|
||||
} else {
|
||||
setState(() {
|
||||
_isBusy = true;
|
||||
_isErrored = false;
|
||||
_periodCursor = 0;
|
||||
});
|
||||
_runPeriods();
|
||||
}
|
||||
},
|
||||
)
|
||||
],
|
||||
|
@ -30,6 +30,23 @@ extension SolianExtenions on BuildContext {
|
||||
);
|
||||
}
|
||||
|
||||
Future<void> showInfoDialog(String title, body) {
|
||||
return showDialog<void>(
|
||||
useRootNavigator: true,
|
||||
context: this,
|
||||
builder: (ctx) => AlertDialog(
|
||||
title: Text(title),
|
||||
content: Text(body),
|
||||
actions: [
|
||||
TextButton(
|
||||
onPressed: () => Navigator.pop(ctx),
|
||||
child: Text('okay'.tr),
|
||||
)
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
Future<void> showErrorDialog(dynamic exception) {
|
||||
var stack = StackTrace.current;
|
||||
var stackTrace = '$stack';
|
||||
|
@ -314,6 +314,11 @@ const i18nEnglish = {
|
||||
'accountStatusNeutral': 'Neutral',
|
||||
'accountStatusPositive': 'Positive',
|
||||
'bsLoadingTheme': 'Loading Theme',
|
||||
'bsCheckForUpdate': 'Checking For Updates',
|
||||
'bsCheckForUpdateFailed': 'Unable to Check Updates',
|
||||
'bsCheckForUpdateNew': 'Found New Version',
|
||||
'bsCheckForUpdateDescApple': 'Please head to TestFlight and update your app to latest version to prevent error happens and get latest functions.',
|
||||
'bsCheckForUpdateDescCommon': 'Please head to our website download and install latest version of application to prevent error happens and get latest functions.',
|
||||
'bsCheckingServer': 'Checking Server Status',
|
||||
'bsCheckingServerFail':
|
||||
'Unable connect to server, check your network connection',
|
||||
|
@ -293,6 +293,11 @@ const i18nSimplifiedChinese = {
|
||||
'accountStatusNeutral': '中性',
|
||||
'accountStatusPositive': '积极',
|
||||
'bsLoadingTheme': '正在装载主题',
|
||||
'bsCheckForUpdate': '正在检查更新',
|
||||
'bsCheckForUpdateFailed': '无法检查更新',
|
||||
'bsCheckForUpdateNew': '发现新版本',
|
||||
'bsCheckForUpdateDescApple': '请前往 TestFlight 并将您的应用程序更新到最新版本,以防止出现错误并获取最新功能。',
|
||||
'bsCheckForUpdateDescCommon': '请前往我们的网站下载并安装最新版本的应用程序,以防止出现错误并获取最新功能。',
|
||||
'bsCheckingServer': '检查服务器状态中',
|
||||
'bsCheckingServerFail': '无法连接至服务器,请检查你的网络连接状态',
|
||||
'bsCheckingServerDown': '当前服务器不可用,请稍后重试',
|
||||
|
@ -2,7 +2,7 @@ name: solian
|
||||
description: "The Solar Network App"
|
||||
publish_to: "none"
|
||||
|
||||
version: 1.2.0+8
|
||||
version: 1.2.0+9
|
||||
|
||||
environment:
|
||||
sdk: ">=3.3.4 <4.0.0"
|
||||
|
Loading…
Reference in New Issue
Block a user