Skip to content

Commit

Permalink
Manga reader rewrited
Browse files Browse the repository at this point in the history
  • Loading branch information
Andrii Pyvovarov committed Sep 20, 2024
1 parent 147bd55 commit 8616100
Show file tree
Hide file tree
Showing 9 changed files with 230 additions and 131 deletions.
2 changes: 2 additions & 0 deletions lib/app_localizations.dart
Original file line number Diff line number Diff line change
Expand Up @@ -96,5 +96,7 @@ String mangaReaderModeLabel(BuildContext context, MangaReaderMode mode) {
MangaReaderMode.vericalScroll => localization.mangaReaderModeVericalScroll,
MangaReaderMode.hotizontalScroll =>
localization.mangaReaderModeHorizontalScroll,
MangaReaderMode.hotizontalRtlScroll =>
localization.mangaReaderModeHorizontalRtlScroll,
};
}
13 changes: 5 additions & 8 deletions lib/content/manga/manga_provider.dart
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import 'package:cloud_hook/collection/collection_item_provider.dart';
import 'package:cloud_hook/content/manga/model.dart';
import 'package:cloud_hook/content_suppliers/model.dart';
import 'package:collection/collection.dart';
import 'package:flutter/material.dart';
import 'package:riverpod_annotation/riverpod_annotation.dart';

part 'manga_provider.g.dart';
Expand Down Expand Up @@ -42,22 +42,19 @@ Future<MangaMediaItemSource?> mangaChapterScan(
}

@riverpod
Future<MangaReaderChapter?> currentMangaReaderChapter(
CurrentMangaReaderChapterRef ref,
Future<List<ImageProvider>> currentMangaPages(
CurrentMangaPagesRef ref,
ContentDetails contentDetails,
List<ContentMediaItem> mediaItems,
) async {
final currentSource = await ref
.watch(mangaChapterScanProvider(contentDetails, mediaItems).future);

if (currentSource == null) {
return null;
return [];
}

final initialPage = await ref
.read(collectionItemCurrentPositionProvider(contentDetails).future);

final pages = await currentSource.allPages();

return MangaReaderChapter(pages: pages, initialPage: initialPage);
return pages;
}
85 changes: 41 additions & 44 deletions lib/content/manga/manga_provider.g.dart

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 0 additions & 6 deletions lib/content/manga/manga_reader.dart
Original file line number Diff line number Diff line change
Expand Up @@ -37,12 +37,6 @@ class MangaReader extends HookConsumerWidget {
contentDetails: contentDetails,
mediaItems: mediaItems,
),
Positioned(
left: 0,
right: 0,
bottom: 0,
child: MangaChapterProgressIndicator(contentDetails: contentDetails),
),
],
);
}
Expand Down
56 changes: 42 additions & 14 deletions lib/content/manga/manga_reader_controls.dart
Original file line number Diff line number Diff line change
Expand Up @@ -11,10 +11,12 @@ import 'package:hooks_riverpod/hooks_riverpod.dart';
class MangaReaderControlsRoute<T> extends PopupRoute<T> {
final ContentDetails contentDetails;
final List<ContentMediaItem> mediaItems;
final ValueChanged<int> onPageChanged;

MangaReaderControlsRoute({
required this.contentDetails,
required this.mediaItems,
required this.onPageChanged,
});

@override
Expand All @@ -39,6 +41,7 @@ class MangaReaderControlsRoute<T> extends PopupRoute<T> {
child: MangaReaderControls(
contentDetails: contentDetails,
mediaItems: mediaItems,
onPageChanged: onPageChanged,
),
),
),
Expand All @@ -49,26 +52,37 @@ class MangaReaderControlsRoute<T> extends PopupRoute<T> {
class MangaReaderControls extends ConsumerWidget {
final ContentDetails contentDetails;
final List<ContentMediaItem> mediaItems;
final ValueChanged<int> onPageChanged;

const MangaReaderControls({
super.key,
required this.contentDetails,
required this.mediaItems,
required this.onPageChanged,
});

@override
Widget build(BuildContext context, WidgetRef ref) {
return Column(children: [
MangaReaderControlTopBar(
contentDetails: contentDetails,
mediaItems: mediaItems,
return GestureDetector(
onTapUp: (details) {
context.pop();
},
child: Material(
color: Colors.transparent,
child: Column(children: [
MangaReaderControlTopBar(
contentDetails: contentDetails,
mediaItems: mediaItems,
),
const Spacer(),
MangaReaderControlBottomBar(
contentDetails: contentDetails,
mediaItems: mediaItems,
onPageChanged: onPageChanged,
)
]),
),
const Spacer(),
MangaReaderControlBottomBar(
contentDetails: contentDetails,
mediaItems: mediaItems,
)
]);
);
}
}

Expand Down Expand Up @@ -104,8 +118,8 @@ class MangaReaderControlTopBar extends ConsumerWidget {
padding: const EdgeInsets.only(
top: 16.0,
bottom: 8,
right: 20,
left: 20,
right: 16,
left: 16,
),
child: Row(children: [
if (!AndroidTVDetector.isTV) ...[
Expand Down Expand Up @@ -150,11 +164,13 @@ class MangaReaderControlTopBar extends ConsumerWidget {
class MangaReaderControlBottomBar extends ConsumerWidget {
final List<ContentMediaItem> mediaItems;
final ContentDetails contentDetails;
final ValueChanged<int> onPageChanged;

const MangaReaderControlBottomBar({
super.key,
required this.contentDetails,
required this.mediaItems,
required this.onPageChanged,
});

@override
Expand All @@ -171,8 +187,9 @@ class MangaReaderControlBottomBar extends ConsumerWidget {
return const SizedBox.shrink();
}

final curPage = pos.position + 1;
var curPage = pos.position + 1;
final pageNumbers = pos.length;

return Container(
decoration: const BoxDecoration(
gradient: LinearGradient(
Expand All @@ -192,8 +209,19 @@ class MangaReaderControlBottomBar extends ConsumerWidget {
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisSize: MainAxisSize.min,
children: [
Slider(
max: pageNumbers.toDouble() - 1.0,
value: pos.position > pageNumbers
? pageNumbers.toDouble()
: pos.position.toDouble(),
label: curPage.toString(),
divisions: pageNumbers,
onChanged: (value) {
onPageChanged(value.round());
},
),
Padding(
padding: const EdgeInsets.symmetric(vertical: 8.0, horizontal: 20),
padding: const EdgeInsets.only(bottom: 8.0, left: 16, right: 16),
child: Row(
mainAxisSize: MainAxisSize.max,
children: [
Expand Down
Loading

0 comments on commit 8616100

Please sign in to comment.