This commit is contained in:
Schnitzel5 2025-07-20 21:33:39 +02:00
parent 5b2f1b4f36
commit c6a142bcba
3 changed files with 24 additions and 29 deletions

View file

@ -39,21 +39,17 @@ class NovelReaderView extends ConsumerWidget {
late final Chapter chapter = isar.chapters.getSync(chapterId)!;
@override
Widget build(BuildContext context, WidgetRef ref) {
final htmlContent = ref.watch(getHtmlContentProvider(chapter: chapter));
final result = ref.watch(getHtmlContentProvider(chapter: chapter));
return NovelWebView(chapter: chapter, htmlContent: htmlContent);
return NovelWebView(chapter: chapter, result: result);
}
}
class NovelWebView extends ConsumerStatefulWidget {
const NovelWebView({
super.key,
required this.chapter,
required this.htmlContent,
});
const NovelWebView({super.key, required this.chapter, required this.result});
final Chapter chapter;
final AsyncValue<String> htmlContent;
final AsyncValue<(String, EpubBook?)> result;
@override
ConsumerState createState() {
@ -117,13 +113,6 @@ class _NovelWebViewState extends ConsumerState<NovelWebView>
fontSize = initFontSize;
});
});
if (widget.chapter.archivePath != null) {
final htmlFile = File(chapter.archivePath!);
if (htmlFile.existsSync()) {
final bytes = htmlFile.readAsBytesSync();
EpubReader.readBook(bytes).then((book) => epubBook = book);
}
}
}
late bool _isBookmarked = _readerController.getChapterBookmarked();
@ -217,8 +206,9 @@ class _NovelWebViewState extends ConsumerState<NovelWebView>
children: [
Row(
children: [
widget.htmlContent.when(
data: (htmlContent) {
widget.result.when(
data: (data) {
epubBook = data.$2;
Future.delayed(const Duration(milliseconds: 1000), () {
if (!scrolled && _scrollController.hasClients) {
_scrollController.animateTo(
@ -244,7 +234,7 @@ class _NovelWebViewState extends ConsumerState<NovelWebView>
physics: const BouncingScrollPhysics(),
slivers: [
HtmlWidget(
htmlContent,
data.$1,
customWidgetBuilder: (element) =>
_buildCustomWidgets(element),
customStylesBuilder: (element) {

View file

@ -11,7 +11,10 @@ import 'package:flutter_riverpod/flutter_riverpod.dart';
part 'get_html_content.g.dart';
@riverpod
Future<String> getHtmlContent(Ref ref, {required Chapter chapter}) async {
Future<(String, EpubBook?)> getHtmlContent(
Ref ref, {
required Chapter chapter,
}) async {
if (!chapter.manga.isLoaded) {
chapter.manga.loadSync();
}
@ -25,9 +28,9 @@ Future<String> getHtmlContent(Ref ref, {required Chapter chapter}) async {
? element.Title == chapter.name
: "Book" == chapter.name,
).firstOrNull;
return _buildHtml(tempChapter?.HtmlContent ?? "No content");
return (_buildHtml(tempChapter?.HtmlContent ?? "No content"), book);
}
return _buildHtml("Local epub file not found!");
return (_buildHtml("Local epub file not found!"), null);
}
final storageProvider = StorageProvider();
final mangaDirectory = await storageProvider.getMangaMainDirectory(chapter);
@ -52,7 +55,7 @@ Future<String> getHtmlContent(Ref ref, {required Chapter chapter}) async {
source!,
).getHtmlContent(chapter.manga.value!.name!, chapter.url!);
}
return _buildHtml(html.substring(1, html.length - 1));
return (_buildHtml(html.substring(1, html.length - 1)), null);
}
String _buildHtml(String input) {

View file

@ -6,7 +6,7 @@ part of 'get_html_content.dart';
// RiverpodGenerator
// **************************************************************************
String _$getHtmlContentHash() => r'828774796ea69f55cdde0106644bc06e42c2b5db';
String _$getHtmlContentHash() => r'19e6959d8fceb065b19c6c6d38cd1b5132a8ba94';
/// Copied from Dart SDK
class _SystemHash {
@ -34,7 +34,7 @@ class _SystemHash {
const getHtmlContentProvider = GetHtmlContentFamily();
/// See also [getHtmlContent].
class GetHtmlContentFamily extends Family<AsyncValue<String>> {
class GetHtmlContentFamily extends Family<AsyncValue<(String, EpubBook?)>> {
/// See also [getHtmlContent].
const GetHtmlContentFamily();
@ -72,7 +72,8 @@ class GetHtmlContentFamily extends Family<AsyncValue<String>> {
}
/// See also [getHtmlContent].
class GetHtmlContentProvider extends AutoDisposeFutureProvider<String> {
class GetHtmlContentProvider
extends AutoDisposeFutureProvider<(String, EpubBook?)> {
/// See also [getHtmlContent].
GetHtmlContentProvider({
required Chapter chapter,
@ -107,7 +108,7 @@ class GetHtmlContentProvider extends AutoDisposeFutureProvider<String> {
@override
Override overrideWith(
FutureOr<String> Function(GetHtmlContentRef provider) create,
FutureOr<(String, EpubBook?)> Function(GetHtmlContentRef provider) create,
) {
return ProviderOverride(
origin: this,
@ -124,7 +125,7 @@ class GetHtmlContentProvider extends AutoDisposeFutureProvider<String> {
}
@override
AutoDisposeFutureProviderElement<String> createElement() {
AutoDisposeFutureProviderElement<(String, EpubBook?)> createElement() {
return _GetHtmlContentProviderElement(this);
}
@ -144,13 +145,14 @@ class GetHtmlContentProvider extends AutoDisposeFutureProvider<String> {
@Deprecated('Will be removed in 3.0. Use Ref instead')
// ignore: unused_element
mixin GetHtmlContentRef on AutoDisposeFutureProviderRef<String> {
mixin GetHtmlContentRef on AutoDisposeFutureProviderRef<(String, EpubBook?)> {
/// The parameter `chapter` of this provider.
Chapter get chapter;
}
class _GetHtmlContentProviderElement
extends AutoDisposeFutureProviderElement<String> with GetHtmlContentRef {
extends AutoDisposeFutureProviderElement<(String, EpubBook?)>
with GetHtmlContentRef {
_GetHtmlContentProviderElement(super.provider);
@override