improve ui

This commit is contained in:
wgh19
2024-06-13 20:54:31 +08:00
parent 593899af8c
commit 6cf9ce9c96
7 changed files with 104 additions and 40 deletions

View File

@@ -92,7 +92,7 @@ class _ImagePageState extends State<ImagePage> with WindowListener {
void showMenu() {
menuController.showFlyout(
barrierColor: Colors.transparent,
position: Offset(context.size!.width, 0),
position: App.isMobile ? Offset(context.size!.width, 0) : null,
builder: (context) => MenuFlyout(
items: [
MenuFlyoutItem(
@@ -100,10 +100,11 @@ class _ImagePageState extends State<ImagePage> with WindowListener {
onPressed: () async {
var file = await getFile();
if (file != null) {
var fileName = file.path.split('/').last;
var fileName = widget.urls[currentPage].split('/').last;
if (!fileName.contains('.')) {
fileName += getExtensionName();
}
print(fileName);
saveFile(file, fileName);
}
}),
@@ -113,7 +114,8 @@ class _ImagePageState extends State<ImagePage> with WindowListener {
onPressed: () async {
var file = await getFile();
if (file != null) {
var fileName = file.path.split('/').last;
var fileName =
widget.urls[currentPage].split('/').last;
if (!fileName.contains('.')) {
fileName += getExtensionName();
}
@@ -130,7 +132,7 @@ class _ImagePageState extends State<ImagePage> with WindowListener {
var file = await getFile();
if (file != null) {
var ext = getExtensionName();
var fileName = file.path.split('/').last;
var fileName = widget.urls[currentPage].split('/').last;
if (!fileName.contains('.')) {
fileName += ext;
}

View File

@@ -2,6 +2,7 @@ import "dart:async";
import "package:fluent_ui/fluent_ui.dart";
import "package:flutter/foundation.dart";
import "package:flutter/services.dart";
import "package:pixes/appdata.dart";
import "package:pixes/components/md.dart";
import "package:pixes/foundation/app.dart";
@@ -64,13 +65,17 @@ class MainPage extends StatefulWidget {
State<MainPage> createState() => _MainPageState();
}
class _MainPageState extends State<MainPage> with WindowListener {
class _MainPageState extends State<MainPage>
with WindowListener
implements PopEntry {
final navigatorKey = GlobalKey<NavigatorState>();
int index = 4;
int windowButtonKey = 0;
ModalRoute<dynamic>? _route;
@override
void initState() {
StateController.put<TitleBarController>(TitleBarController());
@@ -80,10 +85,22 @@ class _MainPageState extends State<MainPage> with WindowListener {
super.initState();
}
@override
void didChangeDependencies() {
super.didChangeDependencies();
final ModalRoute<dynamic>? nextRoute = ModalRoute.of(context);
if (nextRoute != _route) {
_route?.unregisterPopEntry(this);
_route = nextRoute;
_route?.registerPopEntry(this);
}
}
@override
void dispose() {
StateController.remove<TitleBarController>();
windowManager.removeListener(this);
ModalRoute.of(context)!.unregisterPopEntry(this);
super.dispose();
}
@@ -151,7 +168,7 @@ class _MainPageState extends State<MainPage> with WindowListener {
),
PaneItemSeparator(),
PaneItemHeader(
header: Text('${"Artwork".tl}/${"Manga".tl}')
header: Text('${"Illustrations".tl}/${"Manga".tl}')
.paddingBottom(4)
.paddingLeft(8)),
PaneItem(
@@ -209,10 +226,7 @@ class _MainPageState extends State<MainPage> with WindowListener {
),
],
),
paneBodyBuilder: (pane, child) => NavigatorPopHandler(
key: const Key("navigator"),
onPop: () => navigatorKey.currentState?.pop(),
child: MediaQuery.removePadding(
paneBodyBuilder: (pane, child) => MediaQuery.removePadding(
context: context,
removeTop: true,
child: Navigator(
@@ -220,7 +234,7 @@ class _MainPageState extends State<MainPage> with WindowListener {
onGenerateRoute: (settings) => AppPageRoute(
builder: (context) => const RecommendationPage()),
),
))),
)),
);
}
@@ -315,6 +329,25 @@ class _MainPageState extends State<MainPage> with WindowListener {
: null,
);
}
final popValue = ValueNotifier(false);
@override
ValueListenable<bool> get canPopNotifier => popValue;
@override
PopInvokedCallback? get onPopInvoked => onPop;
void onPop(bool value) {
print("ok");
if (App.rootNavigatorKey.currentState?.canPop() ?? false) {
App.rootNavigatorKey.currentState?.pop();
} else if (App.mainNavigatorKey?.currentState?.canPop() ?? false) {
App.mainNavigatorKey?.currentState?.pop();
} else {
SystemNavigator.pop();
}
}
}
class _BackButton extends StatefulWidget {

View File

@@ -45,7 +45,7 @@ class _RecommendationPageState extends State<RecommendationPage> {
title: "Explore".tl,
action: SegmentedButton<int>(
options: [
SegmentedButtonOption(0, "Artworks".tl),
SegmentedButtonOption(0, "Illustrations".tl),
SegmentedButtonOption(1, "Mangas".tl),
SegmentedButtonOption(2, "Users".tl),
],

View File

@@ -63,7 +63,7 @@ class _UserInfoPageState extends LoadingState<UserInfoPage, UserDetails> {
_RelatedUsers(widget.id),
buildInformation(),
buildArtworkHeader(),
if (page == 2)
if (page == 4)
_UserNovels(widget.id)
else
_UserArtworks(
@@ -228,8 +228,10 @@ class _UserInfoPageState extends LoadingState<UserInfoPage, UserDetails> {
SegmentedButton<int>(
options: [
SegmentedButtonOption(0, "Artworks".tl),
SegmentedButtonOption(1, "Bookmarks".tl),
SegmentedButtonOption(2, "Novels".tl),
SegmentedButtonOption(1, "Illustrations".tl),
SegmentedButtonOption(2, "Mangas".tl),
SegmentedButtonOption(3, "Bookmarks".tl),
SegmentedButtonOption(4, "Novels".tl),
],
value: page,
onPressed: (value) {
@@ -239,15 +241,24 @@ class _UserInfoPageState extends LoadingState<UserInfoPage, UserDetails> {
},
),
const Spacer(),
if (page != 2)
if (page != 4)
BatchDownloadButton(
request: () {
if (page == 0) {
return Network().getUserIllusts(data!.id.toString());
} else {
return Network()
.getUserBookmarks(data!.id.toString());
switch (page) {
case 0:
return Network()
.getUserIllusts(data!.id.toString(), null);
case 1:
return Network()
.getUserIllusts(data!.id.toString(), "illust");
case 2:
return Network()
.getUserIllusts(data!.id.toString(), "manga");
case 3:
return Network()
.getUserBookmarks(data!.id.toString());
}
throw "Invalid page";
},
),
],
@@ -269,14 +280,14 @@ class _UserInfoPageState extends LoadingState<UserInfoPage, UserDetails> {
margin: const EdgeInsets.symmetric(horizontal: 12, vertical: 2),
padding: EdgeInsets.zero,
child: ListTile(
leading: icon == null
? null
: Icon(
icon,
size: 20,
),
title: Text(title),
subtitle: SelectableText(content),
title: Row(
children: [
Icon(icon, size: 20),
const SizedBox(width: 8),
Text(title)
],
),
subtitle: SelectableText(content).paddingLeft(icon == null ? 0 : 28),
trailing: trailing,
),
);
@@ -409,8 +420,9 @@ class _UserArtworksState extends MultiPageLoadingState<_UserArtworks, Illust> {
return Res.error("No more data");
}
var res = nextUrl == null
? (widget.type == 0
? await Network().getUserIllusts(widget.uid)
? (widget.type != 3
? await Network().getUserIllusts(
widget.uid, [null, "illust", "manga"][widget.type])
: await Network().getUserBookmarks(widget.uid))
: await Network().getIllustsWithNextUrl(nextUrl!);
if (!res.error) {
@@ -422,7 +434,7 @@ class _UserArtworksState extends MultiPageLoadingState<_UserArtworks, Illust> {
}
class _UserNovels extends StatefulWidget {
const _UserNovels(this.uid, {super.key});
const _UserNovels(this.uid);
final String uid;
@@ -534,7 +546,7 @@ class _RelatedUsersState
return UserPreviewWidget(data[index]).fixWidth(342);
},
));
if (MediaQuery.of(context).size.width > 500) {
if (App.isDesktop) {
content = ScrollbarTheme.merge(
data: const ScrollbarThemeData(
thickness: 6,
@@ -542,7 +554,21 @@ class _RelatedUsersState
mainAxisMargin: 4,
hoveringPadding: EdgeInsets.zero,
padding: EdgeInsets.zero,
hoveringMainAxisMargin: 4),
hoveringMainAxisMargin: 4,
crossAxisMargin: 0,
hoveringCrossAxisMargin: 0),
child: content);
} else {
content = ScrollbarTheme.merge(
data: const ScrollbarThemeData(
thickness: 4,
hoveringThickness: 4,
mainAxisMargin: 4,
hoveringPadding: EdgeInsets.zero,
padding: EdgeInsets.zero,
hoveringMainAxisMargin: 4,
crossAxisMargin: 0,
hoveringCrossAxisMargin: 0),
child: content);
}
return MediaQuery.removePadding(