mirror of
https://github.com/kodjodevf/mangayomi.git
synced 2026-04-20 23:22:07 +00:00
reader controller & code refactor
This commit is contained in:
parent
6667edd5d1
commit
2f751044da
12 changed files with 907 additions and 564 deletions
|
|
@ -5,4 +5,7 @@ class HiveConstant {
|
|||
static String get hiveBoxMangaSource => "_manga_box_source_";
|
||||
static String get hiveBoxMangaFilter => "_manga_box_filter_";
|
||||
static String get hiveBoxAppSettings => "_app_box_settings_";
|
||||
static String get hiveBoxReaderSettings => "_reader_box_settings_";
|
||||
static String get hiveBoxReaderMode =>
|
||||
"_readerMode_box_settings_";
|
||||
}
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@ import 'package:mangayomi/models/manga_history.dart';
|
|||
import 'package:mangayomi/models/model_manga.dart';
|
||||
import 'package:mangayomi/router/router.dart';
|
||||
import 'package:mangayomi/source/source_model.dart';
|
||||
|
||||
import 'package:mangayomi/views/manga/reader/providers/reader_controller_provider.dart';
|
||||
import 'views/more/settings/appearance/flex_scheme_color_provider.dart';
|
||||
import 'views/more/settings/appearance/thememode_provider.dart';
|
||||
|
||||
|
|
@ -17,9 +17,11 @@ void main() async {
|
|||
Hive.registerAdapter(ModelMangaAdapter());
|
||||
Hive.registerAdapter(MangaHistoryModelAdapter());
|
||||
Hive.registerAdapter(SourceModelAdapter());
|
||||
Hive.registerAdapter(ReaderModeAdapter());
|
||||
Hive.registerAdapter(TypeSourceAdapter());
|
||||
await Hive.openBox<ModelManga>(HiveConstant.hiveBoxManga);
|
||||
await Hive.openBox<MangaHistoryModel>(HiveConstant.hiveBoxMangaHistory);
|
||||
await Hive.openBox<ReaderMode>(HiveConstant.hiveBoxReaderMode);
|
||||
await Hive.openBox<SourceModel>(HiveConstant.hiveBoxMangaSource);
|
||||
await Hive.openBox(HiveConstant.hiveBoxMangaInfo);
|
||||
await Hive.openBox(HiveConstant.hiveBoxMangaFilter);
|
||||
|
|
@ -36,7 +38,7 @@ class MyApp extends ConsumerWidget {
|
|||
ThemeData themeLight = FlexThemeData.light(
|
||||
colors: ref.watch(flexSchemeColorProvider),
|
||||
surfaceMode: FlexSurfaceMode.highScaffoldLevelSurface,
|
||||
blendLevel: 24,
|
||||
blendLevel: 10,
|
||||
appBarOpacity: 0.00,
|
||||
subThemesData: const FlexSubThemesData(
|
||||
blendOnLevel: 24,
|
||||
|
|
|
|||
|
|
@ -4,6 +4,7 @@ import 'package:mangayomi/constant.dart';
|
|||
import 'package:mangayomi/models/manga_history.dart';
|
||||
import 'package:mangayomi/models/model_manga.dart';
|
||||
import 'package:mangayomi/source/source_model.dart';
|
||||
import 'package:mangayomi/views/manga/reader/models/reader_model.dart';
|
||||
|
||||
final hiveBoxManga = Provider<Box<ModelManga>>((ref) {
|
||||
return Hive.box<ModelManga>(HiveConstant.hiveBoxManga);
|
||||
|
|
@ -12,10 +13,13 @@ final hiveBoxManga = Provider<Box<ModelManga>>((ref) {
|
|||
final hiveBoxMangaInfo = Provider<Box>((ref) {
|
||||
return Hive.box(HiveConstant.hiveBoxMangaInfo);
|
||||
});
|
||||
|
||||
final hiveBoxMangaHistory = Provider<Box<MangaHistoryModel>>((ref) {
|
||||
return Hive.box<MangaHistoryModel>(HiveConstant.hiveBoxMangaHistory);
|
||||
});
|
||||
|
||||
final hiveBoxReaderMode = Provider<Box<ReaderMode>>((ref) {
|
||||
return Hive.box<ReaderMode>(HiveConstant.hiveBoxReaderMode);
|
||||
});
|
||||
final hiveBoxMangaFilterProvider = Provider<Box>((ref) {
|
||||
return Hive.box(HiveConstant.hiveBoxMangaFilter);
|
||||
});
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@ part of 'get_manga_chapter_url.dart';
|
|||
// **************************************************************************
|
||||
|
||||
String _$getMangaChapterUrlHash() =>
|
||||
r'a41949b68549e776832151d8b3a595db72fabdd9';
|
||||
r'5e5976514a927de8ce729de832343edd98a96e6c';
|
||||
|
||||
/// Copied from Dart SDK
|
||||
class _SystemHash {
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@ part of 'get_manga_detail.dart';
|
|||
// RiverpodGenerator
|
||||
// **************************************************************************
|
||||
|
||||
String _$getMangaDetailHash() => r'4b0dd5315b3a1270722494045a7f9e3a3f455484';
|
||||
String _$getMangaDetailHash() => r'9079556aadc0a4b027620d3c5b75280268c022f8';
|
||||
|
||||
/// Copied from Dart SDK
|
||||
class _SystemHash {
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@ part of 'get_popular_manga.dart';
|
|||
// RiverpodGenerator
|
||||
// **************************************************************************
|
||||
|
||||
String _$getPopularMangaHash() => r'5addb8826c01045b532a53de957c6470294833ad';
|
||||
String _$getPopularMangaHash() => r'57e376026390038dbcf96f93b7a2e25a188d3156';
|
||||
|
||||
/// Copied from Dart SDK
|
||||
class _SystemHash {
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@ part of 'search_manga.dart';
|
|||
// RiverpodGenerator
|
||||
// **************************************************************************
|
||||
|
||||
String _$searchMangaHash() => r'18866e3523f085404fecaa91fa3bc1a7149724e6';
|
||||
String _$searchMangaHash() => r'e84374580686773aa67deb76ab91c00e2e6fab8b';
|
||||
|
||||
/// Copied from Dart SDK
|
||||
class _SystemHash {
|
||||
|
|
|
|||
|
|
@ -29,3 +29,25 @@ class ImageDetailInfo {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
double? initScale({
|
||||
required Size imageSize,
|
||||
required Size size,
|
||||
double? initialScale,
|
||||
}) {
|
||||
final double n1 = imageSize.height / imageSize.width;
|
||||
final double n2 = size.height / size.width;
|
||||
if (n1 > n2) {
|
||||
final FittedSizes fittedSizes =
|
||||
applyBoxFit(BoxFit.contain, imageSize, size);
|
||||
final Size destinationSize = fittedSizes.destination;
|
||||
return size.width / destinationSize.width;
|
||||
} else if (n1 / n2 < 1 / 4) {
|
||||
final FittedSizes fittedSizes =
|
||||
applyBoxFit(BoxFit.contain, imageSize, size);
|
||||
final Size destinationSize = fittedSizes.destination;
|
||||
return size.height / destinationSize.height;
|
||||
}
|
||||
|
||||
return initialScale;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -54,26 +54,3 @@ class _ImageViewHorizontalState extends State<ImageViewHorizontal> {
|
|||
}
|
||||
}
|
||||
|
||||
double? initScale({
|
||||
required Size imageSize,
|
||||
required Size size,
|
||||
double? initialScale,
|
||||
}) {
|
||||
final double n1 = imageSize.height / imageSize.width;
|
||||
final double n2 = size.height / size.width;
|
||||
if (n1 > n2) {
|
||||
final FittedSizes fittedSizes =
|
||||
applyBoxFit(BoxFit.contain, imageSize, size);
|
||||
//final Size sourceSize = fittedSizes.source;
|
||||
final Size destinationSize = fittedSizes.destination;
|
||||
return size.width / destinationSize.width;
|
||||
} else if (n1 / n2 < 1 / 4) {
|
||||
final FittedSizes fittedSizes =
|
||||
applyBoxFit(BoxFit.contain, imageSize, size);
|
||||
//final Size sourceSize = fittedSizes.source;
|
||||
final Size destinationSize = fittedSizes.destination;
|
||||
return size.height / destinationSize.height;
|
||||
}
|
||||
|
||||
return initialScale;
|
||||
}
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load diff
137
lib/views/manga/reader/providers/reader_controller_provider.dart
Normal file
137
lib/views/manga/reader/providers/reader_controller_provider.dart
Normal file
|
|
@ -0,0 +1,137 @@
|
|||
import 'package:mangayomi/models/manga_history.dart';
|
||||
import 'package:mangayomi/models/manga_reader.dart';
|
||||
import 'package:mangayomi/models/model_manga.dart';
|
||||
import 'package:mangayomi/providers/hive_provider.dart';
|
||||
import 'package:riverpod_annotation/riverpod_annotation.dart';
|
||||
import 'package:hive/hive.dart';
|
||||
part 'reader_controller_provider.g.dart';
|
||||
|
||||
@HiveType(typeId: 5)
|
||||
enum ReaderMode {
|
||||
@HiveField(1)
|
||||
vertical,
|
||||
@HiveField(2)
|
||||
ltr,
|
||||
@HiveField(3)
|
||||
rtl,
|
||||
@HiveField(4)
|
||||
verticalContinuous,
|
||||
@HiveField(5)
|
||||
webtoon
|
||||
}
|
||||
|
||||
@riverpod
|
||||
class CurrentIndex extends _$CurrentIndex {
|
||||
@override
|
||||
int build(MangaReaderModel mangaReaderModel) {
|
||||
return ref.watch(hiveBoxMangaInfo).get(
|
||||
"${mangaReaderModel.modelManga.source}/${mangaReaderModel.modelManga.name}/${mangaReaderModel.modelManga.chapterTitle![mangaReaderModel.index]}-page_index",
|
||||
defaultValue: 0);
|
||||
}
|
||||
|
||||
setCurrentIndex(int currentIndex) {
|
||||
state = currentIndex;
|
||||
}
|
||||
}
|
||||
|
||||
@riverpod
|
||||
class ReaderController extends _$ReaderController {
|
||||
@override
|
||||
void build({required MangaReaderModel mangaReaderModel}) {}
|
||||
|
||||
ModelManga getModelManga() {
|
||||
return mangaReaderModel.modelManga;
|
||||
}
|
||||
|
||||
ReaderMode getReaderMode() {
|
||||
return ref.watch(hiveBoxReaderMode).get(
|
||||
"${getSourceName()}/${getMangaName()}-singleMangaReaderModeValue",
|
||||
defaultValue: null) !=
|
||||
null
|
||||
? ref.watch(hiveBoxReaderMode).get(
|
||||
"${getSourceName()}/${getMangaName()}-singleMangaReaderModeValue",
|
||||
)!
|
||||
: ref
|
||||
.watch(hiveBoxReaderMode)
|
||||
.get("globalMangaReaderModeValue", defaultValue: ReaderMode.ltr)!;
|
||||
}
|
||||
|
||||
String getReaderModeValue(ReaderMode readerMode) {
|
||||
return readerMode == ReaderMode.vertical
|
||||
? 'Vertical'
|
||||
: readerMode == ReaderMode.verticalContinuous
|
||||
? 'Verical continuous'
|
||||
: readerMode == ReaderMode.ltr
|
||||
? 'Left to Right'
|
||||
: readerMode == ReaderMode.rtl
|
||||
? 'Right to Left'
|
||||
: 'Webtoon';
|
||||
}
|
||||
|
||||
void setReaderMode(ReaderMode newReaderMode) {
|
||||
ref.watch(hiveBoxReaderMode).put(
|
||||
"${getSourceName()}/${getMangaName()}-singleMangaReaderModeValue",
|
||||
newReaderMode);
|
||||
}
|
||||
|
||||
void setShowPageNumber(bool value) {
|
||||
ref
|
||||
.watch(hiveBoxMangaInfo)
|
||||
.put("${getSourceName()}/${getMangaName()}-showPagesNumber", value);
|
||||
}
|
||||
|
||||
bool getShowPageNumber() {
|
||||
return ref.watch(hiveBoxMangaInfo).get(
|
||||
"${getSourceName()}/${getMangaName()}-showPagesNumber",
|
||||
defaultValue: true);
|
||||
}
|
||||
|
||||
void setMangaHistoryUpdate() {
|
||||
ref.watch(hiveBoxMangaHistory).put(
|
||||
mangaReaderModel.modelManga.link,
|
||||
MangaHistoryModel(
|
||||
date: DateTime.now().toString(),
|
||||
modelManga: mangaReaderModel.modelManga));
|
||||
}
|
||||
|
||||
int getChapterIndex() {
|
||||
return mangaReaderModel.index;
|
||||
}
|
||||
|
||||
void setChapterIndex() {
|
||||
ref.watch(hiveBoxMangaInfo).put(
|
||||
"${getSourceName()}/${getMangaName()}-chapter_index",
|
||||
mangaReaderModel.index.toString());
|
||||
}
|
||||
|
||||
int getPageIndex() {
|
||||
return ref.watch(hiveBoxMangaInfo).get(
|
||||
"${getSourceName()}/${getMangaName()}/${getChapterTitle()}-page_index",
|
||||
defaultValue: 0);
|
||||
}
|
||||
|
||||
int getPageLength() {
|
||||
final page = ref.watch(hiveBoxMangaInfo).get(
|
||||
"${getSourceName()}/${getMangaName()}/${getChapterTitle()}-pageurl",
|
||||
) as List;
|
||||
return page.length;
|
||||
}
|
||||
|
||||
void setPageIndex(int newIndex) {
|
||||
ref.watch(hiveBoxMangaInfo).put(
|
||||
"${getSourceName()}/${getMangaName()}/${getChapterTitle()}-page_index",
|
||||
newIndex);
|
||||
}
|
||||
|
||||
String getMangaName() {
|
||||
return mangaReaderModel.modelManga.name!;
|
||||
}
|
||||
|
||||
String getSourceName() {
|
||||
return mangaReaderModel.modelManga.source!;
|
||||
}
|
||||
|
||||
String getChapterTitle() {
|
||||
return mangaReaderModel.modelManga.chapterTitle![mangaReaderModel.index];
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,281 @@
|
|||
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||
|
||||
part of 'reader_controller_provider.dart';
|
||||
|
||||
// **************************************************************************
|
||||
// TypeAdapterGenerator
|
||||
// **************************************************************************
|
||||
|
||||
class ReaderModeAdapter extends TypeAdapter<ReaderMode> {
|
||||
@override
|
||||
final int typeId = 5;
|
||||
|
||||
@override
|
||||
ReaderMode read(BinaryReader reader) {
|
||||
switch (reader.readByte()) {
|
||||
case 1:
|
||||
return ReaderMode.vertical;
|
||||
case 2:
|
||||
return ReaderMode.ltr;
|
||||
case 3:
|
||||
return ReaderMode.rtl;
|
||||
case 4:
|
||||
return ReaderMode.verticalContinuous;
|
||||
case 5:
|
||||
return ReaderMode.webtoon;
|
||||
default:
|
||||
return ReaderMode.vertical;
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
void write(BinaryWriter writer, ReaderMode obj) {
|
||||
switch (obj) {
|
||||
case ReaderMode.vertical:
|
||||
writer.writeByte(1);
|
||||
break;
|
||||
case ReaderMode.ltr:
|
||||
writer.writeByte(2);
|
||||
break;
|
||||
case ReaderMode.rtl:
|
||||
writer.writeByte(3);
|
||||
break;
|
||||
case ReaderMode.verticalContinuous:
|
||||
writer.writeByte(4);
|
||||
break;
|
||||
case ReaderMode.webtoon:
|
||||
writer.writeByte(5);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
int get hashCode => typeId.hashCode;
|
||||
|
||||
@override
|
||||
bool operator ==(Object other) =>
|
||||
identical(this, other) ||
|
||||
other is ReaderModeAdapter &&
|
||||
runtimeType == other.runtimeType &&
|
||||
typeId == other.typeId;
|
||||
}
|
||||
|
||||
// **************************************************************************
|
||||
// RiverpodGenerator
|
||||
// **************************************************************************
|
||||
|
||||
String _$currentIndexHash() => r'c7af574deb470887e689579dd1d0d8262f997ba0';
|
||||
|
||||
/// Copied from Dart SDK
|
||||
class _SystemHash {
|
||||
_SystemHash._();
|
||||
|
||||
static int combine(int hash, int value) {
|
||||
// ignore: parameter_assignments
|
||||
hash = 0x1fffffff & (hash + value);
|
||||
// ignore: parameter_assignments
|
||||
hash = 0x1fffffff & (hash + ((0x0007ffff & hash) << 10));
|
||||
return hash ^ (hash >> 6);
|
||||
}
|
||||
|
||||
static int finish(int hash) {
|
||||
// ignore: parameter_assignments
|
||||
hash = 0x1fffffff & (hash + ((0x03ffffff & hash) << 3));
|
||||
// ignore: parameter_assignments
|
||||
hash = hash ^ (hash >> 11);
|
||||
return 0x1fffffff & (hash + ((0x00003fff & hash) << 15));
|
||||
}
|
||||
}
|
||||
|
||||
abstract class _$CurrentIndex extends BuildlessAutoDisposeNotifier<int> {
|
||||
late final MangaReaderModel mangaReaderModel;
|
||||
|
||||
int build(
|
||||
MangaReaderModel mangaReaderModel,
|
||||
);
|
||||
}
|
||||
|
||||
/// See also [CurrentIndex].
|
||||
@ProviderFor(CurrentIndex)
|
||||
const currentIndexProvider = CurrentIndexFamily();
|
||||
|
||||
/// See also [CurrentIndex].
|
||||
class CurrentIndexFamily extends Family<int> {
|
||||
/// See also [CurrentIndex].
|
||||
const CurrentIndexFamily();
|
||||
|
||||
/// See also [CurrentIndex].
|
||||
CurrentIndexProvider call(
|
||||
MangaReaderModel mangaReaderModel,
|
||||
) {
|
||||
return CurrentIndexProvider(
|
||||
mangaReaderModel,
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
CurrentIndexProvider getProviderOverride(
|
||||
covariant CurrentIndexProvider provider,
|
||||
) {
|
||||
return call(
|
||||
provider.mangaReaderModel,
|
||||
);
|
||||
}
|
||||
|
||||
static const Iterable<ProviderOrFamily>? _dependencies = null;
|
||||
|
||||
@override
|
||||
Iterable<ProviderOrFamily>? get dependencies => _dependencies;
|
||||
|
||||
static const Iterable<ProviderOrFamily>? _allTransitiveDependencies = null;
|
||||
|
||||
@override
|
||||
Iterable<ProviderOrFamily>? get allTransitiveDependencies =>
|
||||
_allTransitiveDependencies;
|
||||
|
||||
@override
|
||||
String? get name => r'currentIndexProvider';
|
||||
}
|
||||
|
||||
/// See also [CurrentIndex].
|
||||
class CurrentIndexProvider
|
||||
extends AutoDisposeNotifierProviderImpl<CurrentIndex, int> {
|
||||
/// See also [CurrentIndex].
|
||||
CurrentIndexProvider(
|
||||
this.mangaReaderModel,
|
||||
) : super.internal(
|
||||
() => CurrentIndex()..mangaReaderModel = mangaReaderModel,
|
||||
from: currentIndexProvider,
|
||||
name: r'currentIndexProvider',
|
||||
debugGetCreateSourceHash:
|
||||
const bool.fromEnvironment('dart.vm.product')
|
||||
? null
|
||||
: _$currentIndexHash,
|
||||
dependencies: CurrentIndexFamily._dependencies,
|
||||
allTransitiveDependencies:
|
||||
CurrentIndexFamily._allTransitiveDependencies,
|
||||
);
|
||||
|
||||
final MangaReaderModel mangaReaderModel;
|
||||
|
||||
@override
|
||||
bool operator ==(Object other) {
|
||||
return other is CurrentIndexProvider &&
|
||||
other.mangaReaderModel == mangaReaderModel;
|
||||
}
|
||||
|
||||
@override
|
||||
int get hashCode {
|
||||
var hash = _SystemHash.combine(0, runtimeType.hashCode);
|
||||
hash = _SystemHash.combine(hash, mangaReaderModel.hashCode);
|
||||
|
||||
return _SystemHash.finish(hash);
|
||||
}
|
||||
|
||||
@override
|
||||
int runNotifierBuild(
|
||||
covariant CurrentIndex notifier,
|
||||
) {
|
||||
return notifier.build(
|
||||
mangaReaderModel,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
String _$readerControllerHash() => r'2925877651f6ffa41954e95ae4c4c6499364cfaf';
|
||||
|
||||
abstract class _$ReaderController extends BuildlessAutoDisposeNotifier<void> {
|
||||
late final MangaReaderModel mangaReaderModel;
|
||||
|
||||
void build({
|
||||
required MangaReaderModel mangaReaderModel,
|
||||
});
|
||||
}
|
||||
|
||||
/// See also [ReaderController].
|
||||
@ProviderFor(ReaderController)
|
||||
const readerControllerProvider = ReaderControllerFamily();
|
||||
|
||||
/// See also [ReaderController].
|
||||
class ReaderControllerFamily extends Family<void> {
|
||||
/// See also [ReaderController].
|
||||
const ReaderControllerFamily();
|
||||
|
||||
/// See also [ReaderController].
|
||||
ReaderControllerProvider call({
|
||||
required MangaReaderModel mangaReaderModel,
|
||||
}) {
|
||||
return ReaderControllerProvider(
|
||||
mangaReaderModel: mangaReaderModel,
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
ReaderControllerProvider getProviderOverride(
|
||||
covariant ReaderControllerProvider provider,
|
||||
) {
|
||||
return call(
|
||||
mangaReaderModel: provider.mangaReaderModel,
|
||||
);
|
||||
}
|
||||
|
||||
static const Iterable<ProviderOrFamily>? _dependencies = null;
|
||||
|
||||
@override
|
||||
Iterable<ProviderOrFamily>? get dependencies => _dependencies;
|
||||
|
||||
static const Iterable<ProviderOrFamily>? _allTransitiveDependencies = null;
|
||||
|
||||
@override
|
||||
Iterable<ProviderOrFamily>? get allTransitiveDependencies =>
|
||||
_allTransitiveDependencies;
|
||||
|
||||
@override
|
||||
String? get name => r'readerControllerProvider';
|
||||
}
|
||||
|
||||
/// See also [ReaderController].
|
||||
class ReaderControllerProvider
|
||||
extends AutoDisposeNotifierProviderImpl<ReaderController, void> {
|
||||
/// See also [ReaderController].
|
||||
ReaderControllerProvider({
|
||||
required this.mangaReaderModel,
|
||||
}) : super.internal(
|
||||
() => ReaderController()..mangaReaderModel = mangaReaderModel,
|
||||
from: readerControllerProvider,
|
||||
name: r'readerControllerProvider',
|
||||
debugGetCreateSourceHash:
|
||||
const bool.fromEnvironment('dart.vm.product')
|
||||
? null
|
||||
: _$readerControllerHash,
|
||||
dependencies: ReaderControllerFamily._dependencies,
|
||||
allTransitiveDependencies:
|
||||
ReaderControllerFamily._allTransitiveDependencies,
|
||||
);
|
||||
|
||||
final MangaReaderModel mangaReaderModel;
|
||||
|
||||
@override
|
||||
bool operator ==(Object other) {
|
||||
return other is ReaderControllerProvider &&
|
||||
other.mangaReaderModel == mangaReaderModel;
|
||||
}
|
||||
|
||||
@override
|
||||
int get hashCode {
|
||||
var hash = _SystemHash.combine(0, runtimeType.hashCode);
|
||||
hash = _SystemHash.combine(hash, mangaReaderModel.hashCode);
|
||||
|
||||
return _SystemHash.finish(hash);
|
||||
}
|
||||
|
||||
@override
|
||||
void runNotifierBuild(
|
||||
covariant ReaderController notifier,
|
||||
) {
|
||||
return notifier.build(
|
||||
mangaReaderModel: mangaReaderModel,
|
||||
);
|
||||
}
|
||||
}
|
||||
// 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
|
||||
Loading…
Reference in a new issue