mirror of
https://github.com/wgh136/pixes.git
synced 2025-09-27 12:57:24 +00:00
Compare commits
12 Commits
Author | SHA1 | Date | |
---|---|---|---|
cbc69b4707 | |||
1e53e374e4 | |||
0756ebe4e5 | |||
47ebe9deec | |||
37f84efe05 | |||
6530f2c57d | |||
a3e758831b | |||
3e5ae0a39a | |||
974f739900 | |||
deb866da63 | |||
eea77b297a | |||
264c2b0e20 |
2
.github/workflows/main.yml
vendored
2
.github/workflows/main.yml
vendored
@@ -15,7 +15,7 @@ jobs:
|
|||||||
channel: 'stable'
|
channel: 'stable'
|
||||||
architecture: x64
|
architecture: x64
|
||||||
flutter-version-file: pubspec.yaml
|
flutter-version-file: pubspec.yaml
|
||||||
- run: sudo xcode-select --switch /Applications/Xcode_14.3.1.app
|
- run: sudo xcode-select --switch /Applications/Xcode_16.0.app
|
||||||
- run: flutter pub get
|
- run: flutter pub get
|
||||||
- run: flutter build macos --release
|
- run: flutter build macos --release
|
||||||
- run: |
|
- run: |
|
||||||
|
@@ -4,6 +4,8 @@ plugins {
|
|||||||
id "dev.flutter.flutter-gradle-plugin"
|
id "dev.flutter.flutter-gradle-plugin"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ext.abiCodes = ["armeabi-v7a": 1, "arm64-v8a": 2, "x86_64": 3]
|
||||||
|
|
||||||
def localProperties = new Properties()
|
def localProperties = new Properties()
|
||||||
def localPropertiesFile = rootProject.file('local.properties')
|
def localPropertiesFile = rootProject.file('local.properties')
|
||||||
if (localPropertiesFile.exists()) {
|
if (localPropertiesFile.exists()) {
|
||||||
@@ -33,6 +35,15 @@ android {
|
|||||||
compileSdk flutter.compileSdkVersion
|
compileSdk flutter.compileSdkVersion
|
||||||
ndkVersion flutter.ndkVersion
|
ndkVersion flutter.ndkVersion
|
||||||
|
|
||||||
|
splits{
|
||||||
|
abi {
|
||||||
|
reset()
|
||||||
|
include 'armeabi-v7a', 'arm64-v8a', 'x86_64'
|
||||||
|
enable true
|
||||||
|
universalApk true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
compileOptions {
|
compileOptions {
|
||||||
sourceCompatibility = JavaVersion.VERSION_17
|
sourceCompatibility = JavaVersion.VERSION_17
|
||||||
targetCompatibility = JavaVersion.VERSION_17
|
targetCompatibility = JavaVersion.VERSION_17
|
||||||
@@ -68,7 +79,25 @@ android {
|
|||||||
|
|
||||||
buildTypes {
|
buildTypes {
|
||||||
release {
|
release {
|
||||||
|
ndk {
|
||||||
|
abiFilters "armeabi-v7a", "arm64-v8a", "x86_64"
|
||||||
|
}
|
||||||
signingConfig signingConfigs.release
|
signingConfig signingConfigs.release
|
||||||
|
applicationVariants.all { variant ->
|
||||||
|
variant.outputs.all { output ->
|
||||||
|
def abi = output.getFilter(com.android.build.OutputFile.ABI)
|
||||||
|
if (abi != null) {
|
||||||
|
outputFileName = "pixes-${variant.versionName}-${abi}.apk"
|
||||||
|
def abiVersionCode = project.ext.abiCodes.get(abi)
|
||||||
|
if (abiVersionCode != null) {
|
||||||
|
versionCodeOverride = variant.versionCode * 10 + abiVersionCode
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
outputFileName = "pixes-${variant.versionName}.apk"
|
||||||
|
versionCodeOverride = variant.versionCode * 10
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
2
debian/gui/pixes.desktop
vendored
2
debian/gui/pixes.desktop
vendored
@@ -1,5 +1,4 @@
|
|||||||
[Desktop Entry]
|
[Desktop Entry]
|
||||||
Version={{Version}}
|
|
||||||
Name=Pixes
|
Name=Pixes
|
||||||
GenericName=Pixes
|
GenericName=Pixes
|
||||||
Comment=Unofficial pixiv application
|
Comment=Unofficial pixiv application
|
||||||
@@ -8,3 +7,4 @@ Type=Application
|
|||||||
Categories=Utility
|
Categories=Utility
|
||||||
Keywords=Flutter;share;images;
|
Keywords=Flutter;share;images;
|
||||||
MimeType=x-scheme-handler/pixiv;
|
MimeType=x-scheme-handler/pixiv;
|
||||||
|
Icon=pixes
|
@@ -152,6 +152,7 @@ abstract class MultiPageLoadingState<T extends StatefulWidget, S extends Object>
|
|||||||
|
|
||||||
void firstLoad() {
|
void firstLoad() {
|
||||||
loadData(_page).then((value) {
|
loadData(_page).then((value) {
|
||||||
|
if (!mounted) return;
|
||||||
if(value.success) {
|
if(value.success) {
|
||||||
_page++;
|
_page++;
|
||||||
setState(() {
|
setState(() {
|
||||||
|
@@ -20,6 +20,7 @@ class AppPageRoute<T> extends PageRoute<T> with _AppRouteTransitionMixin {
|
|||||||
super.barrierDismissible = false,
|
super.barrierDismissible = false,
|
||||||
this.enableIOSGesture = true,
|
this.enableIOSGesture = true,
|
||||||
this.preventRebuild = true,
|
this.preventRebuild = true,
|
||||||
|
this.isRoot = false,
|
||||||
}) {
|
}) {
|
||||||
assert(opaque);
|
assert(opaque);
|
||||||
}
|
}
|
||||||
@@ -44,6 +45,9 @@ class AppPageRoute<T> extends PageRoute<T> with _AppRouteTransitionMixin {
|
|||||||
@override
|
@override
|
||||||
final bool preventRebuild;
|
final bool preventRebuild;
|
||||||
|
|
||||||
|
@override
|
||||||
|
final bool isRoot;
|
||||||
|
|
||||||
static void updateBackButton() {
|
static void updateBackButton() {
|
||||||
Future.delayed(const Duration(milliseconds: 300), () {
|
Future.delayed(const Duration(milliseconds: 300), () {
|
||||||
StateController.findOrNull(tag: "back_button")?.update();
|
StateController.findOrNull(tag: "back_button")?.update();
|
||||||
@@ -77,6 +81,8 @@ mixin _AppRouteTransitionMixin<T> on PageRoute<T> {
|
|||||||
|
|
||||||
Widget? _child;
|
Widget? _child;
|
||||||
|
|
||||||
|
bool get isRoot;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget buildPage(
|
Widget buildPage(
|
||||||
BuildContext context,
|
BuildContext context,
|
||||||
@@ -115,7 +121,13 @@ mixin _AppRouteTransitionMixin<T> on PageRoute<T> {
|
|||||||
@override
|
@override
|
||||||
Widget buildTransitions(BuildContext context, Animation<double> animation,
|
Widget buildTransitions(BuildContext context, Animation<double> animation,
|
||||||
Animation<double> secondaryAnimation, Widget child) {
|
Animation<double> secondaryAnimation, Widget child) {
|
||||||
return DrillInPageTransition(
|
child = ColoredBox(
|
||||||
|
color: FluentTheme.of(context).micaBackgroundColor,
|
||||||
|
child: child,
|
||||||
|
);
|
||||||
|
|
||||||
|
if (isRoot) {
|
||||||
|
child = EntrancePageTransition(
|
||||||
animation: CurvedAnimation(
|
animation: CurvedAnimation(
|
||||||
parent: animation,
|
parent: animation,
|
||||||
curve: FluentTheme.of(context).animationCurve,
|
curve: FluentTheme.of(context).animationCurve,
|
||||||
@@ -128,6 +140,25 @@ mixin _AppRouteTransitionMixin<T> on PageRoute<T> {
|
|||||||
child: child)
|
child: child)
|
||||||
: child,
|
: child,
|
||||||
);
|
);
|
||||||
|
} else {
|
||||||
|
child = DrillInPageTransition(
|
||||||
|
animation: CurvedAnimation(
|
||||||
|
parent: animation,
|
||||||
|
curve: FluentTheme
|
||||||
|
.of(context)
|
||||||
|
.animationCurve,
|
||||||
|
),
|
||||||
|
child: enableIOSGesture && App.isIOS
|
||||||
|
? IOSBackGestureDetector(
|
||||||
|
gestureWidth: _kBackGestureWidth,
|
||||||
|
enabledCallback: () => _isPopGestureEnabled<T>(this),
|
||||||
|
onStartPopGesture: () => _startPopGesture(this),
|
||||||
|
child: child)
|
||||||
|
: child,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
return child;
|
||||||
}
|
}
|
||||||
|
|
||||||
IOSBackGestureController _startPopGesture(PageRoute<T> route) {
|
IOSBackGestureController _startPopGesture(PageRoute<T> route) {
|
||||||
@@ -388,3 +419,32 @@ class SideBarRoute<T> extends PopupRoute<T> {
|
|||||||
return IOSBackGestureController(route.controller!, route.navigator!);
|
return IOSBackGestureController(route.controller!, route.navigator!);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class EntrancePageTransition extends StatelessWidget {
|
||||||
|
/// Creates an entrance page transition
|
||||||
|
const EntrancePageTransition({
|
||||||
|
super.key,
|
||||||
|
required this.child,
|
||||||
|
required this.animation,
|
||||||
|
});
|
||||||
|
|
||||||
|
/// The widget to be animated
|
||||||
|
final Widget child;
|
||||||
|
|
||||||
|
/// The animation to drive this transition
|
||||||
|
final Animation<double> animation;
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
return SlideTransition(
|
||||||
|
position: Tween<Offset>(
|
||||||
|
begin: const Offset(0, 0.1),
|
||||||
|
end: Offset.zero,
|
||||||
|
).animate(animation),
|
||||||
|
child: FadeTransition(
|
||||||
|
opacity: animation,
|
||||||
|
child: child,
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@@ -35,15 +35,15 @@ extension NovelExt on Network {
|
|||||||
return getNovelsWithNextUrl(url);
|
return getNovelsWithNextUrl(url);
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<Res<List<Novel>>> getBookmarkedNovels(String uid) {
|
Future<Res<List<Novel>>> getBookmarkedNovels(String uid, bool public) {
|
||||||
return getNovelsWithNextUrl(
|
return getNovelsWithNextUrl(
|
||||||
"/v1/user/bookmarks/novel?user_id=$uid&restrict=public");
|
"/v1/user/bookmarks/novel?user_id=$uid&restrict=${public ? "public" : "private"}");
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<Res<bool>> favoriteNovel(String id) async {
|
Future<Res<bool>> favoriteNovel(String id, bool public) async {
|
||||||
var res = await apiPost("/v2/novel/bookmark/add", data: {
|
var res = await apiPost("/v2/novel/bookmark/add", data: {
|
||||||
"novel_id": id,
|
"novel_id": id,
|
||||||
"restrict": "public",
|
"restrict": public ? "public" : "private",
|
||||||
});
|
});
|
||||||
if (res.error) {
|
if (res.error) {
|
||||||
return Res.fromErrorRes(res);
|
return Res.fromErrorRes(res);
|
||||||
@@ -149,4 +149,17 @@ extension NovelExt on Network {
|
|||||||
}
|
}
|
||||||
return Res(Novel.fromJson(res.data["novel"]));
|
return Res(Novel.fromJson(res.data["novel"]));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Future<Res<List<Novel>>> getFollowingNovels(String restrict,
|
||||||
|
[String? nextUrl]) async {
|
||||||
|
var res = await apiGet(nextUrl ?? "/v1/novel/follow?restrict=$restrict");
|
||||||
|
if (res.success) {
|
||||||
|
return Res(
|
||||||
|
(res.data["novels"] as List).map((e) => Novel.fromJson(e)).toList(),
|
||||||
|
subData: res.data["next_url"],
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
return Res.error(res.errorMessage);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
83
lib/pages/following_novels_page.dart
Normal file
83
lib/pages/following_novels_page.dart
Normal file
@@ -0,0 +1,83 @@
|
|||||||
|
import 'package:fluent_ui/fluent_ui.dart';
|
||||||
|
import 'package:pixes/components/grid.dart';
|
||||||
|
import 'package:pixes/components/loading.dart';
|
||||||
|
import 'package:pixes/components/novel.dart';
|
||||||
|
import 'package:pixes/components/segmented_button.dart';
|
||||||
|
import 'package:pixes/components/title_bar.dart';
|
||||||
|
import 'package:pixes/foundation/widget_utils.dart';
|
||||||
|
import 'package:pixes/network/network.dart';
|
||||||
|
import 'package:pixes/utils/translation.dart';
|
||||||
|
|
||||||
|
class FollowingNovelsPage extends StatefulWidget {
|
||||||
|
const FollowingNovelsPage({super.key});
|
||||||
|
|
||||||
|
@override
|
||||||
|
State<FollowingNovelsPage> createState() => _FollowingNovelsPageState();
|
||||||
|
}
|
||||||
|
|
||||||
|
class _FollowingNovelsPageState
|
||||||
|
extends MultiPageLoadingState<FollowingNovelsPage, Novel> {
|
||||||
|
bool public = true;
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget? buildFrame(BuildContext context, Widget child) {
|
||||||
|
return Column(
|
||||||
|
children: [
|
||||||
|
TitleBar(
|
||||||
|
title: "Following".tl,
|
||||||
|
action: SegmentedButton(
|
||||||
|
options: [
|
||||||
|
SegmentedButtonOption("public", "Public".tl),
|
||||||
|
SegmentedButtonOption("private", "Private".tl),
|
||||||
|
],
|
||||||
|
onPressed: (key) {
|
||||||
|
var newPublic = key == "public";
|
||||||
|
if (newPublic != public) {
|
||||||
|
public = newPublic;
|
||||||
|
nextUrl = null;
|
||||||
|
reset();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
value: public ? "public" : "private",
|
||||||
|
),
|
||||||
|
),
|
||||||
|
Expanded(
|
||||||
|
child: child,
|
||||||
|
)
|
||||||
|
],
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget buildContent(BuildContext context, List<Novel> data) {
|
||||||
|
return Column(
|
||||||
|
children: [
|
||||||
|
Expanded(
|
||||||
|
child: GridViewWithFixedItemHeight(
|
||||||
|
itemCount: data.length,
|
||||||
|
itemHeight: 164,
|
||||||
|
minCrossAxisExtent: 400,
|
||||||
|
builder: (context, index) {
|
||||||
|
if (index == data.length - 1) {
|
||||||
|
nextPage();
|
||||||
|
}
|
||||||
|
return NovelWidget(data[index]);
|
||||||
|
},
|
||||||
|
).paddingHorizontal(8),
|
||||||
|
)
|
||||||
|
],
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
String? nextUrl;
|
||||||
|
|
||||||
|
@override
|
||||||
|
Future<Res<List<Novel>>> loadData(int page) async {
|
||||||
|
if (nextUrl == "end") return Res.error("No more data");
|
||||||
|
var res = nextUrl == null
|
||||||
|
? await Network().getFollowingNovels(public ? "public" : "private")
|
||||||
|
: await Network().getNovelsWithNextUrl(nextUrl!);
|
||||||
|
nextUrl = res.subData ?? "end";
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
}
|
@@ -11,6 +11,7 @@ import "package:pixes/network/network.dart";
|
|||||||
import "package:pixes/pages/bookmarks.dart";
|
import "package:pixes/pages/bookmarks.dart";
|
||||||
import "package:pixes/pages/downloaded_page.dart";
|
import "package:pixes/pages/downloaded_page.dart";
|
||||||
import "package:pixes/pages/following_artworks.dart";
|
import "package:pixes/pages/following_artworks.dart";
|
||||||
|
import "package:pixes/pages/following_novels_page.dart";
|
||||||
import "package:pixes/pages/history.dart";
|
import "package:pixes/pages/history.dart";
|
||||||
import "package:pixes/pages/novel_bookmarks_page.dart";
|
import "package:pixes/pages/novel_bookmarks_page.dart";
|
||||||
import "package:pixes/pages/novel_ranking_page.dart";
|
import "package:pixes/pages/novel_ranking_page.dart";
|
||||||
@@ -209,11 +210,15 @@ class _MainPageState extends State<MainPage>
|
|||||||
body: const SizedBox.shrink(),
|
body: const SizedBox.shrink(),
|
||||||
),
|
),
|
||||||
PaneItem(
|
PaneItem(
|
||||||
icon:
|
icon: const Icon(MdIcons.collections_bookmark_outlined, size: 20),
|
||||||
const Icon(MdIcons.collections_bookmark_outlined, size: 20),
|
|
||||||
title: Text('Bookmarks'.tl),
|
title: Text('Bookmarks'.tl),
|
||||||
body: const SizedBox.shrink(),
|
body: const SizedBox.shrink(),
|
||||||
),
|
),
|
||||||
|
PaneItem(
|
||||||
|
icon: const Icon(MdIcons.interests_outlined, size: 20),
|
||||||
|
title: Text('Following'.tl),
|
||||||
|
body: const SizedBox.shrink(),
|
||||||
|
),
|
||||||
PaneItem(
|
PaneItem(
|
||||||
icon: const Icon(MdIcons.leaderboard_outlined, size: 20),
|
icon: const Icon(MdIcons.leaderboard_outlined, size: 20),
|
||||||
title: Text('Ranking'.tl),
|
title: Text('Ranking'.tl),
|
||||||
@@ -233,11 +238,12 @@ class _MainPageState extends State<MainPage>
|
|||||||
child: Navigator(
|
child: Navigator(
|
||||||
key: navigatorKey,
|
key: navigatorKey,
|
||||||
onGenerateRoute: (settings) => AppPageRoute(
|
onGenerateRoute: (settings) => AppPageRoute(
|
||||||
builder: (context) =>
|
isRoot: true,
|
||||||
pageBuilders.elementAtOrNull(index)!(),
|
builder: (context) => pageBuilders.elementAtOrNull(index)!(),
|
||||||
|
),
|
||||||
|
),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
)),
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -253,6 +259,7 @@ class _MainPageState extends State<MainPage>
|
|||||||
() => const RankingPage(),
|
() => const RankingPage(),
|
||||||
() => const NovelRecommendationPage(),
|
() => const NovelRecommendationPage(),
|
||||||
() => const NovelBookmarksPage(),
|
() => const NovelBookmarksPage(),
|
||||||
|
() => const FollowingNovelsPage(),
|
||||||
() => const NovelRankingPage(),
|
() => const NovelRankingPage(),
|
||||||
() => const SettingsPage(),
|
() => const SettingsPage(),
|
||||||
];
|
];
|
||||||
@@ -263,7 +270,12 @@ class _MainPageState extends State<MainPage>
|
|||||||
child: Text("Invalid Page: $index"),
|
child: Text("Invalid Page: $index"),
|
||||||
);
|
);
|
||||||
navigatorKey.currentState!.pushAndRemoveUntil(
|
navigatorKey.currentState!.pushAndRemoveUntil(
|
||||||
AppPageRoute(builder: (context) => page()), (route) => false);
|
AppPageRoute(
|
||||||
|
builder: (context) => page(),
|
||||||
|
isRoot: true,
|
||||||
|
),
|
||||||
|
(route) => false,
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
NavigationAppBar buildAppBar(
|
NavigationAppBar buildAppBar(
|
||||||
|
@@ -3,6 +3,7 @@ import 'package:pixes/appdata.dart';
|
|||||||
import 'package:pixes/components/grid.dart';
|
import 'package:pixes/components/grid.dart';
|
||||||
import 'package:pixes/components/loading.dart';
|
import 'package:pixes/components/loading.dart';
|
||||||
import 'package:pixes/components/novel.dart';
|
import 'package:pixes/components/novel.dart';
|
||||||
|
import 'package:pixes/components/segmented_button.dart';
|
||||||
import 'package:pixes/components/title_bar.dart';
|
import 'package:pixes/components/title_bar.dart';
|
||||||
import 'package:pixes/foundation/widget_utils.dart';
|
import 'package:pixes/foundation/widget_utils.dart';
|
||||||
import 'package:pixes/network/network.dart';
|
import 'package:pixes/network/network.dart';
|
||||||
@@ -17,11 +18,41 @@ class NovelBookmarksPage extends StatefulWidget {
|
|||||||
|
|
||||||
class _NovelBookmarksPageState
|
class _NovelBookmarksPageState
|
||||||
extends MultiPageLoadingState<NovelBookmarksPage, Novel> {
|
extends MultiPageLoadingState<NovelBookmarksPage, Novel> {
|
||||||
|
bool public = true;
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget? buildFrame(BuildContext context, Widget child) {
|
||||||
|
return Column(
|
||||||
|
children: [
|
||||||
|
TitleBar(
|
||||||
|
title: "Bookmarks".tl,
|
||||||
|
action: SegmentedButton(
|
||||||
|
options: [
|
||||||
|
SegmentedButtonOption("public", "Public".tl),
|
||||||
|
SegmentedButtonOption("private", "Private".tl),
|
||||||
|
],
|
||||||
|
onPressed: (key) {
|
||||||
|
var newPublic = key == "public";
|
||||||
|
if (newPublic != public) {
|
||||||
|
public = newPublic;
|
||||||
|
nextUrl = null;
|
||||||
|
reset();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
value: public ? "public" : "private",
|
||||||
|
),
|
||||||
|
),
|
||||||
|
Expanded(
|
||||||
|
child: child,
|
||||||
|
)
|
||||||
|
],
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget buildContent(BuildContext context, List<Novel> data) {
|
Widget buildContent(BuildContext context, List<Novel> data) {
|
||||||
return Column(
|
return Column(
|
||||||
children: [
|
children: [
|
||||||
TitleBar(title: "Bookmarks".tl),
|
|
||||||
Expanded(
|
Expanded(
|
||||||
child: GridViewWithFixedItemHeight(
|
child: GridViewWithFixedItemHeight(
|
||||||
itemCount: data.length,
|
itemCount: data.length,
|
||||||
@@ -45,7 +76,7 @@ class _NovelBookmarksPageState
|
|||||||
Future<Res<List<Novel>>> loadData(int page) async {
|
Future<Res<List<Novel>>> loadData(int page) async {
|
||||||
if (nextUrl == "end") return Res.error("No more data");
|
if (nextUrl == "end") return Res.error("No more data");
|
||||||
var res = nextUrl == null
|
var res = nextUrl == null
|
||||||
? await Network().getBookmarkedNovels(appdata.account!.user.id)
|
? await Network().getBookmarkedNovels(appdata.account!.user.id, public)
|
||||||
: await Network().getNovelsWithNextUrl(nextUrl!);
|
: await Network().getNovelsWithNextUrl(nextUrl!);
|
||||||
nextUrl = res.subData ?? "end";
|
nextUrl = res.subData ?? "end";
|
||||||
return res;
|
return res;
|
||||||
|
@@ -121,18 +121,18 @@ class _NovelPageState extends State<NovelPage> {
|
|||||||
padding: const EdgeInsets.only(bottom: 10),
|
padding: const EdgeInsets.only(bottom: 10),
|
||||||
child: Row(
|
child: Row(
|
||||||
children: [
|
children: [
|
||||||
const SizedBox(
|
const SizedBox(width: 2),
|
||||||
width: 2,
|
|
||||||
),
|
|
||||||
Expanded(
|
Expanded(
|
||||||
child: Container(
|
child: Container(
|
||||||
height: 68,
|
height: 68,
|
||||||
decoration: BoxDecoration(
|
decoration: BoxDecoration(
|
||||||
border: Border.all(
|
border: Border.all(
|
||||||
color: ColorScheme.of(context).outlineVariant,
|
color: ColorScheme.of(context).outlineVariant,
|
||||||
width: 0.6),
|
width: 0.6,
|
||||||
borderRadius: BorderRadius.circular(4)),
|
),
|
||||||
padding: const EdgeInsets.symmetric(horizontal: 12, vertical: 4),
|
borderRadius: BorderRadius.circular(4),
|
||||||
|
),
|
||||||
|
padding: const EdgeInsets.symmetric(horizontal: 8, vertical: 4),
|
||||||
child: Row(
|
child: Row(
|
||||||
children: [
|
children: [
|
||||||
Column(
|
Column(
|
||||||
@@ -148,31 +148,31 @@ class _NovelPageState extends State<NovelPage> {
|
|||||||
)
|
)
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
const SizedBox(
|
const SizedBox(width: 8),
|
||||||
width: 12,
|
|
||||||
),
|
|
||||||
Text(
|
Text(
|
||||||
widget.novel.totalViews.toString(),
|
widget.novel.totalViews.toString(),
|
||||||
style: TextStyle(
|
style: TextStyle(
|
||||||
color: ColorScheme.of(context).primary,
|
color: ColorScheme.of(context).primary,
|
||||||
fontWeight: FontWeight.w500,
|
fontWeight: FontWeight.w500,
|
||||||
fontSize: 18),
|
fontSize: 18,
|
||||||
|
),
|
||||||
)
|
)
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
const SizedBox(
|
const SizedBox(width: 16),
|
||||||
width: 16,
|
|
||||||
),
|
|
||||||
Expanded(
|
Expanded(
|
||||||
child: Container(
|
child: Container(
|
||||||
height: 68,
|
height: 68,
|
||||||
decoration: BoxDecoration(
|
decoration: BoxDecoration(
|
||||||
border: Border.all(
|
border: Border.all(
|
||||||
color: ColorScheme.of(context).outlineVariant, width: 0.6),
|
color: ColorScheme.of(context).outlineVariant,
|
||||||
borderRadius: BorderRadius.circular(4)),
|
width: 0.6,
|
||||||
padding: const EdgeInsets.symmetric(horizontal: 12, vertical: 4),
|
),
|
||||||
|
borderRadius: BorderRadius.circular(4),
|
||||||
|
),
|
||||||
|
padding: const EdgeInsets.symmetric(horizontal: 8, vertical: 4),
|
||||||
child: Row(
|
child: Row(
|
||||||
children: [
|
children: [
|
||||||
Column(
|
Column(
|
||||||
@@ -188,22 +188,19 @@ class _NovelPageState extends State<NovelPage> {
|
|||||||
)
|
)
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
const SizedBox(
|
const SizedBox(width: 8),
|
||||||
width: 12,
|
|
||||||
),
|
|
||||||
Text(
|
Text(
|
||||||
widget.novel.totalBookmarks.toString(),
|
widget.novel.totalBookmarks.toString(),
|
||||||
style: TextStyle(
|
style: TextStyle(
|
||||||
color: ColorScheme.of(context).primary,
|
color: ColorScheme.of(context).primary,
|
||||||
fontWeight: FontWeight.w500,
|
fontWeight: FontWeight.w500,
|
||||||
fontSize: 18),
|
fontSize: 18,
|
||||||
|
),
|
||||||
)
|
)
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
)),
|
)),
|
||||||
const SizedBox(
|
const SizedBox(width: 2),
|
||||||
width: 2,
|
|
||||||
),
|
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
@@ -241,15 +238,20 @@ class _NovelPageState extends State<NovelPage> {
|
|||||||
),
|
),
|
||||||
),
|
),
|
||||||
const SizedBox(width: 12),
|
const SizedBox(width: 12),
|
||||||
Column(
|
Expanded(
|
||||||
|
child: Column(
|
||||||
crossAxisAlignment: CrossAxisAlignment.start,
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
mainAxisAlignment: MainAxisAlignment.center,
|
mainAxisAlignment: MainAxisAlignment.center,
|
||||||
children: [
|
children: [
|
||||||
Text(widget.novel.author.name,
|
Text(
|
||||||
|
widget.novel.author.name,
|
||||||
style: const TextStyle(
|
style: const TextStyle(
|
||||||
fontSize: 14,
|
fontSize: 14,
|
||||||
fontWeight: FontWeight.bold,
|
fontWeight: FontWeight.bold,
|
||||||
)),
|
),
|
||||||
|
maxLines: 1,
|
||||||
|
overflow: TextOverflow.ellipsis,
|
||||||
|
),
|
||||||
Text(
|
Text(
|
||||||
widget.novel.createDate.toString().substring(0, 10),
|
widget.novel.createDate.toString().substring(0, 10),
|
||||||
style: TextStyle(
|
style: TextStyle(
|
||||||
@@ -259,7 +261,7 @@ class _NovelPageState extends State<NovelPage> {
|
|||||||
),
|
),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
const Spacer(),
|
),
|
||||||
const Icon(MdIcons.chevron_right)
|
const Icon(MdIcons.chevron_right)
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
@@ -271,15 +273,44 @@ class _NovelPageState extends State<NovelPage> {
|
|||||||
|
|
||||||
bool isAddingFavorite = false;
|
bool isAddingFavorite = false;
|
||||||
|
|
||||||
|
var favoriteFlyout = FlyoutController();
|
||||||
|
|
||||||
Widget buildActions() {
|
Widget buildActions() {
|
||||||
void favorite() async {
|
void favorite() async {
|
||||||
if (isAddingFavorite) return;
|
if (isAddingFavorite) return;
|
||||||
|
bool? public;
|
||||||
|
if (!widget.novel.isBookmarked) {
|
||||||
|
await favoriteFlyout.showFlyout(
|
||||||
|
navigatorKey: App.rootNavigatorKey.currentState!,
|
||||||
|
builder: (context) {
|
||||||
|
return MenuFlyout(
|
||||||
|
items: [
|
||||||
|
MenuFlyoutItem(
|
||||||
|
text: Text("Public".tl),
|
||||||
|
onPressed: () {
|
||||||
|
public = true;
|
||||||
|
},
|
||||||
|
),
|
||||||
|
MenuFlyoutItem(
|
||||||
|
text: Text("Private".tl),
|
||||||
|
onPressed: () {
|
||||||
|
public = false;
|
||||||
|
},
|
||||||
|
),
|
||||||
|
],
|
||||||
|
);
|
||||||
|
},
|
||||||
|
);
|
||||||
|
if (public == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
setState(() {
|
setState(() {
|
||||||
isAddingFavorite = true;
|
isAddingFavorite = true;
|
||||||
});
|
});
|
||||||
var res = widget.novel.isBookmarked
|
var res = widget.novel.isBookmarked
|
||||||
? await Network().deleteFavoriteNovel(widget.novel.id.toString())
|
? await Network().deleteFavoriteNovel(widget.novel.id.toString())
|
||||||
: await Network().favoriteNovel(widget.novel.id.toString());
|
: await Network().favoriteNovel(widget.novel.id.toString(), public!);
|
||||||
if (res.error) {
|
if (res.error) {
|
||||||
if (mounted) {
|
if (mounted) {
|
||||||
context.showToast(message: res.errorMessage ?? "Network Error");
|
context.showToast(message: res.errorMessage ?? "Network Error");
|
||||||
@@ -337,7 +368,9 @@ class _NovelPageState extends State<NovelPage> {
|
|||||||
context.to(() => NovelReadingPage(widget.novel));
|
context.to(() => NovelReadingPage(widget.novel));
|
||||||
}),
|
}),
|
||||||
const SizedBox(width: 16),
|
const SizedBox(width: 16),
|
||||||
Button(
|
FlyoutTarget(
|
||||||
|
controller: favoriteFlyout,
|
||||||
|
child: Button(
|
||||||
onPressed: favorite,
|
onPressed: favorite,
|
||||||
child: Row(
|
child: Row(
|
||||||
mainAxisAlignment: constrains.maxWidth > 420
|
mainAxisAlignment: constrains.maxWidth > 420
|
||||||
@@ -370,6 +403,7 @@ class _NovelPageState extends State<NovelPage> {
|
|||||||
: 64)
|
: 64)
|
||||||
.fixHeight(32),
|
.fixHeight(32),
|
||||||
),
|
),
|
||||||
|
),
|
||||||
const SizedBox(width: 8),
|
const SizedBox(width: 8),
|
||||||
Button(
|
Button(
|
||||||
child: Row(
|
child: Row(
|
||||||
|
@@ -209,7 +209,7 @@ class _SettingsPageState extends State<SettingsPage> {
|
|||||||
MdIcons.open_in_new,
|
MdIcons.open_in_new,
|
||||||
size: 18,
|
size: 18,
|
||||||
),
|
),
|
||||||
onPressed: () => launchUrlString("https://t.me/pica_group"),
|
onPressed: () => launchUrlString("https://t.me/venera_dev"),
|
||||||
)),
|
)),
|
||||||
buildItem(
|
buildItem(
|
||||||
title: "Logs",
|
title: "Logs",
|
||||||
|
117
pubspec.lock
117
pubspec.lock
@@ -149,18 +149,18 @@ packages:
|
|||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: ffi
|
name: ffi
|
||||||
sha256: "493f37e7df1804778ff3a53bd691d8692ddf69702cf4c1c1096a2e41b4779e21"
|
sha256: "16ed7b077ef01ad6170a3d0c57caa4a112a38d7a2ed5602e0aca9ca6f3d98da6"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.1.2"
|
version: "2.1.3"
|
||||||
file:
|
file:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: file
|
name: file
|
||||||
sha256: "5fc22d7c25582e38ad9a8515372cd9a93834027aacf1801cf01164dac0ffa08c"
|
sha256: a3b4f84adafef897088c160faf7dfffb7696046cb13ae90b508c2cbc95d3b8d4
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "7.0.0"
|
version: "7.0.1"
|
||||||
file_selector:
|
file_selector:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
@@ -173,34 +173,34 @@ packages:
|
|||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: file_selector_android
|
name: file_selector_android
|
||||||
sha256: "57265ec9591e8fd8508f613544cde6f7d045731f6b09644057e49a4c9c672b7c"
|
sha256: "98ac58e878b05ea2fdb204e7f4fc4978d90406c9881874f901428e01d3b18fbc"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "0.5.1+1"
|
version: "0.5.1+12"
|
||||||
file_selector_ios:
|
file_selector_ios:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: file_selector_ios
|
name: file_selector_ios
|
||||||
sha256: "7160121e434910ec23717bde3a0c514ca039e8c97b791ff35d1786da38abcb4a"
|
sha256: "94b98ad950b8d40d96fee8fa88640c2e4bd8afcdd4817993bd04e20310f45420"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "0.5.2"
|
version: "0.5.3+1"
|
||||||
file_selector_linux:
|
file_selector_linux:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: file_selector_linux
|
name: file_selector_linux
|
||||||
sha256: "045d372bf19b02aeb69cacf8b4009555fb5f6f0b7ad8016e5f46dd1387ddd492"
|
sha256: "54cbbd957e1156d29548c7d9b9ec0c0ebb6de0a90452198683a7d23aed617a33"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "0.9.2+1"
|
version: "0.9.3+2"
|
||||||
file_selector_macos:
|
file_selector_macos:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: file_selector_macos
|
name: file_selector_macos
|
||||||
sha256: f42eacb83b318e183b1ae24eead1373ab1334084404c8c16e0354f9a3e55d385
|
sha256: "271ab9986df0c135d45c3cdb6bd0faa5db6f4976d3e4b437cf7d0f258d941bfc"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "0.9.4"
|
version: "0.9.4+2"
|
||||||
file_selector_platform_interface:
|
file_selector_platform_interface:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@@ -221,18 +221,18 @@ packages:
|
|||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: file_selector_windows
|
name: file_selector_windows
|
||||||
sha256: d3547240c20cabf205c7c7f01a50ecdbc413755814d6677f3cb366f04abcead0
|
sha256: "8f5d2f6590d51ecd9179ba39c64f722edc15226cc93dcc8698466ad36a4a85a4"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "0.9.3+1"
|
version: "0.9.3+3"
|
||||||
fixnum:
|
fixnum:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: fixnum
|
name: fixnum
|
||||||
sha256: "25517a4deb0c03aa0f32fd12db525856438902d9c16536311e76cdc57b31d7d1"
|
sha256: b6dc7065e46c974bc7c5f143080a6764ec7a4be6da1285ececdc37be96de53be
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.1.0"
|
version: "1.1.1"
|
||||||
fluent_ui:
|
fluent_ui:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
@@ -291,12 +291,11 @@ packages:
|
|||||||
flutter_to_arch:
|
flutter_to_arch:
|
||||||
dependency: "direct dev"
|
dependency: "direct dev"
|
||||||
description:
|
description:
|
||||||
path: "."
|
name: flutter_to_arch
|
||||||
ref: "15bfead"
|
sha256: b68b2757a89a517ae2141cbc672acdd1f69721dd686cacad03876b6f436ff040
|
||||||
resolved-ref: "15bfead0380fda79b0256b37c73b886b0882f1bf"
|
url: "https://pub.dev"
|
||||||
url: "https://github.com/wgh136/flutter_to_arch"
|
source: hosted
|
||||||
source: git
|
version: "1.0.1"
|
||||||
version: "1.0.0"
|
|
||||||
flutter_web_plugins:
|
flutter_web_plugins:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description: flutter
|
description: flutter
|
||||||
@@ -322,10 +321,10 @@ packages:
|
|||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: http_parser
|
name: http_parser
|
||||||
sha256: "2aa08ce0341cc9b354a498388e30986515406668dbcc4f7c950c3e715496693b"
|
sha256: "76d306a1c3afb33fe82e2bbacad62a61f409b5634c915fceb0d799de1a913360"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "4.0.2"
|
version: "4.1.1"
|
||||||
image_gallery_saver:
|
image_gallery_saver:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
@@ -347,10 +346,10 @@ packages:
|
|||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: io
|
name: io
|
||||||
sha256: "2ec25704aba361659e10e3e5f5d672068d332fc8ac516421d483a11e5cbd061e"
|
sha256: dfd5a80599cf0165756e3181807ed3e77daf6dd4137caaad72d0b7931597650b
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.0.4"
|
version: "1.0.5"
|
||||||
json_annotation:
|
json_annotation:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@@ -411,10 +410,10 @@ packages:
|
|||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: math_expressions
|
name: math_expressions
|
||||||
sha256: db0b72d867491c4e53a1c773e2708d5d6e94bbe06be07080fc9f896766b9cd3d
|
sha256: e32d803d758ace61cc6c4bdfed1226ff60a6a23646b35685670d28b5616139f8
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.5.0"
|
version: "2.6.0"
|
||||||
meta:
|
meta:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@@ -427,10 +426,10 @@ packages:
|
|||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: mime
|
name: mime
|
||||||
sha256: "2e123074287cc9fd6c09de8336dae606d1ddb88d9ac47358826db698c176a1f2"
|
sha256: "41a20518f0cb1256669420fdba0cd90d21561e560ac240f26ef8322e45bb7ed6"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.0.5"
|
version: "2.0.0"
|
||||||
path:
|
path:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@@ -459,10 +458,10 @@ packages:
|
|||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: path_provider_foundation
|
name: path_provider_foundation
|
||||||
sha256: f234384a3fdd67f989b4d54a5d73ca2a6c422fa55ae694381ae0f4375cd1ea16
|
sha256: "4843174df4d288f5e29185bd6e72a6fbdf5a4a4602717eed565497429f179942"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.4.0"
|
version: "2.4.1"
|
||||||
path_provider_linux:
|
path_provider_linux:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@@ -483,16 +482,16 @@ packages:
|
|||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: path_provider_windows
|
name: path_provider_windows
|
||||||
sha256: "8bc9f22eee8690981c22aa7fc602f5c85b497a6fb2ceb35ee5a5e5ed85ad8170"
|
sha256: bd6f00dbd873bfb70d0761682da2b3a2c2fccc2b9e84c495821639601d81afe7
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.2.1"
|
version: "2.3.0"
|
||||||
photo_view:
|
photo_view:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
path: "."
|
path: "."
|
||||||
ref: main
|
ref: main
|
||||||
resolved-ref: "97de36fa8c500c18037f675c122785b193559e09"
|
resolved-ref: "94724a0b7f94167fd1ae061f84e14ae04cae5c39"
|
||||||
url: "https://github.com/wgh136/photo_view"
|
url: "https://github.com/wgh136/photo_view"
|
||||||
source: git
|
source: git
|
||||||
version: "0.14.0"
|
version: "0.14.0"
|
||||||
@@ -500,10 +499,10 @@ packages:
|
|||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: platform
|
name: platform
|
||||||
sha256: "12220bb4b65720483f8fa9450b4332347737cf8213dd2840d8b2c823e47243ec"
|
sha256: "5d6b1b0036a5f331ebc77c850ebc8506cbc1e9416c27e59b439f917a902a4984"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "3.1.4"
|
version: "3.1.6"
|
||||||
plugin_platform_interface:
|
plugin_platform_interface:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@@ -625,10 +624,10 @@ packages:
|
|||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
name: sqlite3_flutter_libs
|
name: sqlite3_flutter_libs
|
||||||
sha256: fb2a106a2ea6042fe57de2c47074cc31539a941819c91e105b864744605da3f5
|
sha256: "636b0fe8a2de894e5455572f6cbbc458f4ffecfe9f860b79439e27041ea4f0b9"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "0.5.21"
|
version: "0.5.27"
|
||||||
stack_trace:
|
stack_trace:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@@ -673,10 +672,10 @@ packages:
|
|||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: typed_data
|
name: typed_data
|
||||||
sha256: facc8d6582f16042dd49f2463ff1bd6e2c9ef9f3d5da3d9b087e244a7b564b3c
|
sha256: f9049c039ebfeb4cf7a7104a675823cd72dba8297f264b6637062516699fa006
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.3.2"
|
version: "1.4.0"
|
||||||
url_launcher:
|
url_launcher:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
@@ -689,34 +688,34 @@ packages:
|
|||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: url_launcher_android
|
name: url_launcher_android
|
||||||
sha256: "360a6ed2027f18b73c8d98e159dda67a61b7f2e0f6ec26e86c3ada33b0621775"
|
sha256: "6fc2f56536ee873eeb867ad176ae15f304ccccc357848b351f6f0d8d4a40d193"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "6.3.1"
|
version: "6.3.14"
|
||||||
url_launcher_ios:
|
url_launcher_ios:
|
||||||
dependency: transitive
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
name: url_launcher_ios
|
name: url_launcher_ios
|
||||||
sha256: "7068716403343f6ba4969b4173cbf3b84fc768042124bc2c011e5d782b24fe89"
|
sha256: "16a513b6c12bb419304e72ea0ae2ab4fed569920d1c7cb850263fe3acc824626"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "6.3.0"
|
version: "6.3.2"
|
||||||
url_launcher_linux:
|
url_launcher_linux:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: url_launcher_linux
|
name: url_launcher_linux
|
||||||
sha256: ab360eb661f8879369acac07b6bb3ff09d9471155357da8443fd5d3cf7363811
|
sha256: "4e9ba368772369e3e08f231d2301b4ef72b9ff87c31192ef471b380ef29a4935"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "3.1.1"
|
version: "3.2.1"
|
||||||
url_launcher_macos:
|
url_launcher_macos:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: url_launcher_macos
|
name: url_launcher_macos
|
||||||
sha256: "9a1a42d5d2d95400c795b2914c36fdcb525870c752569438e4ebb09a2b5d90de"
|
sha256: "17ba2000b847f334f16626a574c702b196723af2a289e7a93ffcb79acff855c2"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "3.2.0"
|
version: "3.2.2"
|
||||||
url_launcher_platform_interface:
|
url_launcher_platform_interface:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@@ -745,10 +744,10 @@ packages:
|
|||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: uuid
|
name: uuid
|
||||||
sha256: "814e9e88f21a176ae1359149021870e87f7cddaf633ab678a5d2b0bff7fd1ba8"
|
sha256: a5be9ef6618a7ac1e964353ef476418026db906c4facdedaa299b7a2e71690ff
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "4.4.0"
|
version: "4.5.1"
|
||||||
vector_math:
|
vector_math:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@@ -809,18 +808,18 @@ packages:
|
|||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: win32
|
name: win32
|
||||||
sha256: "68d1e89a91ed61ad9c370f9f8b6effed9ae5e0ede22a270bdfa6daf79fc2290a"
|
sha256: "8b338d4486ab3fbc0ba0db9f9b4f5239b6697fcee427939a40e720cbb9ee0a69"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "5.5.4"
|
version: "5.9.0"
|
||||||
win32_registry:
|
win32_registry:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
name: win32_registry
|
name: win32_registry
|
||||||
sha256: "10589e0d7f4e053f2c61023a31c9ce01146656a70b7b7f0828c0b46d7da2a9bb"
|
sha256: "21ec76dfc731550fd3e2ce7a33a9ea90b828fdf19a5c3bcf556fa992cfa99852"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.1.3"
|
version: "1.1.5"
|
||||||
window_manager:
|
window_manager:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
@@ -833,10 +832,10 @@ packages:
|
|||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: xdg_directories
|
name: xdg_directories
|
||||||
sha256: faea9dee56b520b55a566385b84f2e8de55e7496104adada9962e0bd11bcff1d
|
sha256: "7a3f37b05d989967cdddcbb571f1ea834867ae2faa29725fd085180e0883aa15"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.0.4"
|
version: "1.1.0"
|
||||||
yaml:
|
yaml:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@@ -847,4 +846,4 @@ packages:
|
|||||||
version: "3.1.2"
|
version: "3.1.2"
|
||||||
sdks:
|
sdks:
|
||||||
dart: ">=3.5.0 <4.0.0"
|
dart: ">=3.5.0 <4.0.0"
|
||||||
flutter: ">=3.27.0"
|
flutter: ">=3.27.3"
|
||||||
|
@@ -20,7 +20,7 @@ version: 1.1.0+110
|
|||||||
|
|
||||||
environment:
|
environment:
|
||||||
sdk: '>=3.3.4 <4.0.0'
|
sdk: '>=3.3.4 <4.0.0'
|
||||||
flutter: 3.27.0
|
flutter: 3.27.3
|
||||||
|
|
||||||
# Dependencies specify other packages that your package needs in order to work.
|
# Dependencies specify other packages that your package needs in order to work.
|
||||||
# To automatically upgrade your package dependencies to the latest versions
|
# To automatically upgrade your package dependencies to the latest versions
|
||||||
@@ -43,6 +43,7 @@ dependencies:
|
|||||||
intl:
|
intl:
|
||||||
path_provider: ^2.1.5
|
path_provider: ^2.1.5
|
||||||
url_launcher: ^6.3.1
|
url_launcher: ^6.3.1
|
||||||
|
url_launcher_ios: ^6.3.2
|
||||||
app_links: ^6.3.3
|
app_links: ^6.3.3
|
||||||
win32_registry: ^1.1.0
|
win32_registry: ^1.1.0
|
||||||
flutter_staggered_grid_view: ^0.7.0
|
flutter_staggered_grid_view: ^0.7.0
|
||||||
@@ -73,10 +74,7 @@ dev_dependencies:
|
|||||||
# package. See that file for information about deactivating specific lint
|
# package. See that file for information about deactivating specific lint
|
||||||
# rules and activating additional ones.
|
# rules and activating additional ones.
|
||||||
flutter_lints: ^3.0.0
|
flutter_lints: ^3.0.0
|
||||||
flutter_to_arch:
|
flutter_to_arch: ^1.0.1
|
||||||
git:
|
|
||||||
url: https://github.com/wgh136/flutter_to_arch
|
|
||||||
ref: 15bfead
|
|
||||||
|
|
||||||
# For information on the generic Dart part of this file, see the
|
# For information on the generic Dart part of this file, see the
|
||||||
# following page: https://dart.dev/tools/pub/pubspec
|
# following page: https://dart.dev/tools/pub/pubspec
|
||||||
|
@@ -46,7 +46,7 @@ Source: "{#RootPath}\build\windows\x64\runner\Release\app_links_plugin.dll"; Des
|
|||||||
Source: "{#RootPath}\build\windows\x64\runner\Release\dynamic_color_plugin.dll"; DestDir: "{app}"; Flags: ignoreversion
|
Source: "{#RootPath}\build\windows\x64\runner\Release\dynamic_color_plugin.dll"; DestDir: "{app}"; Flags: ignoreversion
|
||||||
Source: "{#RootPath}\build\windows\x64\runner\Release\file_selector_windows_plugin.dll"; DestDir: "{app}"; Flags: ignoreversion
|
Source: "{#RootPath}\build\windows\x64\runner\Release\file_selector_windows_plugin.dll"; DestDir: "{app}"; Flags: ignoreversion
|
||||||
Source: "{#RootPath}\build\windows\x64\runner\Release\flutter_windows.dll"; DestDir: "{app}"; Flags: ignoreversion
|
Source: "{#RootPath}\build\windows\x64\runner\Release\flutter_windows.dll"; DestDir: "{app}"; Flags: ignoreversion
|
||||||
Source: "{#RootPath}\build\windows\x64\runner\Release\screen_retriever_plugin.dll"; DestDir: "{app}"; Flags: ignoreversion
|
Source: "{#RootPath}\build\windows\x64\runner\Release\screen_retriever_windows_plugin.dll"; DestDir: "{app}"; Flags: ignoreversion
|
||||||
Source: "{#RootPath}\build\windows\x64\runner\Release\share_plus_plugin.dll"; DestDir: "{app}"; Flags: ignoreversion
|
Source: "{#RootPath}\build\windows\x64\runner\Release\share_plus_plugin.dll"; DestDir: "{app}"; Flags: ignoreversion
|
||||||
Source: "{#RootPath}\build\windows\x64\runner\Release\sqlite3.dll"; DestDir: "{app}"; Flags: ignoreversion
|
Source: "{#RootPath}\build\windows\x64\runner\Release\sqlite3.dll"; DestDir: "{app}"; Flags: ignoreversion
|
||||||
Source: "{#RootPath}\build\windows\x64\runner\Release\sqlite3_flutter_libs_plugin.dll"; DestDir: "{app}"; Flags: ignoreversion
|
Source: "{#RootPath}\build\windows\x64\runner\Release\sqlite3_flutter_libs_plugin.dll"; DestDir: "{app}"; Flags: ignoreversion
|
||||||
|
Reference in New Issue
Block a user