refactor: update chapter handling to use IDs instead of objects in reader views

This commit is contained in:
Moustapha Kodjo Amadou 2025-01-22 10:02:44 +01:00
parent e139dc3247
commit e901ef6281
5 changed files with 34 additions and 34 deletions

View file

@ -5,6 +5,7 @@ import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart' as riv;
import 'package:mangayomi/main.dart';
import 'package:mangayomi/models/chapter.dart';
import 'package:mangayomi/models/video.dart' as vid;
import 'package:mangayomi/modules/anime/providers/anime_player_controller_provider.dart';
@ -32,14 +33,15 @@ import 'package:path/path.dart' as path;
bool _isDesktop = Platform.isMacOS || Platform.isLinux || Platform.isWindows;
class AnimePlayerView extends riv.ConsumerStatefulWidget {
final Chapter episode;
const AnimePlayerView({super.key, required this.episode});
final int episodeId;
const AnimePlayerView({super.key, required this.episodeId});
@override
riv.ConsumerState<AnimePlayerView> createState() => _AnimePlayerViewState();
}
class _AnimePlayerViewState extends riv.ConsumerState<AnimePlayerView> {
late final Chapter episode = isar.chapters.getSync(widget.episodeId)!;
List<String> _infoHashList = [];
bool desktopFullScreenPlayer = false;
@override
@ -65,15 +67,13 @@ class _AnimePlayerViewState extends riv.ConsumerState<AnimePlayerView> {
@override
Widget build(BuildContext context) {
final serversData =
ref.watch(getVideoListProvider(episode: widget.episode));
final serversData = ref.watch(getVideoListProvider(episode: episode));
SystemChrome.setEnabledSystemUIMode(SystemUiMode.immersive);
return serversData.when(
data: (data) {
final (videos, isLocal, infoHashList) = data;
_infoHashList = infoHashList;
if (videos.isEmpty &&
!(widget.episode.manga.value!.isLocalArchive ?? false)) {
if (videos.isEmpty && !(episode.manga.value!.isLocalArchive ?? false)) {
return Scaffold(
backgroundColor: Theme.of(context).scaffoldBackgroundColor,
appBar: AppBar(
@ -91,7 +91,7 @@ class _AnimePlayerViewState extends riv.ConsumerState<AnimePlayerView> {
}
return AnimeStreamPage(
episode: widget.episode,
episode: episode,
videos: videos,
isLocal: isLocal,
isTorrent: infoHashList.isNotEmpty,

View file

@ -26,13 +26,13 @@ Future<void> pushMangaReaderView({
if (sourceExist || chapter.manga.value!.isLocalArchive!) {
switch (chapter.manga.value!.itemType) {
case ItemType.manga:
await context.push('/mangaReaderView', extra: chapter);
await context.push('/mangaReaderView', extra: chapter.id!);
break;
case ItemType.anime:
await context.push('/animePlayerView', extra: chapter);
await context.push('/animePlayerView', extra: chapter.id!);
break;
case ItemType.novel:
await context.push('/novelReaderView', extra: chapter);
await context.push('/novelReaderView', extra: chapter.id!);
break;
}
}
@ -42,13 +42,13 @@ void pushReplacementMangaReaderView(
{required BuildContext context, required Chapter chapter}) {
switch (chapter.manga.value!.itemType) {
case ItemType.manga:
context.pushReplacement('/mangaReaderView', extra: chapter);
context.pushReplacement('/mangaReaderView', extra: chapter.id!);
break;
case ItemType.anime:
context.pushReplacement('/animePlayerView', extra: chapter);
context.pushReplacement('/animePlayerView', extra: chapter.id!);
break;
case ItemType.novel:
context.pushReplacement('/novelReaderView', extra: chapter);
context.pushReplacement('/novelReaderView', extra: chapter.id!);
break;
}
}

View file

@ -48,12 +48,12 @@ import 'package:path/path.dart' as p;
typedef DoubleClickAnimationListener = void Function();
class MangaReaderView extends ConsumerWidget {
final Chapter chapter;
const MangaReaderView({
final int chapterId;
MangaReaderView({
super.key,
required this.chapter,
required this.chapterId,
});
late final Chapter chapter = isar.chapters.getSync(chapterId)!;
@override
Widget build(BuildContext context, WidgetRef ref) {
final chapterData = ref.watch(getChapterPagesProvider(

View file

@ -7,6 +7,7 @@ import 'package:flutter/services.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:flutter/material.dart';
import 'package:go_router/go_router.dart';
import 'package:mangayomi/main.dart';
import 'package:mangayomi/models/chapter.dart';
import 'package:mangayomi/models/page.dart';
import 'package:mangayomi/models/settings.dart';
@ -28,12 +29,12 @@ import 'package:flutter_widget_from_html/flutter_widget_from_html.dart';
typedef DoubleClickAnimationListener = void Function();
class NovelReaderView extends ConsumerWidget {
final Chapter chapter;
const NovelReaderView({
final int chapterId;
NovelReaderView({
super.key,
required this.chapter,
required this.chapterId,
});
late final Chapter chapter = isar.chapters.getSync(chapterId)!;
@override
Widget build(BuildContext context, WidgetRef ref) {
final htmlContent = ref.watch(getHtmlContentProvider(chapter: chapter));

View file

@ -2,7 +2,6 @@ import 'dart:io';
import 'package:bot_toast/bot_toast.dart';
import 'package:flutter/foundation.dart';
import 'package:go_router/go_router.dart';
import 'package:mangayomi/models/chapter.dart';
import 'package:mangayomi/models/manga.dart';
import 'package:mangayomi/models/source.dart';
import 'package:mangayomi/models/track_preference.dart';
@ -203,17 +202,17 @@ class RouterNotifier extends ChangeNotifier {
path: "/mangaReaderView",
name: "mangaReaderView",
builder: (context, state) {
final chapter = state.extra as Chapter;
final chapterId = state.extra as int;
return MangaReaderView(
chapter: chapter,
chapterId: chapterId,
);
},
pageBuilder: (context, state) {
final chapter = state.extra as Chapter;
final chapterId = state.extra as int;
return transitionPage(
key: state.pageKey,
child: MangaReaderView(
chapter: chapter,
chapterId: chapterId,
),
);
},
@ -222,17 +221,17 @@ class RouterNotifier extends ChangeNotifier {
path: "/animePlayerView",
name: "animePlayerView",
builder: (context, state) {
final episode = state.extra as Chapter;
final episodeId = state.extra as int;
return AnimePlayerView(
episode: episode,
episodeId: episodeId,
);
},
pageBuilder: (context, state) {
final episode = state.extra as Chapter;
final episodeId = state.extra as int;
return transitionPage(
key: state.pageKey,
child: AnimePlayerView(
episode: episode,
episodeId: episodeId,
),
);
},
@ -241,17 +240,17 @@ class RouterNotifier extends ChangeNotifier {
path: "/novelReaderView",
name: "novelReaderView",
builder: (context, state) {
final chapter = state.extra as Chapter;
final chapterId = state.extra as int;
return NovelReaderView(
chapter: chapter,
chapterId: chapterId,
);
},
pageBuilder: (context, state) {
final chapter = state.extra as Chapter;
final chapterId = state.extra as int;
return transitionPage(
key: state.pageKey,
child: NovelReaderView(
chapter: chapter,
chapterId: chapterId,
),
);
},