From 9b8b9bd1abe1643426d912553e18c14a4802c9d4 Mon Sep 17 00:00:00 2001 From: bggRGjQaUbCoE Date: Sat, 11 Jan 2025 18:38:19 +0800 Subject: [PATCH] opt: reply error widget Signed-off-by: bggRGjQaUbCoE --- lib/common/widgets/loading_widget.dart | 17 +++++++++++++ lib/pages/dynamics/detail/view.dart | 24 +++--------------- lib/pages/html/view.dart | 24 +++--------------- lib/pages/video/detail/reply/view.dart | 24 +++--------------- lib/pages/video/detail/reply_reply/view.dart | 26 +++++--------------- lib/utils/utils.dart | 2 +- 6 files changed, 36 insertions(+), 81 deletions(-) diff --git a/lib/common/widgets/loading_widget.dart b/lib/common/widgets/loading_widget.dart index 0174f0ea..97fd0b88 100644 --- a/lib/common/widgets/loading_widget.dart +++ b/lib/common/widgets/loading_widget.dart @@ -1,4 +1,5 @@ import 'package:PiliPlus/common/widgets/http_error.dart'; +import 'package:PiliPlus/utils/global_data.dart'; import 'package:flutter/material.dart'; Widget get loadingWidget => Center(child: CircularProgressIndicator()); @@ -17,3 +18,19 @@ Widget scrollErrorWidget({errMsg, callback}) => CustomScrollView( ) ], ); + +Widget grpcReplyErrorWidget(context, onReload) => FilledButton.tonal( + onPressed: () { + GlobalData().grpcReply = false; + onReload(); + }, + style: ButtonStyle( + backgroundColor: WidgetStateProperty.resolveWith((states) { + return Theme.of(context).colorScheme.primary.withAlpha(20); + }), + ), + child: Text( + '暂时关闭gRPC加载评论', + style: TextStyle(color: Theme.of(context).colorScheme.primary), + ), + ); diff --git a/lib/pages/dynamics/detail/view.dart b/lib/pages/dynamics/detail/view.dart index 02cb83ba..c363a6e2 100644 --- a/lib/pages/dynamics/detail/view.dart +++ b/lib/pages/dynamics/detail/view.dart @@ -3,6 +3,7 @@ import 'dart:math'; import 'package:PiliPlus/common/widgets/custom_sliver_persistent_header_delegate.dart'; import 'package:PiliPlus/common/widgets/interactiveviewer_gallery/interactiveviewer_gallery.dart'; +import 'package:PiliPlus/common/widgets/loading_widget.dart'; import 'package:PiliPlus/common/widgets/refresh_indicator.dart'; import 'package:PiliPlus/http/loading_state.dart'; import 'package:PiliPlus/pages/video/detail/reply/widgets/reply_item.dart'; @@ -556,26 +557,9 @@ class _DynamicDetailPageState extends State Error() => HttpError( errMsg: loadingState.errMsg, callback: _dynamicDetailController.onReload, - extraWidget: GlobalData().grpcReply - ? FilledButton.tonal( - onPressed: () { - GlobalData().grpcReply = false; - _dynamicDetailController.onReload(); - }, - style: ButtonStyle( - backgroundColor: WidgetStateProperty.resolveWith((states) { - return Theme.of(context) - .colorScheme - .primary - .withAlpha(20); - }), - ), - child: Text( - '暂时关闭gRPC加载评论', - style: - TextStyle(color: Theme.of(context).colorScheme.primary), - ), - ) + extraWidget: loadingState.errMsg.startsWith('gRPC Error') && + GlobalData().grpcReply + ? grpcReplyErrorWidget(context, _dynamicDetailController.onReload) : null, ), LoadingState() => throw UnimplementedError(), diff --git a/lib/pages/html/view.dart b/lib/pages/html/view.dart index c1fb8e34..758f07e3 100644 --- a/lib/pages/html/view.dart +++ b/lib/pages/html/view.dart @@ -3,6 +3,7 @@ import 'dart:math'; import 'package:PiliPlus/common/widgets/article_content.dart'; import 'package:PiliPlus/common/widgets/http_error.dart'; import 'package:PiliPlus/common/widgets/interactiveviewer_gallery/interactiveviewer_gallery.dart'; +import 'package:PiliPlus/common/widgets/loading_widget.dart'; import 'package:PiliPlus/http/loading_state.dart'; import 'package:PiliPlus/pages/video/detail/reply/widgets/reply_item.dart'; import 'package:PiliPlus/pages/video/detail/reply/widgets/reply_item_grpc.dart'; @@ -488,26 +489,9 @@ class _HtmlRenderPageState extends State Error() => HttpError( errMsg: loadingState.errMsg, callback: _htmlRenderCtr.onReload, - extraWidget: GlobalData().grpcReply - ? FilledButton.tonal( - onPressed: () { - GlobalData().grpcReply = false; - _htmlRenderCtr.onReload(); - }, - style: ButtonStyle( - backgroundColor: WidgetStateProperty.resolveWith((states) { - return Theme.of(context) - .colorScheme - .primary - .withAlpha(20); - }), - ), - child: Text( - '暂时关闭gRPC加载评论', - style: - TextStyle(color: Theme.of(context).colorScheme.primary), - ), - ) + extraWidget: loadingState.errMsg.startsWith('gRPC Error') && + GlobalData().grpcReply + ? grpcReplyErrorWidget(context, _htmlRenderCtr.onReload) : null, ), LoadingState() => throw UnimplementedError(), diff --git a/lib/pages/video/detail/reply/view.dart b/lib/pages/video/detail/reply/view.dart index 45d5c7af..e9310b25 100644 --- a/lib/pages/video/detail/reply/view.dart +++ b/lib/pages/video/detail/reply/view.dart @@ -1,4 +1,5 @@ import 'package:PiliPlus/common/widgets/custom_sliver_persistent_header_delegate.dart'; +import 'package:PiliPlus/common/widgets/loading_widget.dart'; import 'package:PiliPlus/common/widgets/refresh_indicator.dart'; import 'package:PiliPlus/common/widgets/http_error.dart'; import 'package:PiliPlus/http/loading_state.dart'; @@ -299,26 +300,9 @@ class _VideoReplyPanelState extends State Error() => HttpError( errMsg: loadingState.errMsg, callback: _videoReplyController.onReload, - extraWidget: GlobalData().grpcReply - ? FilledButton.tonal( - onPressed: () { - GlobalData().grpcReply = false; - _videoReplyController.onReload(); - }, - style: ButtonStyle( - backgroundColor: WidgetStateProperty.resolveWith((states) { - return Theme.of(context) - .colorScheme - .primary - .withAlpha(20); - }), - ), - child: Text( - '暂时关闭gRPC加载评论', - style: - TextStyle(color: Theme.of(context).colorScheme.primary), - ), - ) + extraWidget: loadingState.errMsg.startsWith('gRPC Error') && + GlobalData().grpcReply + ? grpcReplyErrorWidget(context, _videoReplyController.onReload) : null, ), LoadingState() => throw UnimplementedError(), diff --git a/lib/pages/video/detail/reply_reply/view.dart b/lib/pages/video/detail/reply_reply/view.dart index c41247a0..75ac4c15 100644 --- a/lib/pages/video/detail/reply_reply/view.dart +++ b/lib/pages/video/detail/reply_reply/view.dart @@ -1,4 +1,5 @@ import 'package:PiliPlus/common/widgets/interactiveviewer_gallery/interactiveviewer_gallery.dart'; +import 'package:PiliPlus/common/widgets/loading_widget.dart'; import 'package:PiliPlus/common/widgets/refresh_indicator.dart'; import 'package:PiliPlus/grpc/app/main/community/reply/v1/reply.pb.dart'; import 'package:PiliPlus/http/loading_state.dart'; @@ -418,26 +419,11 @@ class _VideoReplyReplyPanelState extends State { HttpError( errMsg: loadingState.errMsg, callback: _videoReplyReplyController.onReload, - extraWidget: GlobalData().grpcReply - ? FilledButton.tonal( - onPressed: () { - GlobalData().grpcReply = false; - _videoReplyReplyController.onReload(); - }, - style: ButtonStyle( - backgroundColor: - WidgetStateProperty.resolveWith((states) { - return Theme.of(context) - .colorScheme - .primary - .withAlpha(20); - }), - ), - child: Text( - '暂时关闭gRPC加载评论', - style: TextStyle( - color: Theme.of(context).colorScheme.primary), - ), + extraWidget: loadingState.errMsg.startsWith('gRPC Error') && + GlobalData().grpcReply + ? grpcReplyErrorWidget( + context, + _videoReplyReplyController.onReload, ) : null, ) diff --git a/lib/utils/utils.dart b/lib/utils/utils.dart index 35021de3..0257d5e2 100644 --- a/lib/utils/utils.dart +++ b/lib/utils/utils.dart @@ -491,7 +491,7 @@ class Utils { } } - if (data.episodes?.isEmpty == true) { + if (data.episodes.isNullOrEmpty) { SmartDialog.showToast('资源加载失败'); return; }