diff --git a/lib/http/reply.dart b/lib/http/reply.dart index 6ebbadb7..dfa5976a 100644 --- a/lib/http/reply.dart +++ b/lib/http/reply.dart @@ -96,22 +96,16 @@ class ReplyHttp { } } - static Future getEmoteList({String? business}) async { + static Future getEmoteList({String? business}) async { var res = await Request().get(Api.myEmote, data: { 'business': business ?? 'reply', 'web_location': '333.1245', }); if (res.data['code'] == 0) { - return { - 'status': true, - 'data': EmoteModelData.fromJson(res.data['data']), - }; + return LoadingState.success( + EmoteModelData.fromJson(res.data['data']).packages); } else { - return { - 'status': false, - 'date': [], - 'msg': res.data['message'], - }; + return LoadingState.error(res.data['message']); } } } diff --git a/lib/pages/bangumi/introduction/controller.dart b/lib/pages/bangumi/introduction/controller.dart index 15ada06c..aff730ae 100644 --- a/lib/pages/bangumi/introduction/controller.dart +++ b/lib/pages/bangumi/introduction/controller.dart @@ -53,7 +53,7 @@ class BangumiIntroController extends CommonController { // 关注状态 默认未关注 RxMap followStatus = {}.obs; int _tempThemeValue = -1; - var userInfo; + dynamic userInfo; @override void onInit() { diff --git a/lib/pages/common/reply_controller.dart b/lib/pages/common/reply_controller.dart index 31b00e27..7e08c156 100644 --- a/lib/pages/common/reply_controller.dart +++ b/lib/pages/common/reply_controller.dart @@ -118,7 +118,7 @@ abstract class ReplyController extends CommonController { dynamic replyItem, int index = 0, }) { - dynamic key = oid ?? replyItem.oid + replyItem.rpid + replyItem.rpid; + dynamic key = oid ?? replyItem.oid + replyItem.rpid; Navigator.of(context) .push( GetDialogRoute( diff --git a/lib/pages/dynamics/tab/controller.dart b/lib/pages/dynamics/tab/controller.dart index 43d23333..0ad9de19 100644 --- a/lib/pages/dynamics/tab/controller.dart +++ b/lib/pages/dynamics/tab/controller.dart @@ -18,7 +18,6 @@ class DynamicsTabController extends CommonController { @override Future onRefresh() async { offset = ''; - print('11111111111111111111111111111111 $dynamicsType,,$mid'); await queryData(); } diff --git a/lib/pages/dynamics/widgets/up_panel.dart b/lib/pages/dynamics/widgets/up_panel.dart index c2a06a85..a15eef83 100644 --- a/lib/pages/dynamics/widgets/up_panel.dart +++ b/lib/pages/dynamics/widgets/up_panel.dart @@ -24,7 +24,7 @@ class _UpPanelState extends State { List upList = []; List liveList = []; Box userInfoCache = GStorage.userInfo; - var userInfo; + dynamic userInfo; bool _showLiveItems = false; late DynamicsController dynamicsController; diff --git a/lib/pages/emote/controller.dart b/lib/pages/emote/controller.dart index 6a346242..74222637 100644 --- a/lib/pages/emote/controller.dart +++ b/lib/pages/emote/controller.dart @@ -1,20 +1,29 @@ +import 'package:PiliPalaX/http/loading_state.dart'; +import 'package:PiliPalaX/pages/common/common_controller.dart'; import 'package:flutter/material.dart'; import 'package:get/get.dart'; import '../../http/reply.dart'; -import '../../models/video/reply/emote.dart'; -class EmotePanelController extends GetxController +class EmotePanelController extends CommonController with GetTickerProviderStateMixin { - late List emotePackage; late TabController tabController; - Future getEmote() async { - var res = await ReplyHttp.getEmoteList(business: 'reply'); - if (res['status']) { - emotePackage = res['data'].packages; - tabController = TabController(length: emotePackage.length, vsync: this); - } - return res; + @override + void onInit() { + super.onInit(); + queryData(); } + + @override + bool customHandleResponse(Success response) { + tabController = + TabController(length: response.response.length, vsync: this); + loadingState.value = response; + return true; + } + + @override + Future customGetData() => + ReplyHttp.getEmoteList(business: 'reply'); } diff --git a/lib/pages/emote/view.dart b/lib/pages/emote/view.dart index c8d8dd73..a86f881a 100644 --- a/lib/pages/emote/view.dart +++ b/lib/pages/emote/view.dart @@ -1,7 +1,8 @@ +import 'package:PiliPalaX/http/loading_state.dart'; +import 'package:PiliPalaX/models/video/reply/emote.dart'; import 'package:flutter/material.dart'; import 'package:get/get.dart'; import '../../common/widgets/network_img_layer.dart'; -import '../../models/video/reply/emote.dart'; import 'controller.dart'; class EmotePanel extends StatefulWidget { @@ -16,116 +17,101 @@ class _EmotePanelState extends State with AutomaticKeepAliveClientMixin { final EmotePanelController _emotePanelController = Get.put(EmotePanelController()); - late Future _futureBuilderFuture; @override bool get wantKeepAlive => true; - @override - void initState() { - super.initState(); - _futureBuilderFuture = _emotePanelController.getEmote(); - } - @override Widget build(BuildContext context) { super.build(context); - return FutureBuilder( - future: _futureBuilderFuture, - builder: (context, snapshot) { - if (snapshot.connectionState == ConnectionState.done) { - Map data = snapshot.data as Map; - if (data['status']) { - List emotePackage = _emotePanelController.emotePackage; + return Obx(() => _buildBody(_emotePanelController.loadingState.value)); + } - return Column( - children: [ - Expanded( - child: TabBarView( - controller: _emotePanelController.tabController, - children: emotePackage.map( - (e) { - int size = e.emote!.first.meta!.size!; - int type = e.type!; - return Padding( - padding: const EdgeInsets.fromLTRB(12, 6, 12, 0), - child: GridView.builder( - gridDelegate: - SliverGridDelegateWithMaxCrossAxisExtent( - maxCrossAxisExtent: - type == 4 ? 100 : (size == 1 ? 40 : 60), - crossAxisSpacing: 8, - mainAxisSpacing: 8, - mainAxisExtent: size == 1 ? 40 : 60, - ), - itemCount: e.emote!.length, - itemBuilder: (context, index) { - return Material( - color: Colors.transparent, - child: InkWell( - borderRadius: BorderRadius.circular(8), - onTap: () { - widget.onChoose(e, e.emote![index]); - }, - child: Padding( - padding: const EdgeInsets.all(6), - child: type == 4 - ? Center( - child: Text( - e.emote![index].text!, - overflow: TextOverflow.clip, - maxLines: 1, - ), - ) - : NetworkImgLayer( - src: e.emote![index].url!, - width: size * 38, - height: size * 38, - semanticsLabel: - e.emote![index].text!, - type: 'emote', - ), - ), - ), - ); - }, - ), - ); - }, - ).toList(), - ), - ), - Divider( - height: 1, - color: Theme.of(context).dividerColor.withOpacity(0.1), - ), - TabBar( - controller: _emotePanelController.tabController, - dividerColor: Colors.transparent, - isScrollable: true, - tabs: _emotePanelController.emotePackage - .map( - (e) => Padding( - padding: const EdgeInsets.all(8), - child: NetworkImgLayer( - width: 24, - height: 24, - type: 'emote', - src: e.url, - ), + Widget _buildBody(LoadingState loadingState) { + return loadingState is Success + ? Column( + children: [ + Expanded( + child: TabBarView( + controller: _emotePanelController.tabController, + children: (loadingState.response as List).map( + (e) { + int size = e.emote!.first.meta!.size!; + int type = e.type!; + return Padding( + padding: const EdgeInsets.fromLTRB(12, 6, 12, 0), + child: GridView.builder( + gridDelegate: + SliverGridDelegateWithMaxCrossAxisExtent( + maxCrossAxisExtent: + type == 4 ? 100 : (size == 1 ? 40 : 60), + crossAxisSpacing: 8, + mainAxisSpacing: 8, + mainAxisExtent: size == 1 ? 40 : 60, ), - ) - .toList(), - ), - SizedBox(height: MediaQuery.of(context).padding.bottom), - ], - ); - } else { - return Center(child: Text(data['msg'])); - } - } else { - return const Center(child: Text('加载中...')); - } - }); + itemCount: e.emote!.length, + itemBuilder: (context, index) { + return Material( + color: Colors.transparent, + child: InkWell( + borderRadius: BorderRadius.circular(8), + onTap: () { + widget.onChoose(e, e.emote![index]); + }, + child: Padding( + padding: const EdgeInsets.all(6), + child: type == 4 + ? Center( + child: Text( + e.emote![index].text!, + overflow: TextOverflow.clip, + maxLines: 1, + ), + ) + : NetworkImgLayer( + src: e.emote![index].url!, + width: size * 38, + height: size * 38, + semanticsLabel: e.emote![index].text!, + type: 'emote', + ), + ), + ), + ); + }, + ), + ); + }, + ).toList(), + ), + ), + Divider( + height: 1, + color: Theme.of(context).dividerColor.withOpacity(0.1), + ), + TabBar( + controller: _emotePanelController.tabController, + dividerColor: Colors.transparent, + isScrollable: true, + tabs: (loadingState.response as List) + .map( + (e) => Padding( + padding: const EdgeInsets.all(8), + child: NetworkImgLayer( + width: 24, + height: 24, + type: 'emote', + src: e.url, + ), + ), + ) + .toList(), + ), + SizedBox(height: MediaQuery.of(context).padding.bottom), + ], + ) + : loadingState is Error + ? Center(child: Text(loadingState.errMsg)) + : const Center(child: Text('加载中...')); } } diff --git a/lib/pages/fan/controller.dart b/lib/pages/fan/controller.dart index cbb5fdc5..4563d2d0 100644 --- a/lib/pages/fan/controller.dart +++ b/lib/pages/fan/controller.dart @@ -13,7 +13,7 @@ class FansController extends GetxController { RxList fansList = [].obs; late int? mid; late String? name; - var userInfo; + dynamic userInfo; RxString loadingText = '加载中...'.obs; RxBool isOwner = false.obs; diff --git a/lib/pages/follow/controller.dart b/lib/pages/follow/controller.dart index 800a2f0b..170b9001 100644 --- a/lib/pages/follow/controller.dart +++ b/lib/pages/follow/controller.dart @@ -18,7 +18,7 @@ class FollowController extends GetxController with GetTickerProviderStateMixin { RxList followList = [].obs; late int? mid; late String? name; - var userInfo; + dynamic userInfo; RxString loadingText = '加载中...'.obs; RxBool isOwner = false.obs; late List followTags; diff --git a/lib/pages/home/controller.dart b/lib/pages/home/controller.dart index 35697cd6..4ee3ba11 100644 --- a/lib/pages/home/controller.dart +++ b/lib/pages/home/controller.dart @@ -20,7 +20,7 @@ class HomeController extends GetxController with GetTickerProviderStateMixin { Box settingStorage = GStorage.setting; RxBool userLogin = false.obs; RxString userFace = ''.obs; - var userInfo; + dynamic userInfo; Box setting = GStorage.setting; late final StreamController searchBarStream = StreamController.broadcast(); diff --git a/lib/pages/home/widgets/app_bar.dart b/lib/pages/home/widgets/app_bar.dart index 28a5724f..9301e2f1 100644 --- a/lib/pages/home/widgets/app_bar.dart +++ b/lib/pages/home/widgets/app_bar.dart @@ -13,7 +13,7 @@ class HomeAppBar extends StatelessWidget { @override Widget build(BuildContext context) { - var userInfo = userInfoCache.get('userInfoCache'); + dynamic userInfo = userInfoCache.get('userInfoCache'); return SliverAppBar( // forceElevated: true, scrolledUnderElevation: 0, diff --git a/lib/pages/main/controller.dart b/lib/pages/main/controller.dart index cac879dd..efc4dd65 100644 --- a/lib/pages/main/controller.dart +++ b/lib/pages/main/controller.dart @@ -44,7 +44,7 @@ class MainController extends GetxController { setting.get(SettingBoxKey.defaultHomePage, defaultValue: 0) as int; selectedIndex = defaultNavigationBars .indexWhere((item) => item['id'] == defaultHomePage); - var userInfo = userInfoCache.get('userInfoCache'); + dynamic userInfo = userInfoCache.get('userInfoCache'); userLogin.value = userInfo != null; dynamicBadgeType = DynamicBadgeMode.values[setting.get( SettingBoxKey.dynamicBadgeMode, diff --git a/lib/pages/media/controller.dart b/lib/pages/media/controller.dart index 38b4e54f..eff4f825 100644 --- a/lib/pages/media/controller.dart +++ b/lib/pages/media/controller.dart @@ -43,7 +43,7 @@ class MediaController extends GetxController { }), }, ]; - var userInfo; + dynamic userInfo; int? mid; final ScrollController scrollController = ScrollController(); diff --git a/lib/pages/setting/controller.dart b/lib/pages/setting/controller.dart index 4c1015ea..f4538e8b 100644 --- a/lib/pages/setting/controller.dart +++ b/lib/pages/setting/controller.dart @@ -24,7 +24,7 @@ class SettingController extends GetxController { RxDouble toastOpacity = (1.0).obs; RxInt picQuality = 10.obs; Rx themeType = ThemeType.system.obs; - var userInfo; + dynamic userInfo; Rx dynamicBadgeType = DynamicBadgeMode.number.obs; RxInt defaultHomePage = 0.obs; diff --git a/lib/pages/video/detail/controller.dart b/lib/pages/video/detail/controller.dart index bfc17726..14369eae 100644 --- a/lib/pages/video/detail/controller.dart +++ b/lib/pages/video/detail/controller.dart @@ -75,7 +75,7 @@ class VideoDetailController extends GetxController double? brightness; // 默认记录历史记录 bool enableHeart = true; - var userInfo; + dynamic userInfo; late bool isFirstTime = true; Floating? floating; late PreferredSizeWidget headerControl; diff --git a/lib/pages/video/detail/introduction/controller.dart b/lib/pages/video/detail/introduction/controller.dart index 99e4fa9f..70df1c74 100644 --- a/lib/pages/video/detail/introduction/controller.dart +++ b/lib/pages/video/detail/introduction/controller.dart @@ -64,7 +64,7 @@ class VideoIntroController extends GetxController { RxMap followStatus = {}.obs; RxInt lastPlayCid = 0.obs; - var userInfo; + dynamic userInfo; // 同时观看 bool isShowOnlineTotal = false;