diff --git a/lib/models_new/pgc/pgc_index_condition/data.dart b/lib/models_new/pgc/pgc_index_condition/data.dart index 13a68ea72..7af0e9fd5 100644 --- a/lib/models_new/pgc/pgc_index_condition/data.dart +++ b/lib/models_new/pgc/pgc_index_condition/data.dart @@ -1,5 +1,4 @@ -import 'package:PiliPlus/models_new/pgc/pgc_index_condition/filter.dart'; -import 'package:PiliPlus/models_new/pgc/pgc_index_condition/order.dart'; +import 'package:PiliPlus/models_new/pgc/pgc_index_condition/sort.dart'; class PgcIndexConditionData { List? filter; diff --git a/lib/models_new/pgc/pgc_index_condition/filter.dart b/lib/models_new/pgc/pgc_index_condition/filter.dart deleted file mode 100644 index ee2f49e0b..000000000 --- a/lib/models_new/pgc/pgc_index_condition/filter.dart +++ /dev/null @@ -1,18 +0,0 @@ -import 'package:PiliPlus/models_new/pgc/pgc_index_condition/value.dart'; - -class PgcConditionFilter { - String? field; - String? name; - List? values; - - PgcConditionFilter({this.field, this.name, this.values}); - - factory PgcConditionFilter.fromJson(Map json) => - PgcConditionFilter( - field: json['field'] as String?, - name: json['name'] as String?, - values: (json['values'] as List?) - ?.map((e) => PgcConditionValue.fromJson(e as Map)) - .toList(), - ); -} diff --git a/lib/models_new/pgc/pgc_index_condition/order.dart b/lib/models_new/pgc/pgc_index_condition/order.dart deleted file mode 100644 index 579cac9a1..000000000 --- a/lib/models_new/pgc/pgc_index_condition/order.dart +++ /dev/null @@ -1,14 +0,0 @@ -class PgcConditionOrder { - String? field; - String? name; - String? sort; - - PgcConditionOrder({this.field, this.name, this.sort}); - - factory PgcConditionOrder.fromJson(Map json) => - PgcConditionOrder( - field: json['field'] as String?, - name: json['name'] as String?, - sort: json['sort'] as String?, - ); -} diff --git a/lib/models_new/pgc/pgc_index_condition/sort.dart b/lib/models_new/pgc/pgc_index_condition/sort.dart new file mode 100644 index 000000000..b128df79c --- /dev/null +++ b/lib/models_new/pgc/pgc_index_condition/sort.dart @@ -0,0 +1,39 @@ +import 'package:PiliPlus/models_new/pgc/pgc_index_condition/value.dart'; + +class PgcCondition { + String? field; + String? name; + + PgcCondition({ + this.field, + this.name, + }); +} + +class PgcConditionFilter extends PgcCondition { + List? values; + + PgcConditionFilter({super.field, super.name, this.values}); + + factory PgcConditionFilter.fromJson(Map json) => + PgcConditionFilter( + field: json['field'] as String?, + name: json['name'] as String?, + values: (json['values'] as List?) + ?.map((e) => PgcConditionValue.fromJson(e as Map)) + .toList(), + ); +} + +class PgcConditionOrder extends PgcCondition { + String? sort; + + PgcConditionOrder({super.field, super.name, this.sort}); + + factory PgcConditionOrder.fromJson(Map json) => + PgcConditionOrder( + field: json['field'] as String?, + name: json['name'] as String?, + sort: json['sort'] as String?, + ); +} diff --git a/lib/pages/pgc_index/controller.dart b/lib/pages/pgc_index/controller.dart index bae471893..5ba8beb62 100644 --- a/lib/pages/pgc_index/controller.dart +++ b/lib/pages/pgc_index/controller.dart @@ -1,7 +1,7 @@ -import 'package:PiliPlus/http/pgc.dart'; import 'package:PiliPlus/http/loading_state.dart'; +import 'package:PiliPlus/http/pgc.dart'; import 'package:PiliPlus/models_new/pgc/pgc_index_condition/data.dart'; -import 'package:PiliPlus/models_new/pgc/pgc_index_condition/filter.dart'; +import 'package:PiliPlus/models_new/pgc/pgc_index_condition/sort.dart'; import 'package:PiliPlus/models_new/pgc/pgc_index_result/data.dart'; import 'package:PiliPlus/models_new/pgc/pgc_index_result/list.dart'; import 'package:PiliPlus/pages/common/common_list_controller.dart'; diff --git a/lib/pages/pgc_index/view.dart b/lib/pages/pgc_index/view.dart index 5d89cfada..451b9c5c8 100644 --- a/lib/pages/pgc_index/view.dart +++ b/lib/pages/pgc_index/view.dart @@ -4,7 +4,8 @@ import 'package:PiliPlus/common/widgets/loading_widget/loading_widget.dart'; import 'package:PiliPlus/common/widgets/self_sized_horizontal_list.dart'; import 'package:PiliPlus/http/loading_state.dart'; import 'package:PiliPlus/models_new/pgc/pgc_index_condition/data.dart'; -import 'package:PiliPlus/models_new/pgc/pgc_index_condition/order.dart'; +import 'package:PiliPlus/models_new/pgc/pgc_index_condition/sort.dart'; +import 'package:PiliPlus/models_new/pgc/pgc_index_condition/value.dart'; import 'package:PiliPlus/models_new/pgc/pgc_index_result/list.dart'; import 'package:PiliPlus/pages/pgc_index/controller.dart'; import 'package:PiliPlus/pages/pgc_index/widgets/pgc_card_v_pgc_index.dart'; @@ -71,8 +72,8 @@ class _PgcIndexPageState extends State alignment: Alignment.topCenter, duration: const Duration(milliseconds: 200), child: count > 5 - ? Obx(() => _buildSortWidget(theme, count, response)) - : _buildSortWidget(theme, count, response), + ? Obx(() => _buildSortsWidget(theme, count, response)) + : _buildSortsWidget(theme, count, response), ), ), SliverPadding( @@ -99,6 +100,64 @@ class _PgcIndexPageState extends State } Widget _buildSortWidget( + ThemeData theme, + int index, + PgcIndexConditionData data, + item, + ) { + if (item case PgcConditionOrder e) { + return Obx( + () { + final isCurr = _ctr.indexParams['order'] == e.field; + return SearchText( + bgColor: isCurr + ? theme.colorScheme.secondaryContainer + : Colors.transparent, + textColor: isCurr + ? theme.colorScheme.onSecondaryContainer + : theme.colorScheme.onSurfaceVariant, + text: e.name!, + padding: const EdgeInsets.symmetric( + horizontal: 6, + vertical: 3, + ), + onTap: (_) => _ctr + ..indexParams['order'] = e.field + ..onReload(), + ); + }, + ); + } + if (item case PgcConditionValue e) { + final hasOrder = data.order?.isNotEmpty == true; + if (hasOrder) index -= 1; + final key = data.filter![index].field!; + return Obx( + () { + final isCurr = _ctr.indexParams[key] == e.keyword; + return SearchText( + bgColor: isCurr + ? theme.colorScheme.secondaryContainer + : Colors.transparent, + textColor: isCurr + ? theme.colorScheme.onSecondaryContainer + : theme.colorScheme.onSurfaceVariant, + text: e.name!, + padding: const EdgeInsets.symmetric( + horizontal: 6, + vertical: 3, + ), + onTap: (_) => _ctr + ..indexParams[key] = e.keyword + ..onReload(), + ); + }, + ); + } + throw UnsupportedError('${item.runtimeType}'); + } + + Widget _buildSortsWidget( ThemeData theme, int count, PgcIndexConditionData data, @@ -127,52 +186,11 @@ class _PgcIndexPageState extends State gapSize: 12, padding: const EdgeInsets.symmetric(horizontal: 12), childBuilder: (childIndex) { - final e = item[childIndex]; - return Obx( - () => SearchText( - bgColor: - (e is PgcConditionOrder - ? _ctr.indexParams['order'] - : _ctr.indexParams[data - .filter![data.order?.isNotEmpty == - true - ? index - 1 - : index] - .field]) == - (e is PgcConditionOrder ? e.field : e.keyword) - ? theme.colorScheme.secondaryContainer - : Colors.transparent, - textColor: - (e is PgcConditionOrder - ? _ctr.indexParams['order'] - : _ctr.indexParams[data - .filter![data.order?.isNotEmpty == - true - ? index - 1 - : index] - .field]) == - (e is PgcConditionOrder ? e.field : e.keyword) - ? theme.colorScheme.onSecondaryContainer - : theme.colorScheme.onSurfaceVariant, - text: e.name, - padding: const EdgeInsets.symmetric( - horizontal: 6, - vertical: 3, - ), - onTap: (_) { - String name = e is PgcConditionOrder - ? 'order' - : data - .filter![data.order?.isNotEmpty == true - ? index - 1 - : index] - .field!; - _ctr.indexParams[name] = (e is PgcConditionOrder - ? e.field - : e.keyword); - _ctr.onReload(); - }, - ), + return _buildSortWidget( + theme, + index, + data, + item[childIndex], ); }, itemCount: item!.length,