From e59d15f685501b1a2f07adfb7176bc625895a02d Mon Sep 17 00:00:00 2001 From: wgh19 Date: Wed, 15 May 2024 12:49:58 +0800 Subject: [PATCH] history feature --- lib/network/network.dart | 14 ++++++++++ lib/pages/history.dart | 55 ++++++++++++++++++++++++++++++++++++++++ lib/pages/main_page.dart | 7 +++++ 3 files changed, 76 insertions(+) create mode 100644 lib/pages/history.dart diff --git a/lib/network/network.dart b/lib/network/network.dart index 90c1a1b..474ebda 100644 --- a/lib/network/network.dart +++ b/lib/network/network.dart @@ -418,4 +418,18 @@ class Network { return Res.error(res.errorMessage); } } + + Future>> getHistory(int page) async { + String param = ""; + if(page > 1) { + param = "?offset=${30*(page-1)}"; + } + var res = await apiGet("/v1/user/browsing-history/illusts$param"); + if (res.success) { + return Res((res.data["illusts"] as List) + .map((e) => Illust.fromJson(e)).toList()); + } else { + return Res.error(res.errorMessage); + } + } } diff --git a/lib/pages/history.dart b/lib/pages/history.dart new file mode 100644 index 0000000..5c5049a --- /dev/null +++ b/lib/pages/history.dart @@ -0,0 +1,55 @@ +import 'package:fluent_ui/fluent_ui.dart'; +import 'package:flutter_staggered_grid_view/flutter_staggered_grid_view.dart'; +import 'package:pixes/appdata.dart'; +import 'package:pixes/components/loading.dart'; +import 'package:pixes/components/title_bar.dart'; +import 'package:pixes/foundation/app.dart'; +import 'package:pixes/network/models.dart'; +import 'package:pixes/network/network.dart'; +import 'package:pixes/utils/translation.dart'; + +import '../components/illust_widget.dart'; + +class HistoryPage extends StatefulWidget { + const HistoryPage({super.key}); + + @override + State createState() => _HistoryPageState(); +} + +class _HistoryPageState extends MultiPageLoadingState { + @override + Widget buildContent(BuildContext context, final List data) { + return Column( + children: [ + TitleBar(title: "History".tl), + Expanded( + child: LayoutBuilder(builder: (context, constrains){ + return MasonryGridView.builder( + padding: const EdgeInsets.symmetric(horizontal: 8) + + EdgeInsets.only(bottom: context.padding.bottom), + gridDelegate: const SliverSimpleGridDelegateWithMaxCrossAxisExtent( + maxCrossAxisExtent: 240, + ), + itemCount: data.length, + itemBuilder: (context, index) { + if(index == data.length - 1){ + nextPage(); + } + return IllustWidget(data[index]); + }, + ); + }), + ) + ], + ); + } + + @override + Future>> loadData(page) { + if(appdata.account?.user.isPremium != true) { + return Future.value(Res.error("Premium Required".tl)); + } + return Network().getHistory(page); + } +} diff --git a/lib/pages/main_page.dart b/lib/pages/main_page.dart index ce70adf..2e008ba 100644 --- a/lib/pages/main_page.dart +++ b/lib/pages/main_page.dart @@ -10,6 +10,7 @@ import "package:pixes/network/network.dart"; import "package:pixes/pages/bookmarks.dart"; import "package:pixes/pages/downloaded_page.dart"; import "package:pixes/pages/following_artworks.dart"; +import "package:pixes/pages/history.dart"; import "package:pixes/pages/ranking.dart"; import "package:pixes/pages/recommendation_page.dart"; import "package:pixes/pages/login_page.dart"; @@ -129,6 +130,11 @@ class _MainPageState extends State with WindowListener { title: Text('Following'.tl), body: const SizedBox.shrink(), ), + PaneItem( + icon: const Icon(MdIcons.history, size: 20), + title: Text('History'.tl), + body: const SizedBox.shrink(), + ), PaneItem( icon: const Icon(MdIcons.leaderboard_outlined, size: 20), title: Text('Ranking'.tl), @@ -166,6 +172,7 @@ class _MainPageState extends State with WindowListener { () => const RecommendationPage(), () => const BookMarkedArtworkPage(), () => const FollowingArtworksPage(), + () => const HistoryPage(), () => const RankingPage(), () => const SettingsPage(), ];