diff --git a/lib/common/skeleton/video_card_h.dart b/lib/common/skeleton/video_card_h.dart index 46b858d3..1d91cbb9 100644 --- a/lib/common/skeleton/video_card_h.dart +++ b/lib/common/skeleton/video_card_h.dart @@ -2,14 +2,9 @@ import 'package:pilipala/common/constants.dart'; import 'package:flutter/material.dart'; import 'skeleton.dart'; -class VideoCardHSkeleton extends StatefulWidget { +class VideoCardHSkeleton extends StatelessWidget { const VideoCardHSkeleton({super.key}); - @override - State createState() => _VideoCardHSkeletonState(); -} - -class _VideoCardHSkeletonState extends State { @override Widget build(BuildContext context) { return Skeleton( diff --git a/lib/pages/home/widgets/app_bar.dart b/lib/pages/home/widgets/app_bar.dart index 6ad83404..da890b78 100644 --- a/lib/pages/home/widgets/app_bar.dart +++ b/lib/pages/home/widgets/app_bar.dart @@ -47,12 +47,15 @@ class HomeAppBar extends StatelessWidget { IconButton( onPressed: () { Get.bottomSheet( - const SizedBox( + Builder(builder: (context) { + return const SizedBox( height: 450, child: MinePage(), - ), - clipBehavior: Clip.hardEdge, - isScrollControlled: true); + ); + }), + clipBehavior: Clip.hardEdge, + isScrollControlled: true, + ); }, icon: const Icon(CupertinoIcons.person, size: 22), ), diff --git a/lib/pages/media/view.dart b/lib/pages/media/view.dart index feaf63d6..82cb80a2 100644 --- a/lib/pages/media/view.dart +++ b/lib/pages/media/view.dart @@ -4,29 +4,12 @@ import 'package:pilipala/common/widgets/network_img_layer.dart'; import 'package:pilipala/models/user/fav_folder.dart'; import 'package:pilipala/pages/media/index.dart'; -class MediaPage extends StatefulWidget { +class MediaPage extends StatelessWidget { const MediaPage({super.key}); - @override - State createState() => _MediaPageState(); -} - -class _MediaPageState extends State - with AutomaticKeepAliveClientMixin { - final MediaController _mediaController = Get.put(MediaController()); - Future? _futureBuilderFuture; - - @override - bool get wantKeepAlive => false; - - @override - void initState() { - super.initState(); - _futureBuilderFuture = _mediaController.queryFavFolder(); - } - @override Widget build(BuildContext context) { + final MediaController mediaController = Get.put(MediaController()); Color primary = Theme.of(context).colorScheme.primary; return Scaffold( appBar: AppBar(toolbarHeight: 30), @@ -45,7 +28,7 @@ class _MediaPageState extends State ), ), ), - for (var i in _mediaController.list) ...[ + for (var i in mediaController.list) ...[ ListTile( onTap: () => i['onTap'](), dense: true, @@ -65,15 +48,15 @@ class _MediaPageState extends State ), ), ], - Obx(() => _mediaController.userLogin.value == true - ? favFolder() + Obx(() => mediaController.userLogin.value == true + ? favFolder(mediaController, context) : const SizedBox()) ], ), ); } - Widget favFolder() { + Widget favFolder(mediaController, context) { return Column( children: [ Divider( @@ -97,9 +80,9 @@ class _MediaPageState extends State Theme.of(context).textTheme.titleMedium!.fontSize, fontWeight: FontWeight.bold), ), - if (_mediaController.favFolderData.value.count != null) + if (mediaController.favFolderData.value.count != null) TextSpan( - text: _mediaController.favFolderData.value.count + text: mediaController.favFolderData.value.count .toString(), style: TextStyle( fontSize: @@ -113,7 +96,7 @@ class _MediaPageState extends State ), ), trailing: IconButton( - onPressed: () => _mediaController.queryFavFolder(), + onPressed: () => mediaController.queryFavFolder(), icon: const Icon( Icons.refresh, size: 20, @@ -125,18 +108,18 @@ class _MediaPageState extends State width: double.infinity, height: 170, child: FutureBuilder( - future: _futureBuilderFuture, + future: mediaController.queryFavFolder(), builder: (context, snapshot) { if (snapshot.connectionState == ConnectionState.done) { - Map data = snapshot.data; + Map data = snapshot.data as Map; if (data['status']) { List favFolderList = - _mediaController.favFolderData.value.list!; + mediaController.favFolderData.value.list!; int favFolderCount = - _mediaController.favFolderData.value.count!; + mediaController.favFolderData.value.count!; bool flag = favFolderCount > favFolderList.length; return Obx(() => ListView.builder( - itemCount: _mediaController + itemCount: mediaController .favFolderData.value.list!.length + (flag ? 1 : 0), itemBuilder: (context, index) { @@ -156,7 +139,7 @@ class _MediaPageState extends State )); } else { return FavFolderItem( - item: _mediaController + item: mediaController .favFolderData.value.list![index], index: index); } diff --git a/lib/pages/mine/view.dart b/lib/pages/mine/view.dart index 5f659fd2..23dc4b43 100644 --- a/lib/pages/mine/view.dart +++ b/lib/pages/mine/view.dart @@ -5,18 +5,13 @@ import 'package:pilipala/common/constants.dart'; import 'package:pilipala/common/widgets/network_img_layer.dart'; import 'controller.dart'; -class MinePage extends StatefulWidget { +class MinePage extends StatelessWidget { const MinePage({super.key}); - @override - State createState() => _MinePageState(); -} - -class _MinePageState extends State { - final MineController _mineController = Get.put(MineController()); - @override Widget build(BuildContext context) { + final MineController mineController = Get.put(MineController()); + return Scaffold( appBar: AppBar( automaticallyImplyLeading: false, @@ -46,45 +41,39 @@ class _MinePageState extends State { const SizedBox(width: 10), ], ), - body: RefreshIndicator( - onRefresh: () async { - await _mineController.queryUserInfo(); - await _mineController.queryUserStatOwner(); - }, - child: LayoutBuilder( - builder: (context, constraint) { - return SingleChildScrollView( - physics: const AlwaysScrollableScrollPhysics(), - child: SizedBox( - height: constraint.maxHeight, - child: Column( - children: [ - const SizedBox(height: 10), - FutureBuilder( - future: _mineController.queryUserInfo(), - builder: (context, snapshot) { - if (snapshot.connectionState == ConnectionState.done) { - if (snapshot.data['status']) { - return Obx(() => userInfoBuild()); - } else { - return userInfoBuild(); - } + body: LayoutBuilder( + builder: (context, constraint) { + return SingleChildScrollView( + physics: const NeverScrollableScrollPhysics(), + child: SizedBox( + height: constraint.maxHeight, + child: Column( + children: [ + const SizedBox(height: 10), + FutureBuilder( + future: mineController.queryUserInfo(), + builder: (context, snapshot) { + if (snapshot.connectionState == ConnectionState.done) { + if (snapshot.data['status']) { + return Obx(() => userInfoBuild(mineController, context)); } else { - return userInfoBuild(); + return userInfoBuild(mineController, context); } - }, - ), - ], - ), + } else { + return userInfoBuild(mineController, context); + } + }, + ), + ], ), - ); - }, - ), + ), + ); + }, ), ); } - Widget userInfoBuild() { + Widget userInfoBuild(_mineController, context) { return Column( children: [ const SizedBox(height: 5), diff --git a/lib/pages/setting/controller.dart b/lib/pages/setting/controller.dart index af6b6026..9e4e6824 100644 --- a/lib/pages/setting/controller.dart +++ b/lib/pages/setting/controller.dart @@ -13,6 +13,7 @@ class SettingController extends GetxController { void onInit() { super.onInit(); userLogin.value = user.get(UserBoxKey.userLogin) ?? false; + print(userLogin.value); } loginOut() async { diff --git a/lib/pages/setting/view.dart b/lib/pages/setting/view.dart index 63321afa..994a7488 100644 --- a/lib/pages/setting/view.dart +++ b/lib/pages/setting/view.dart @@ -2,17 +2,11 @@ import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'package:pilipala/pages/setting/index.dart'; -class SettingPage extends StatefulWidget { +class SettingPage extends StatelessWidget { const SettingPage({super.key}); - @override - State createState() => _SettingPageState(); -} - -class _SettingPageState extends State { - final SettingController _settingController = Get.put(SettingController()); - @override Widget build(BuildContext context) { + final SettingController settingController = Get.put(SettingController()); return Scaffold( appBar: AppBar( title: const Text('设置'), @@ -21,9 +15,9 @@ class _SettingPageState extends State { children: [ Obx( () => Visibility( - visible: _settingController.userLogin.value, + visible: settingController.userLogin.value, child: ListTile( - onTap: () => _settingController.loginOut(), + onTap: () => settingController.loginOut(), dense: false, title: const Text('退出登录'), ), diff --git a/lib/pages/video/detail/related/view.dart b/lib/pages/video/detail/related/view.dart index 2fc11573..381b2cac 100644 --- a/lib/pages/video/detail/related/view.dart +++ b/lib/pages/video/detail/related/view.dart @@ -6,60 +6,58 @@ import 'package:pilipala/common/widgets/overlay_pop.dart'; import 'package:pilipala/common/widgets/video_card_h.dart'; import './controller.dart'; -class RelatedVideoPanel extends StatefulWidget { +class RelatedVideoPanel extends GetView { const RelatedVideoPanel({super.key}); - @override - State createState() => _RelatedVideoPanelState(); -} - -class _RelatedVideoPanelState extends State { - final ReleatedController _releatedController = - Get.put(ReleatedController(), tag: Get.arguments['heroTag']); - @override Widget build(BuildContext context) { - return FutureBuilder( - future: _releatedController.queryRelatedVideo(), - builder: (context, snapshot) { - if (snapshot.connectionState == ConnectionState.done) { - if (snapshot.data!['status']) { - // 请求成功 - return SliverList( - delegate: SliverChildBuilderDelegate((context, index) { - if (index == snapshot.data['data'].length) { - return SizedBox(height: MediaQuery.of(context).padding.bottom); + return GetBuilder( + init: ReleatedController(), + id: Get.arguments['heroTag'], + builder: (context) { + return FutureBuilder( + future: ReleatedController().queryRelatedVideo(), + builder: (context, snapshot) { + if (snapshot.connectionState == ConnectionState.done) { + if (snapshot.data!['status']) { + // 请求成功 + return SliverList( + delegate: SliverChildBuilderDelegate((context, index) { + if (index == snapshot.data['data'].length) { + return SizedBox( + height: MediaQuery.of(context).padding.bottom); + } else { + return VideoCardH( + videoItem: snapshot.data['data'][index], + longPress: () { + ReleatedController().popupDialog = + _createPopupDialog(snapshot.data['data'][index]); + Overlay.of(context) + .insert(ReleatedController().popupDialog!); + }, + longPressEnd: () { + ReleatedController().popupDialog?.remove(); + }, + ); + } + }, childCount: snapshot.data['data'].length + 1)); + } else { + // 请求错误 + return const Center( + child: Text('出错了'), + ); + } } else { - return VideoCardH( - videoItem: snapshot.data['data'][index], - longPress: () { - _releatedController.popupDialog = - _createPopupDialog(snapshot.data['data'][index]); - Overlay.of(context) - .insert(_releatedController.popupDialog!); - }, - longPressEnd: () { - _releatedController.popupDialog?.remove(); - }, + // 骨架屏 + return SliverList( + delegate: SliverChildBuilderDelegate((context, index) { + return const VideoCardHSkeleton(); + }, childCount: 5), ); } - }, childCount: snapshot.data['data'].length + 1)); - } else { - // 请求错误 - return const Center( - child: Text('出错了'), - ); - } - } else { - // 骨架屏 - return SliverList( - delegate: SliverChildBuilderDelegate((context, index) { - return const VideoCardHSkeleton(); - }, childCount: 5), + }, ); - } - }, - ); + }); } OverlayEntry _createPopupDialog(videoItem) {