Skip to content

Commit 6ffc55f

Browse files
committed
feat: save media info is its already loaded
1 parent 6e96fdb commit 6ffc55f

File tree

2 files changed

+27
-20
lines changed

2 files changed

+27
-20
lines changed

lib/Screens/Info/MediaScreen.dart

Lines changed: 21 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@ import '../../Theme/ThemeProvider.dart';
1414
import '../../Widgets/CachedNetworkImage.dart';
1515
import '../../Widgets/ScrollConfig.dart';
1616
import 'MediaScreenViewModel.dart';
17-
import 'Tabs/Watch/WatchPage.dart';
1817

1918
class MediaInfoPage extends StatefulWidget {
2019
final media mediaData;
@@ -27,26 +26,29 @@ class MediaInfoPage extends StatefulWidget {
2726

2827
class MediaInfoPageState extends State<MediaInfoPage> {
2928
int _selectedIndex = 0;
30-
final _viewModel = Get.put(MediaPageViewModel());
29+
late MediaPageViewModel _viewModel;
30+
3131
late media mediaData;
3232

3333
@override
3434
void initState() {
3535
super.initState();
36-
WidgetsBinding.instance.addPostFrameCallback((_) {
37-
_viewModel.reset();
38-
});
36+
_viewModel = Get.put(MediaPageViewModel(), tag: widget.mediaData.id.toString());
3937
load();
4038
}
4139

4240
var loaded = false;
4341

4442
Future<void> load() async {
4543
mediaData = widget.mediaData;
46-
mediaData = await _viewModel.getMediaDetails(widget.mediaData);
47-
setState(() {
48-
loaded = true;
49-
});
44+
45+
if (!_viewModel.dataLoaded.value) {
46+
mediaData = await _viewModel.getMediaDetails(widget.mediaData);
47+
} else {
48+
mediaData = _viewModel.cacheMediaData!;
49+
}
50+
51+
setState(() => loaded = true);
5052
}
5153

5254
@override
@@ -62,11 +64,13 @@ class MediaInfoPageState extends State<MediaInfoPage> {
6264
[
6365
Padding(
6466
padding: const EdgeInsets.symmetric(),
65-
child: loaded ? Column(
66-
mainAxisAlignment: MainAxisAlignment.start,
67-
crossAxisAlignment: CrossAxisAlignment.start,
68-
children: [_buildSliverContent()],
69-
) : const Center(child: CircularProgressIndicator()),
67+
child: loaded
68+
? Column(
69+
mainAxisAlignment: MainAxisAlignment.start,
70+
crossAxisAlignment: CrossAxisAlignment.start,
71+
children: [_buildSliverContent()],
72+
)
73+
: const Center(child: CircularProgressIndicator()),
7074
),
7175
],
7276
),
@@ -76,6 +80,7 @@ class MediaInfoPageState extends State<MediaInfoPage> {
7680
bottomNavigationBar: _buildBottomNavigationBar(),
7781
);
7882
}
83+
7984
Widget _buildSliverContent() {
8085
return IndexedStack(
8186
index: _selectedIndex,
@@ -90,7 +95,6 @@ class MediaInfoPageState extends State<MediaInfoPage> {
9095
);
9196
}
9297

93-
9498
BottomNavigationBar _buildBottomNavigationBar() {
9599
var isAnime = mediaData.anime != null;
96100
return BottomNavigationBar(
@@ -101,7 +105,8 @@ class MediaInfoPageState extends State<MediaInfoPage> {
101105
label: 'INFO',
102106
),
103107
BottomNavigationBarItem(
104-
icon: Icon(isAnime ? Icons.movie_filter_rounded : Icons.import_contacts),
108+
icon: Icon(
109+
isAnime ? Icons.movie_filter_rounded : Icons.import_contacts),
105110
label: isAnime ? 'WATCH' : 'READ',
106111
),
107112
const BottomNavigationBarItem(

lib/Screens/Info/MediaScreenViewModel.dart

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,14 +7,16 @@ import '../../api/Anilist/Anilist.dart';
77

88
class MediaPageViewModel extends GetxController {
99
var dataLoaded = false.obs;
10+
11+
media? cacheMediaData;
12+
1013
Future<media> getMediaDetails(media media) async {
1114
var data = await Anilist.query.mediaDetails(media);
1215
dataLoaded.value = true;
13-
return data ?? media;
14-
}
15-
reset(){
16-
dataLoaded.value = false;
16+
cacheMediaData = data ?? media;
17+
return cacheMediaData!;
1718
}
19+
1820
List<TextSpan> buildMediaDetailsSpans(media mediaData, BuildContext context) {
1921
final List<TextSpan> spans = [];
2022
var theme = Theme.of(context).colorScheme;

0 commit comments

Comments
 (0)