mirror of
https://github.com/bggRGjQaUbCoE/PiliPlus.git
synced 2026-06-02 00:58:19 +08:00
opt pgc index
Signed-off-by: bggRGjQaUbCoE <githubaccount56556@proton.me>
This commit is contained in:
@@ -1,5 +1,4 @@
|
|||||||
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_condition/order.dart';
|
|
||||||
|
|
||||||
class PgcIndexConditionData {
|
class PgcIndexConditionData {
|
||||||
List<PgcConditionFilter>? filter;
|
List<PgcConditionFilter>? filter;
|
||||||
|
|||||||
@@ -1,18 +0,0 @@
|
|||||||
import 'package:PiliPlus/models_new/pgc/pgc_index_condition/value.dart';
|
|
||||||
|
|
||||||
class PgcConditionFilter {
|
|
||||||
String? field;
|
|
||||||
String? name;
|
|
||||||
List<PgcConditionValue>? values;
|
|
||||||
|
|
||||||
PgcConditionFilter({this.field, this.name, this.values});
|
|
||||||
|
|
||||||
factory PgcConditionFilter.fromJson(Map<String, dynamic> json) =>
|
|
||||||
PgcConditionFilter(
|
|
||||||
field: json['field'] as String?,
|
|
||||||
name: json['name'] as String?,
|
|
||||||
values: (json['values'] as List<dynamic>?)
|
|
||||||
?.map((e) => PgcConditionValue.fromJson(e as Map<String, dynamic>))
|
|
||||||
.toList(),
|
|
||||||
);
|
|
||||||
}
|
|
||||||
@@ -1,14 +0,0 @@
|
|||||||
class PgcConditionOrder {
|
|
||||||
String? field;
|
|
||||||
String? name;
|
|
||||||
String? sort;
|
|
||||||
|
|
||||||
PgcConditionOrder({this.field, this.name, this.sort});
|
|
||||||
|
|
||||||
factory PgcConditionOrder.fromJson(Map<String, dynamic> json) =>
|
|
||||||
PgcConditionOrder(
|
|
||||||
field: json['field'] as String?,
|
|
||||||
name: json['name'] as String?,
|
|
||||||
sort: json['sort'] as String?,
|
|
||||||
);
|
|
||||||
}
|
|
||||||
39
lib/models_new/pgc/pgc_index_condition/sort.dart
Normal file
39
lib/models_new/pgc/pgc_index_condition/sort.dart
Normal file
@@ -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<PgcConditionValue>? values;
|
||||||
|
|
||||||
|
PgcConditionFilter({super.field, super.name, this.values});
|
||||||
|
|
||||||
|
factory PgcConditionFilter.fromJson(Map<String, dynamic> json) =>
|
||||||
|
PgcConditionFilter(
|
||||||
|
field: json['field'] as String?,
|
||||||
|
name: json['name'] as String?,
|
||||||
|
values: (json['values'] as List<dynamic>?)
|
||||||
|
?.map((e) => PgcConditionValue.fromJson(e as Map<String, dynamic>))
|
||||||
|
.toList(),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
class PgcConditionOrder extends PgcCondition {
|
||||||
|
String? sort;
|
||||||
|
|
||||||
|
PgcConditionOrder({super.field, super.name, this.sort});
|
||||||
|
|
||||||
|
factory PgcConditionOrder.fromJson(Map<String, dynamic> json) =>
|
||||||
|
PgcConditionOrder(
|
||||||
|
field: json['field'] as String?,
|
||||||
|
name: json['name'] as String?,
|
||||||
|
sort: json['sort'] as String?,
|
||||||
|
);
|
||||||
|
}
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
import 'package:PiliPlus/http/pgc.dart';
|
|
||||||
import 'package:PiliPlus/http/loading_state.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/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/data.dart';
|
||||||
import 'package:PiliPlus/models_new/pgc/pgc_index_result/list.dart';
|
import 'package:PiliPlus/models_new/pgc/pgc_index_result/list.dart';
|
||||||
import 'package:PiliPlus/pages/common/common_list_controller.dart';
|
import 'package:PiliPlus/pages/common/common_list_controller.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/common/widgets/self_sized_horizontal_list.dart';
|
||||||
import 'package:PiliPlus/http/loading_state.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/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/models_new/pgc/pgc_index_result/list.dart';
|
||||||
import 'package:PiliPlus/pages/pgc_index/controller.dart';
|
import 'package:PiliPlus/pages/pgc_index/controller.dart';
|
||||||
import 'package:PiliPlus/pages/pgc_index/widgets/pgc_card_v_pgc_index.dart';
|
import 'package:PiliPlus/pages/pgc_index/widgets/pgc_card_v_pgc_index.dart';
|
||||||
@@ -71,8 +72,8 @@ class _PgcIndexPageState extends State<PgcIndexPage>
|
|||||||
alignment: Alignment.topCenter,
|
alignment: Alignment.topCenter,
|
||||||
duration: const Duration(milliseconds: 200),
|
duration: const Duration(milliseconds: 200),
|
||||||
child: count > 5
|
child: count > 5
|
||||||
? Obx(() => _buildSortWidget(theme, count, response))
|
? Obx(() => _buildSortsWidget(theme, count, response))
|
||||||
: _buildSortWidget(theme, count, response),
|
: _buildSortsWidget(theme, count, response),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
SliverPadding(
|
SliverPadding(
|
||||||
@@ -99,6 +100,64 @@ class _PgcIndexPageState extends State<PgcIndexPage>
|
|||||||
}
|
}
|
||||||
|
|
||||||
Widget _buildSortWidget(
|
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,
|
ThemeData theme,
|
||||||
int count,
|
int count,
|
||||||
PgcIndexConditionData data,
|
PgcIndexConditionData data,
|
||||||
@@ -127,52 +186,11 @@ class _PgcIndexPageState extends State<PgcIndexPage>
|
|||||||
gapSize: 12,
|
gapSize: 12,
|
||||||
padding: const EdgeInsets.symmetric(horizontal: 12),
|
padding: const EdgeInsets.symmetric(horizontal: 12),
|
||||||
childBuilder: (childIndex) {
|
childBuilder: (childIndex) {
|
||||||
final e = item[childIndex];
|
return _buildSortWidget(
|
||||||
return Obx(
|
theme,
|
||||||
() => SearchText(
|
index,
|
||||||
bgColor:
|
data,
|
||||||
(e is PgcConditionOrder
|
item[childIndex],
|
||||||
? _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();
|
|
||||||
},
|
|
||||||
),
|
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
itemCount: item!.length,
|
itemCount: item!.length,
|
||||||
|
|||||||
Reference in New Issue
Block a user