From 6ca4aad1c4adfc2c128102d5fade0cfcd96016f0 Mon Sep 17 00:00:00 2001 From: LittleSheep Date: Sat, 27 Jul 2024 14:16:49 +0800 Subject: [PATCH] :lipstick: Better bootstrapping --- lib/bootstrapper.dart | 88 +++++++---- lib/translations/en_us.dart | 3 +- lib/translations/zh_cn.dart | 3 +- .../attachment_list_fullscreen.dart | 146 +++++++++--------- 4 files changed, 140 insertions(+), 100 deletions(-) diff --git a/lib/bootstrapper.dart b/lib/bootstrapper.dart index 825fe4c..cc29ca8 100644 --- a/lib/bootstrapper.dart +++ b/lib/bootstrapper.dart @@ -33,11 +33,18 @@ class _BootstrapperShellState extends State { action: () async { final client = ServiceFinder.configureClient('dealer'); final resp = await client.get('/.well-known'); - if (resp.statusCode != 200) { + if (resp.statusCode != null && resp.statusCode != 200) { + setState(() { + _isErrored = true; + _subtitle = 'bsCheckingServerDown'.tr; + }); + throw Exception('unable connect to server'); + } else if (resp.statusCode == null) { setState(() { _isErrored = true; _subtitle = 'bsCheckingServerFail'.tr; }); + throw Exception('unable connect to server'); } }, ), @@ -90,11 +97,15 @@ class _BootstrapperShellState extends State { ]; Future _runPeriods() async { - for (var idx = 0; idx < _periods.length; idx++) { - await _periods[idx].action(); - setState(() => _periodCursor++); + try { + for (var idx = 0; idx < _periods.length; idx++) { + await _periods[idx].action(); + if (_isErrored) break; + setState(() => _periodCursor++); + } + } finally { + setState(() => _isBusy = false); } - setState(() => _isBusy = false); } @override @@ -119,30 +130,53 @@ class _BootstrapperShellState extends State { child: Image.asset('assets/logo.png', width: 80, height: 80), ), ), - Column( - children: [ - if (_isErrored) - const Icon(Icons.cancel, size: 24) - else - const SizedBox( - width: 24, - height: 24, - child: CircularProgressIndicator(strokeWidth: 3), - ), - const SizedBox(height: 12), - CenteredContainer( - maxWidth: 280, - child: Text( - _subtitle ?? - '${_periods[_periodCursor].label.tr} (${_periodCursor + 1}/${_periods.length})', - textAlign: TextAlign.center, - style: TextStyle( - fontSize: 13, - color: _unFocusColor, + GestureDetector( + child: Column( + children: [ + if (_isErrored) + const Icon(Icons.cancel, size: 24) + else + const SizedBox( + width: 24, + height: 24, + child: CircularProgressIndicator(strokeWidth: 3), + ), + const SizedBox(height: 12), + CenteredContainer( + maxWidth: 280, + child: Column( + children: [ + Text( + _subtitle ?? + '${_periods[_periodCursor].label.tr} (${_periodCursor + 1}/${_periods.length})', + textAlign: TextAlign.center, + style: TextStyle( + fontSize: 13, + color: _unFocusColor, + ), + ), + Text( + '2024 © Solsynth LLC', + textAlign: TextAlign.center, + style: TextStyle( + fontSize: 11, + color: _unFocusColor, + ), + ), + ], ), ), - ), - ], + ], + ), + onTap: () { + if (_isBusy) return; + setState(() { + _isBusy = true; + _isErrored = false; + _periodCursor = 0; + }); + _runPeriods(); + }, ) ], ), diff --git a/lib/translations/en_us.dart b/lib/translations/en_us.dart index cb97cc9..3acbb8f 100644 --- a/lib/translations/en_us.dart +++ b/lib/translations/en_us.dart @@ -278,7 +278,8 @@ const messagesEnglish = { 'accountStatusNeutral': 'Neutral', 'accountStatusPositive': 'Positive', 'bsCheckingServer': 'Checking Server Status', - 'bsCheckingServerFail': 'Unable connect to server, check your network connection or follow our service maintenance status', + 'bsCheckingServerFail': 'Unable connect to server, check your network connection', + 'bsCheckingServerDown': 'Server currently unavailable, please retry later', 'bsAuthorizing': 'Authorizing', 'bsEstablishingConn': 'Establishing Connection', 'bsPreparingData': 'Preparing User Data', diff --git a/lib/translations/zh_cn.dart b/lib/translations/zh_cn.dart index 8c68dfd..fe722e4 100644 --- a/lib/translations/zh_cn.dart +++ b/lib/translations/zh_cn.dart @@ -257,7 +257,8 @@ const simplifiedChineseMessages = { 'accountStatusNeutral': '中性', 'accountStatusPositive': '积极', 'bsCheckingServer': '检查服务器状态中', - 'bsCheckingServerFail': '无法连接至服务器,请检查你的网络状态或我们服务维护状态', + 'bsCheckingServerFail': '无法连接至服务器,请检查你的网络连接状态', + 'bsCheckingServerDown': '当前服务器不可用,请稍后重试', 'bsAuthorizing': '正在授权中', 'bsEstablishingConn': '部署连接中', 'bsPreparingData': '正在准备用户资料', diff --git a/lib/widgets/attachments/attachment_list_fullscreen.dart b/lib/widgets/attachments/attachment_list_fullscreen.dart index 311c635..dd691b4 100644 --- a/lib/widgets/attachments/attachment_list_fullscreen.dart +++ b/lib/widgets/attachments/attachment_list_fullscreen.dart @@ -82,13 +82,15 @@ class _AttachmentListFullScreenState extends State { ), Align( alignment: Alignment.bottomCenter, - child: Container( - height: 300, - decoration: const BoxDecoration( - gradient: LinearGradient( - begin: Alignment.bottomCenter, - end: Alignment.topCenter, - colors: [Color(0xFFFFFFFF), Color(0x00FFFFFF)], + child: IgnorePointer( + child: Container( + height: 300, + decoration: const BoxDecoration( + gradient: LinearGradient( + begin: Alignment.bottomCenter, + end: Alignment.topCenter, + colors: [Color(0xFFFFFFFF), Color(0x00FFFFFF)], + ), ), ), ), @@ -99,75 +101,77 @@ class _AttachmentListFullScreenState extends State { bottom: MediaQuery.of(context).padding.bottom, left: 16, right: 16, - child: Material( - color: Colors.transparent, - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - if (widget.attachment.account != null) - Row( + child: IgnorePointer( + child: Material( + color: Colors.transparent, + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + if (widget.attachment.account != null) + Row( + children: [ + AccountAvatar( + content: widget.attachment.account!.avatar, + radius: 19, + ), + const SizedBox(width: 8), + Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + 'attachmentUploadBy'.tr, + style: Theme.of(context).textTheme.bodySmall, + ), + Text( + widget.attachment.account!.nick, + style: Theme.of(context).textTheme.bodyMedium, + ), + ], + ), + ], + ), + const SizedBox(height: 4), + Text( + widget.attachment.alt, + maxLines: 2, + overflow: TextOverflow.ellipsis, + style: const TextStyle( + fontSize: 15, + fontWeight: FontWeight.w500, + ), + ), + const SizedBox(height: 2), + Wrap( + spacing: 6, children: [ - AccountAvatar( - content: widget.attachment.account!.avatar, - radius: 19, - ), - const SizedBox(width: 8), - Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Text( - 'attachmentUploadBy'.tr, - style: Theme.of(context).textTheme.bodySmall, + if (widget.attachment.metadata?['width'] != null && + widget.attachment.metadata?['height'] != null) + Text( + '${widget.attachment.metadata?['width']}x${widget.attachment.metadata?['height']}', + style: TextStyle( + fontSize: 12, + color: _unFocusColor, ), - Text( - widget.attachment.account!.nick, - style: Theme.of(context).textTheme.bodyMedium, + ), + if (widget.attachment.metadata?['ratio'] != null) + Text( + '${(widget.attachment.metadata?['ratio'] as double).toPrecision(2)}', + style: TextStyle( + fontSize: 12, + color: _unFocusColor, ), - ], - ), + ), + Text( + _formatBytes(widget.attachment.size), + style: TextStyle( + fontSize: 12, + color: _unFocusColor, + ), + ) ], ), - const SizedBox(height: 4), - Text( - widget.attachment.alt, - maxLines: 2, - overflow: TextOverflow.ellipsis, - style: const TextStyle( - fontSize: 15, - fontWeight: FontWeight.w500, - ), - ), - const SizedBox(height: 2), - Wrap( - spacing: 6, - children: [ - if (widget.attachment.metadata?['width'] != null && - widget.attachment.metadata?['height'] != null) - Text( - '${widget.attachment.metadata?['width']}x${widget.attachment.metadata?['height']}', - style: TextStyle( - fontSize: 12, - color: _unFocusColor, - ), - ), - if (widget.attachment.metadata?['ratio'] != null) - Text( - '${(widget.attachment.metadata?['ratio'] as double).toPrecision(2)}', - style: TextStyle( - fontSize: 12, - color: _unFocusColor, - ), - ), - Text( - _formatBytes(widget.attachment.size), - style: TextStyle( - fontSize: 12, - color: _unFocusColor, - ), - ) - ], - ), - ], + ], + ), ), ), )