mirror of
https://github.com/kodjodevf/mangayomi.git
synced 2026-04-21 07:41:58 +00:00
impl & fix
This commit is contained in:
parent
766e2463ca
commit
48fb9371e4
11 changed files with 252 additions and 138 deletions
|
|
@ -12,7 +12,7 @@ import 'package:mangayomi/views/browse/global_search_screen.dart';
|
|||
import 'package:mangayomi/views/general/general_screen.dart';
|
||||
import 'package:mangayomi/views/history/history_screen.dart';
|
||||
import 'package:mangayomi/views/library/library_screen.dart';
|
||||
import 'package:mangayomi/views/manga/detail/manga_reader_detail.dart';
|
||||
import 'package:mangayomi/views/manga/detail/manga_detail_main.dart';
|
||||
import 'package:mangayomi/views/manga/home/manga_home_screen.dart';
|
||||
import 'package:mangayomi/views/manga/home/manga_search_screen.dart';
|
||||
import 'package:mangayomi/views/manga/reader/manga_reader_view.dart';
|
||||
|
|
|
|||
|
|
@ -111,7 +111,7 @@ class GetAllMangaStreamProvider extends AutoDisposeStreamProvider<List<Manga>> {
|
|||
}
|
||||
|
||||
String _$getAllMangaWithoutCategoriesStreamHash() =>
|
||||
r'6fc216e2a14edb3a0323b358ef3749a75007e8b5';
|
||||
r'affd1fab4a6ab0e0bbc16b67384a0b17498fe209';
|
||||
|
||||
/// See also [getAllMangaWithoutCategoriesStream].
|
||||
@ProviderFor(getAllMangaWithoutCategoriesStream)
|
||||
|
|
|
|||
|
|
@ -1,15 +1,8 @@
|
|||
import 'dart:developer';
|
||||
import 'dart:io';
|
||||
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter/services.dart';
|
||||
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||||
import 'package:hive_flutter/hive_flutter.dart';
|
||||
import 'package:isar/isar.dart';
|
||||
import 'package:mangayomi/main.dart';
|
||||
import 'package:mangayomi/models/chapter.dart';
|
||||
import 'package:mangayomi/models/manga.dart';
|
||||
import 'package:mangayomi/providers/hive_provider.dart';
|
||||
import 'package:mangayomi/services/get_manga_detail.dart';
|
||||
import 'package:mangayomi/views/manga/detail/manga_details_view.dart';
|
||||
import 'package:mangayomi/views/manga/detail/providers/isar_providers.dart';
|
||||
|
|
@ -5,6 +5,7 @@ import 'package:flutter/material.dart';
|
|||
import 'package:flutter/rendering.dart';
|
||||
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||||
import 'package:go_router/go_router.dart';
|
||||
import 'package:mangayomi/main.dart';
|
||||
import 'package:mangayomi/models/chapter.dart';
|
||||
import 'package:mangayomi/models/manga.dart';
|
||||
import 'package:mangayomi/providers/hive_provider.dart';
|
||||
|
|
@ -19,6 +20,7 @@ import 'package:mangayomi/views/manga/detail/readmore.dart';
|
|||
import 'package:mangayomi/views/manga/detail/widgets/chapter_filter_list_tile_widget.dart';
|
||||
import 'package:mangayomi/views/manga/detail/widgets/chapter_list_tile_widget.dart';
|
||||
import 'package:mangayomi/views/manga/detail/widgets/chapter_sort_list_tile_widget.dart';
|
||||
import 'package:mangayomi/views/manga/download/providers/download_provider.dart';
|
||||
import 'package:mangayomi/views/widgets/error_text.dart';
|
||||
|
||||
class MangaDetailView extends ConsumerStatefulWidget {
|
||||
|
|
@ -91,6 +93,7 @@ class _MangaDetailViewState extends ConsumerState<MangaDetailView>
|
|||
filterBookmarked: filterBookmarked,
|
||||
filterDownloaded: filterDownloaded,
|
||||
sortChapter: sortChapter);
|
||||
ref.read(chaptersListttStateProvider.notifier).set(chapters);
|
||||
return _buildWidget(
|
||||
chapters: chapters,
|
||||
reverse: reverse,
|
||||
|
|
@ -350,91 +353,193 @@ class _MangaDetailViewState extends ConsumerState<MangaDetailView>
|
|||
);
|
||||
})),
|
||||
),
|
||||
bottomNavigationBar: AnimatedContainer(
|
||||
curve: Curves.easeIn,
|
||||
decoration: BoxDecoration(
|
||||
color: primaryColor(context).withOpacity(0.2),
|
||||
borderRadius: const BorderRadius.only(
|
||||
topLeft: Radius.circular(20),
|
||||
topRight: Radius.circular(20))),
|
||||
duration: const Duration(milliseconds: 100),
|
||||
height: isLongPressed ? 70 : 0,
|
||||
width: mediaWidth(context, 1),
|
||||
child: Row(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceAround,
|
||||
children: [
|
||||
Expanded(
|
||||
child: SizedBox(
|
||||
height: 70,
|
||||
child: ElevatedButton(
|
||||
style: ElevatedButton.styleFrom(
|
||||
elevation: 0,
|
||||
backgroundColor: Colors.transparent,
|
||||
shadowColor: Colors.transparent,
|
||||
),
|
||||
onPressed: () {
|
||||
ref
|
||||
.read(chapterSetIsBookmarkStateProvider(
|
||||
manga: widget.manga!)
|
||||
.notifier)
|
||||
.set();
|
||||
},
|
||||
child: Icon(Icons.bookmark_add_outlined,
|
||||
color: Theme.of(context)
|
||||
.textTheme
|
||||
.bodyLarge!
|
||||
.color)),
|
||||
bottomNavigationBar: Consumer(builder: (context, ref, child) {
|
||||
final chap = ref.watch(chaptersListStateProvider);
|
||||
bool getLength1 = chap.length == 1;
|
||||
bool checkFirstBookmarked =
|
||||
chap.isNotEmpty && chap.first.isBookmarked! && getLength1;
|
||||
bool checkReadBookmarked =
|
||||
chap.isNotEmpty && chap.first.isRead! && getLength1;
|
||||
|
||||
return AnimatedContainer(
|
||||
curve: Curves.easeIn,
|
||||
decoration: BoxDecoration(
|
||||
color: primaryColor(context).withOpacity(0.2),
|
||||
borderRadius: const BorderRadius.only(
|
||||
topLeft: Radius.circular(20),
|
||||
topRight: Radius.circular(20))),
|
||||
duration: const Duration(milliseconds: 100),
|
||||
height: isLongPressed ? 70 : 0,
|
||||
width: mediaWidth(context, 1),
|
||||
child: Row(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceAround,
|
||||
children: [
|
||||
Expanded(
|
||||
child: SizedBox(
|
||||
height: 70,
|
||||
child: ElevatedButton(
|
||||
style: ElevatedButton.styleFrom(
|
||||
elevation: 0,
|
||||
backgroundColor: Colors.transparent,
|
||||
shadowColor: Colors.transparent,
|
||||
),
|
||||
onPressed: () {
|
||||
final chapters =
|
||||
ref.watch(chaptersListStateProvider);
|
||||
isar.writeTxnSync(() {
|
||||
for (var chapter in chapters) {
|
||||
chapter.isBookmarked = !chapter.isBookmarked!;
|
||||
isar.chapters.putSync(
|
||||
chapter..manga.value = widget.manga);
|
||||
chapter.manga.saveSync();
|
||||
}
|
||||
});
|
||||
ref
|
||||
.read(isLongPressedStateProvider.notifier)
|
||||
.update(false);
|
||||
ref
|
||||
.read(chaptersListStateProvider.notifier)
|
||||
.clear();
|
||||
},
|
||||
child: Icon(
|
||||
checkFirstBookmarked
|
||||
? Icons.bookmark_remove_outlined
|
||||
: Icons.bookmark_add_outlined,
|
||||
color: Theme.of(context)
|
||||
.textTheme
|
||||
.bodyLarge!
|
||||
.color)),
|
||||
),
|
||||
),
|
||||
),
|
||||
Expanded(
|
||||
child: SizedBox(
|
||||
height: 70,
|
||||
child: ElevatedButton(
|
||||
style: ElevatedButton.styleFrom(
|
||||
elevation: 0,
|
||||
backgroundColor: Colors.transparent,
|
||||
shadowColor: Colors.transparent,
|
||||
),
|
||||
onPressed: () {
|
||||
ref
|
||||
.read(chapterSetIsReadStateProvider(
|
||||
manga: widget.manga!)
|
||||
.notifier)
|
||||
.set();
|
||||
},
|
||||
child: Icon(Icons.done_all_sharp,
|
||||
color: Theme.of(context)
|
||||
.textTheme
|
||||
.bodyLarge!
|
||||
.color!)),
|
||||
Expanded(
|
||||
child: SizedBox(
|
||||
height: 70,
|
||||
child: ElevatedButton(
|
||||
style: ElevatedButton.styleFrom(
|
||||
elevation: 0,
|
||||
backgroundColor: Colors.transparent,
|
||||
shadowColor: Colors.transparent,
|
||||
),
|
||||
onPressed: () {
|
||||
final chapters =
|
||||
ref.watch(chaptersListStateProvider);
|
||||
isar.writeTxnSync(() {
|
||||
for (var chapter in chapters) {
|
||||
chapter.isRead = !chapter.isRead!;
|
||||
isar.chapters.putSync(
|
||||
chapter..manga.value = widget.manga);
|
||||
chapter.manga.saveSync();
|
||||
}
|
||||
});
|
||||
ref
|
||||
.read(isLongPressedStateProvider.notifier)
|
||||
.update(false);
|
||||
ref
|
||||
.read(chaptersListStateProvider.notifier)
|
||||
.clear();
|
||||
},
|
||||
child: Icon(
|
||||
checkReadBookmarked
|
||||
? Icons.remove_done_sharp
|
||||
: Icons.done_all_sharp,
|
||||
color: Theme.of(context)
|
||||
.textTheme
|
||||
.bodyLarge!
|
||||
.color!)),
|
||||
),
|
||||
),
|
||||
),
|
||||
Expanded(
|
||||
child: SizedBox(
|
||||
height: 70,
|
||||
child: ElevatedButton(
|
||||
style: ElevatedButton.styleFrom(
|
||||
elevation: 0,
|
||||
backgroundColor: Colors.transparent,
|
||||
shadowColor: Colors.transparent,
|
||||
),
|
||||
onPressed: () {
|
||||
ref
|
||||
.read(chapterSetDownloadStateProvider(
|
||||
manga: widget.manga!)
|
||||
.notifier)
|
||||
.set();
|
||||
},
|
||||
child: Icon(
|
||||
Icons.download_outlined,
|
||||
color:
|
||||
Theme.of(context).textTheme.bodyLarge!.color!,
|
||||
)),
|
||||
),
|
||||
)
|
||||
],
|
||||
),
|
||||
)),
|
||||
if (getLength1)
|
||||
Expanded(
|
||||
child: SizedBox(
|
||||
height: 70,
|
||||
child: ElevatedButton(
|
||||
style: ElevatedButton.styleFrom(
|
||||
elevation: 0,
|
||||
backgroundColor: Colors.transparent,
|
||||
shadowColor: Colors.transparent,
|
||||
),
|
||||
onPressed: () {
|
||||
int index = chapters.indexOf(chap.first);
|
||||
isar.writeTxnSync(() {
|
||||
for (var i = index + 1;
|
||||
i < chapters.length;
|
||||
i++) {
|
||||
chapters[i].isRead = true;
|
||||
isar.chapters.putSync(chapters[i]
|
||||
..manga.value = widget.manga);
|
||||
chapters[i].manga.saveSync();
|
||||
}
|
||||
ref
|
||||
.read(isLongPressedStateProvider.notifier)
|
||||
.update(false);
|
||||
ref
|
||||
.read(chaptersListStateProvider.notifier)
|
||||
.clear();
|
||||
});
|
||||
},
|
||||
child: Stack(
|
||||
children: [
|
||||
Icon(Icons.done_outlined,
|
||||
color: Theme.of(context)
|
||||
.textTheme
|
||||
.bodyLarge!
|
||||
.color!),
|
||||
Positioned(
|
||||
bottom: 0,
|
||||
right: 0,
|
||||
child: Icon(Icons.arrow_downward_outlined,
|
||||
size: 11,
|
||||
color: Theme.of(context)
|
||||
.textTheme
|
||||
.bodyLarge!
|
||||
.color!))
|
||||
],
|
||||
)),
|
||||
),
|
||||
),
|
||||
Expanded(
|
||||
child: SizedBox(
|
||||
height: 70,
|
||||
child: ElevatedButton(
|
||||
style: ElevatedButton.styleFrom(
|
||||
elevation: 0,
|
||||
backgroundColor: Colors.transparent,
|
||||
shadowColor: Colors.transparent,
|
||||
),
|
||||
onPressed: () {
|
||||
for (var chapter
|
||||
in ref.watch(chaptersListStateProvider)) {
|
||||
final entries = ref
|
||||
.watch(hiveBoxMangaDownloadsProvider)
|
||||
.values
|
||||
.where((element) =>
|
||||
"${element.mangaId}/${element.chapterId}" ==
|
||||
"${widget.manga!.id}/${chapter.id}")
|
||||
.toList();
|
||||
if (entries.isEmpty ||
|
||||
!entries.first.isDownload) {
|
||||
ref.watch(downloadChapterProvider(
|
||||
chapter: chapter));
|
||||
}
|
||||
}
|
||||
ref
|
||||
.read(isLongPressedStateProvider.notifier)
|
||||
.update(false);
|
||||
ref
|
||||
.read(chaptersListStateProvider.notifier)
|
||||
.clear();
|
||||
},
|
||||
child: Icon(
|
||||
Icons.download_outlined,
|
||||
color:
|
||||
Theme.of(context).textTheme.bodyLarge!.color!,
|
||||
)),
|
||||
),
|
||||
)
|
||||
],
|
||||
),
|
||||
);
|
||||
})),
|
||||
],
|
||||
);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -32,10 +32,15 @@ class _MangaDetailsViewState extends ConsumerState<MangaDetailsView> {
|
|||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final history = ref.watch(getAllHistoryStreamProvider);
|
||||
final chaptersList = ref.watch(chaptersListttStateProvider);
|
||||
return Scaffold(
|
||||
floatingActionButton: ref.watch(isLongPressedStateProvider) == true
|
||||
? null
|
||||
: widget.manga.chapters.isNotEmpty
|
||||
: chaptersList.isNotEmpty &&
|
||||
chaptersList
|
||||
.where((element) => !element.isRead!)
|
||||
.toList()
|
||||
.isNotEmpty
|
||||
? history.when(
|
||||
data: (data) {
|
||||
final incognitoMode = ref.watch(incognitoModeStateProvider);
|
||||
|
|
|
|||
|
|
@ -1,6 +1,5 @@
|
|||
import 'package:isar/isar.dart';
|
||||
import 'package:mangayomi/main.dart';
|
||||
import 'package:mangayomi/models/category.dart';
|
||||
import 'package:mangayomi/models/chapter.dart';
|
||||
import 'package:mangayomi/models/manga.dart';
|
||||
import 'package:riverpod_annotation/riverpod_annotation.dart';
|
||||
|
|
|
|||
|
|
@ -293,3 +293,16 @@ class ChapterSetDownloadState extends _$ChapterSetDownloadState {
|
|||
ref.read(chaptersListStateProvider.notifier).clear();
|
||||
}
|
||||
}
|
||||
|
||||
@riverpod
|
||||
class ChaptersListttState extends _$ChaptersListttState {
|
||||
@override
|
||||
List<Chapter> build() {
|
||||
return [];
|
||||
}
|
||||
|
||||
set(List<Chapter> chapters) async {
|
||||
await Future.delayed(const Duration(milliseconds: 10));
|
||||
state = chapters;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -864,4 +864,22 @@ class ChapterSetDownloadStateProvider
|
|||
);
|
||||
}
|
||||
}
|
||||
|
||||
String _$chaptersListttStateHash() =>
|
||||
r'2f81698d88c8087360e33c19884bfbb018604269';
|
||||
|
||||
/// See also [ChaptersListttState].
|
||||
@ProviderFor(ChaptersListttState)
|
||||
final chaptersListttStateProvider =
|
||||
AutoDisposeNotifierProvider<ChaptersListttState, List<Chapter>>.internal(
|
||||
ChaptersListttState.new,
|
||||
name: r'chaptersListttStateProvider',
|
||||
debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product')
|
||||
? null
|
||||
: _$chaptersListttStateHash,
|
||||
dependencies: null,
|
||||
allTransitiveDependencies: null,
|
||||
);
|
||||
|
||||
typedef _$ChaptersListttState = AutoDisposeNotifier<List<Chapter>>;
|
||||
// ignore_for_file: unnecessary_raw_strings, subtype_of_sealed_class, invalid_use_of_internal_member, do_not_use_environment, prefer_const_constructors, public_member_api_docs, avoid_private_typedef_functions
|
||||
|
|
|
|||
|
|
@ -1,4 +1,3 @@
|
|||
// ignore_for_file: unnecessary_string_escapes, depend_on_referenced_packages
|
||||
import 'dart:async';
|
||||
import 'dart:math';
|
||||
import 'dart:ui' as ui;
|
||||
|
|
@ -20,7 +19,6 @@ import 'package:mangayomi/views/manga/reader/widgets/circular_progress_indicator
|
|||
import 'package:photo_view/photo_view.dart';
|
||||
import 'package:photo_view/photo_view_gallery.dart';
|
||||
import 'package:scrollable_positioned_list/scrollable_positioned_list.dart';
|
||||
import 'package:collection/collection.dart';
|
||||
|
||||
typedef DoubleClickAnimationListener = void Function();
|
||||
|
||||
|
|
@ -136,13 +134,9 @@ class _MangaChapterPageGalleryState
|
|||
late bool _isBookmarked = widget.readerController.getChapterBookmarked();
|
||||
@override
|
||||
void dispose() {
|
||||
widget.readerController.setMangaHistoryUpdate();
|
||||
widget.readerController.setPageIndex(_currentIndex);
|
||||
widget.readerController.setChapterPageLastRead(_currentIndex);
|
||||
_rebuildDetail.close();
|
||||
_doubleClickAnimationController.dispose();
|
||||
clearGestureDetailsCache();
|
||||
|
||||
super.dispose();
|
||||
}
|
||||
|
||||
|
|
@ -156,13 +150,23 @@ class _MangaChapterPageGalleryState
|
|||
_animation = Tween(begin: 1.0, end: 2.0).animate(
|
||||
CurvedAnimation(curve: Curves.ease, parent: _scaleAnimationController));
|
||||
_animation.addListener(() => _photoViewController.scale = _animation.value);
|
||||
_itemPositionsListener.itemPositions.addListener(_readProgressListener);
|
||||
widget.readerController.setMangaHistoryUpdate();
|
||||
_initCurrentIndex();
|
||||
_itemPositionsListener.itemPositions.addListener(_readProgressListener);
|
||||
super.initState();
|
||||
}
|
||||
|
||||
_readProgressListener() {
|
||||
var posIndex = _itemPositionsListener.itemPositions.value.first.index;
|
||||
if (posIndex >= 0 && posIndex < widget.url.length) {
|
||||
ref
|
||||
.read(currentIndexProvider(widget.chapter).notifier)
|
||||
.setCurrentIndex(posIndex, widget.readerController);
|
||||
_currentIndex = posIndex;
|
||||
}
|
||||
}
|
||||
|
||||
_initCurrentIndex() async {
|
||||
widget.readerController.setMangaHistoryUpdate();
|
||||
await Future.delayed(const Duration(milliseconds: 1));
|
||||
_selectedValue = widget.readerController.getReaderMode();
|
||||
_axisHive(_selectedValue!, true);
|
||||
|
|
@ -171,7 +175,7 @@ class _MangaChapterPageGalleryState
|
|||
void _onPageChanged(int index) {
|
||||
ref
|
||||
.read(currentIndexProvider(widget.chapter).notifier)
|
||||
.setCurrentIndex(index);
|
||||
.setCurrentIndex(index, widget.readerController);
|
||||
_currentIndex = index;
|
||||
if (_imageDetailY != 0) {
|
||||
_imageDetailY = 0;
|
||||
|
|
@ -231,37 +235,6 @@ class _MangaChapterPageGalleryState
|
|||
}
|
||||
}
|
||||
|
||||
List<ItemPosition> _filterAndSortItems(Iterable<ItemPosition> positions) {
|
||||
positions = positions
|
||||
.where(
|
||||
(item) => !(item.itemTrailingEdge < 0 || item.itemLeadingEdge > 1))
|
||||
.toList();
|
||||
(positions as List<ItemPosition>).sort((a, b) => a.index - b.index);
|
||||
return positions;
|
||||
}
|
||||
|
||||
List<ItemPosition> getCurrentVisibleItems() {
|
||||
return _filterAndSortItems(_itemPositionsListener.itemPositions.value);
|
||||
}
|
||||
|
||||
void _readProgressListener() {
|
||||
int? firstImageIndex = getCurrentVisibleItems().firstOrNull?.index;
|
||||
|
||||
if (firstImageIndex == null) {
|
||||
return;
|
||||
}
|
||||
if (_currentIndex != firstImageIndex) {
|
||||
_recordReadProgress(firstImageIndex);
|
||||
}
|
||||
}
|
||||
|
||||
void _recordReadProgress(int index) {
|
||||
ref
|
||||
.read(currentIndexProvider(widget.chapter).notifier)
|
||||
.setCurrentIndex(index);
|
||||
_currentIndex = index;
|
||||
}
|
||||
|
||||
ReaderMode? _selectedValue;
|
||||
bool _isView = false;
|
||||
double maxScale = 4.1;
|
||||
|
|
|
|||
|
|
@ -1,3 +1,5 @@
|
|||
import 'dart:developer';
|
||||
|
||||
import 'package:isar/isar.dart';
|
||||
import 'package:mangayomi/main.dart';
|
||||
import 'package:mangayomi/models/chapter.dart';
|
||||
|
|
@ -36,7 +38,10 @@ class CurrentIndex extends _$CurrentIndex {
|
|||
return 0;
|
||||
}
|
||||
|
||||
setCurrentIndex(int currentIndex) {
|
||||
setCurrentIndex(int currentIndex, ReaderController readerController) {
|
||||
readerController.setMangaHistoryUpdate();
|
||||
readerController.setPageIndex(currentIndex);
|
||||
readerController.setChapterPageLastRead(currentIndex);
|
||||
state = currentIndex;
|
||||
}
|
||||
}
|
||||
|
|
@ -104,6 +109,7 @@ class ReaderController extends _$ReaderController {
|
|||
}
|
||||
|
||||
void setMangaHistoryUpdate() {
|
||||
// log("message");
|
||||
final incognitoMode = ref.watch(incognitoModeStateProvider);
|
||||
if (!incognitoMode) {
|
||||
isar.writeTxnSync(() {
|
||||
|
|
@ -126,6 +132,7 @@ class ReaderController extends _$ReaderController {
|
|||
.filter()
|
||||
.mangaIdEqualTo(getManga().id)
|
||||
.findFirstSync())!
|
||||
..chapter.value = chapter
|
||||
..date = DateTime.now().millisecondsSinceEpoch.toString();
|
||||
}
|
||||
isar.writeTxnSync(() {
|
||||
|
|
@ -135,7 +142,7 @@ class ReaderController extends _$ReaderController {
|
|||
}
|
||||
}
|
||||
|
||||
void setChapterPageLastRead(int pageIndex) async {
|
||||
void setChapterPageLastRead(int pageIndex) {
|
||||
final incognitoMode = ref.watch(incognitoModeStateProvider);
|
||||
if (!incognitoMode) {
|
||||
final chap = chapter;
|
||||
|
|
@ -231,6 +238,7 @@ class ReaderController extends _$ReaderController {
|
|||
}
|
||||
|
||||
void setPageIndex(int newIndex) {
|
||||
// log(newIndex.toString());
|
||||
final incognitoMode = ref.watch(incognitoModeStateProvider);
|
||||
if (!incognitoMode) {
|
||||
ref.watch(hiveBoxMangaProvider).put(
|
||||
|
|
|
|||
|
|
@ -64,7 +64,7 @@ class ReaderModeAdapter extends TypeAdapter<ReaderMode> {
|
|||
// RiverpodGenerator
|
||||
// **************************************************************************
|
||||
|
||||
String _$currentIndexHash() => r'c2b912af925d9efd3e36e7a810914ef11393c1da';
|
||||
String _$currentIndexHash() => r'eaabf2b9ecb9a1238da037e067a6a7759d4cbe27';
|
||||
|
||||
/// Copied from Dart SDK
|
||||
class _SystemHash {
|
||||
|
|
@ -181,7 +181,7 @@ class CurrentIndexProvider
|
|||
}
|
||||
}
|
||||
|
||||
String _$readerControllerHash() => r'cd0b65db9c027393d7b0f6cf1b7000847623364d';
|
||||
String _$readerControllerHash() => r'b2d6282fa0374c4762dc175142b13515080c5512';
|
||||
|
||||
abstract class _$ReaderController extends BuildlessAutoDisposeNotifier<void> {
|
||||
late final Chapter chapter;
|
||||
|
|
|
|||
Loading…
Reference in a new issue