diff --git a/lib/common/widgets/reorder_mixin.dart b/lib/common/widgets/reorder_mixin.dart new file mode 100644 index 000000000..6adf29a2c --- /dev/null +++ b/lib/common/widgets/reorder_mixin.dart @@ -0,0 +1,18 @@ +import 'package:flutter/material.dart'; + +mixin ReorderMixin on State { + late ColorScheme scheme; + + @override + void didChangeDependencies() { + super.didChangeDependencies(); + scheme = ColorScheme.of(context); + } + + Widget proxyDecorator(Widget child, _, _) { + return ColoredBox( + color: scheme.onInverseSurface, + child: child, + ); + } +} diff --git a/lib/pages/fav_folder_sort/view.dart b/lib/pages/fav_folder_sort/view.dart index d2f787c13..f99e752f5 100644 --- a/lib/pages/fav_folder_sort/view.dart +++ b/lib/pages/fav_folder_sort/view.dart @@ -1,3 +1,4 @@ +import 'package:PiliPlus/common/widgets/reorder_mixin.dart'; import 'package:PiliPlus/http/fav.dart'; import 'package:PiliPlus/http/loading_state.dart'; import 'package:PiliPlus/models_new/fav/fav_folder/list.dart'; @@ -16,10 +17,10 @@ class FavFolderSortPage extends StatefulWidget { State createState() => _FavFolderSortPageState(); } -class _FavFolderSortPageState extends State { +class _FavFolderSortPageState extends State + with ReorderMixin { FavController get _favController => widget.favController; - final GlobalKey _key = GlobalKey(); late List sortList = List.from( _favController.loadingState.value.data!, ); @@ -73,8 +74,8 @@ class _FavFolderSortPageState extends State { Widget get _buildBody { return ReorderableListView.builder( - key: _key, onReorder: onReorder, + proxyDecorator: proxyDecorator, physics: const AlwaysScrollableScrollPhysics(), itemCount: sortList.length, padding: diff --git a/lib/pages/fav_sort/view.dart b/lib/pages/fav_sort/view.dart index d9dd9c07f..620e5a2d6 100644 --- a/lib/pages/fav_sort/view.dart +++ b/lib/pages/fav_sort/view.dart @@ -1,3 +1,4 @@ +import 'package:PiliPlus/common/widgets/reorder_mixin.dart'; import 'package:PiliPlus/http/fav.dart'; import 'package:PiliPlus/http/loading_state.dart'; import 'package:PiliPlus/models_new/fav/fav_detail/media.dart'; @@ -17,10 +18,9 @@ class FavSortPage extends StatefulWidget { State createState() => _FavSortPageState(); } -class _FavSortPageState extends State { +class _FavSortPageState extends State with ReorderMixin { FavDetailController get _favDetailController => widget.favDetailController; - final GlobalKey _key = GlobalKey(); late List sortList = List.from( _favDetailController.loadingState.value.data!, ); @@ -102,8 +102,8 @@ class _FavSortPageState extends State { Widget get _buildBody { final child = ReorderableListView.builder( - key: _key, onReorder: onReorder, + proxyDecorator: proxyDecorator, physics: const AlwaysScrollableScrollPhysics(), padding: MediaQuery.viewPaddingOf(context).copyWith(top: 0) + diff --git a/lib/pages/follow_tag_sort/view.dart b/lib/pages/follow_tag_sort/view.dart index 8a988647d..8c06b162e 100644 --- a/lib/pages/follow_tag_sort/view.dart +++ b/lib/pages/follow_tag_sort/view.dart @@ -1,3 +1,4 @@ +import 'package:PiliPlus/common/widgets/reorder_mixin.dart'; import 'package:PiliPlus/http/follow.dart'; import 'package:PiliPlus/http/loading_state.dart'; import 'package:PiliPlus/models/member/tags.dart'; @@ -16,9 +17,8 @@ class FollowTagSortPage extends StatefulWidget { State createState() => _FollowTagSortPageState(); } -class _FollowTagSortPageState extends State { - late ColorScheme _scheme; - final GlobalKey _key = GlobalKey(); +class _FollowTagSortPageState extends State + with ReorderMixin { final List _defTags = []; final List _customTags = []; @@ -34,12 +34,6 @@ class _FollowTagSortPageState extends State { } } - @override - void didChangeDependencies() { - super.didChangeDependencies(); - _scheme = ColorScheme.of(context); - } - @override Widget build(BuildContext context) { return Scaffold( @@ -90,12 +84,12 @@ class _FollowTagSortPageState extends State { Widget get _buildBody { return ReorderableListView.builder( - key: _key, onReorder: onReorder, + proxyDecorator: proxyDecorator, physics: const AlwaysScrollableScrollPhysics(), - padding: - MediaQuery.viewPaddingOf(context).copyWith(top: 0) + - const EdgeInsets.only(bottom: 100), + padding: EdgeInsets.only( + bottom: MediaQuery.viewPaddingOf(context).bottom + 100, + ), header: Column( children: _defTags.map((e) => _buildItem(e, enabled: false)).toList(), ), @@ -111,14 +105,14 @@ class _FollowTagSortPageState extends State { bool enabled = true, }) { return ListTile( - textColor: enabled ? null : _scheme.outline, + textColor: enabled ? null : scheme.outline, key: ValueKey(item.tagid), leading: enabled ? const Icon(Icons.group_outlined) : Icon( size: 23, Icons.lock_outline, - color: _scheme.outline, + color: scheme.outline, ), minLeadingWidth: 0, title: Text('${item.name} (${item.count})'), diff --git a/lib/pages/setting/pages/bar_set.dart b/lib/pages/setting/pages/bar_set.dart index 0dfaa95f3..e2168a497 100644 --- a/lib/pages/setting/pages/bar_set.dart +++ b/lib/pages/setting/pages/bar_set.dart @@ -1,4 +1,5 @@ import 'package:PiliPlus/common/widgets/pair.dart'; +import 'package:PiliPlus/common/widgets/reorder_mixin.dart'; import 'package:PiliPlus/models/common/enum_with_label.dart'; import 'package:PiliPlus/utils/storage.dart'; import 'package:flutter/material.dart'; @@ -12,7 +13,7 @@ class BarSetPage extends StatefulWidget { State createState() => _BarSetPageState(); } -class _BarSetPageState extends State { +class _BarSetPageState extends State with ReorderMixin { late final String key; late final String title; late final List> list; @@ -71,6 +72,7 @@ class _BarSetPageState extends State { ), body: ReorderableListView( onReorder: onReorder, + proxyDecorator: proxyDecorator, footer: Padding( padding: MediaQuery.viewPaddingOf(context).copyWith(top: 0, left: 0) +