@@ -5,6 +5,7 @@ import 'package:get/get.dart';
55import 'package:miru_app/models/extension.dart' ;
66import 'package:miru_app/pages/detail/controller.dart' ;
77import 'package:miru_app/pages/detail/widgets/detail_continue_play.dart' ;
8+ import 'package:miru_app/utils/miru_storage.dart' ;
89import 'package:miru_app/widgets/card_tile.dart' ;
910import 'package:miru_app/utils/i18n.dart' ;
1011import 'package:miru_app/widgets/platform_widget.dart' ;
@@ -23,6 +24,7 @@ class _DetailEpisodesState extends State<DetailEpisodes> {
2324 List <fluent.ComboBoxItem <int >>? comboBoxItems;
2425 List <DropdownMenuItem <int >>? dropdownItems;
2526 late List <ExtensionEpisodeGroup > episodes = [];
27+ late String listMode = MiruStorage .getSetting (SettingKey .listMode);
2628
2729 Widget _buildAndroidEpisodes (BuildContext context) {
2830 return Column (
@@ -101,8 +103,23 @@ class _DetailEpisodesState extends State<DetailEpisodes> {
101103 } else {
102104 episodesString = 'reader.chapters' .i18n;
103105 }
104- return CardTile (
106+
107+ Widget cardTile (Widget child) {
108+ return CardTile (
105109 title: episodesString,
110+ leading: fluent.IconButton (
111+ icon: Icon (
112+ listMode == "grid"
113+ ? fluent.FluentIcons .view_list
114+ : fluent.FluentIcons .grid_view_medium,
115+ ),
116+ onPressed: () {
117+ setState (() {
118+ listMode == "grid" ? listMode = "list" : listMode = "grid" ;
119+ MiruStorage .setSetting (SettingKey .listMode, listMode);
120+ });
121+ },
122+ ),
106123 trailing: Row (
107124 children: [
108125 const DetailContinuePlay (),
@@ -118,12 +135,20 @@ class _DetailEpisodesState extends State<DetailEpisodes> {
118135 )
119136 ],
120137 ),
121- child: LayoutBuilder (builder: (context, constraints) {
122- return Container (
123- constraints: const BoxConstraints (
124- maxHeight: 500 ,
125- ),
126- child: GridView .builder (
138+ child: Container (
139+ constraints: const BoxConstraints (
140+ maxHeight: 500 ,
141+ ),
142+ child: child,
143+ ),
144+ );
145+ }
146+
147+ if (listMode == "grid" ) {
148+ return cardTile (
149+ LayoutBuilder (
150+ builder: (context, constraints) {
151+ return GridView .builder (
127152 shrinkWrap: true ,
128153 itemCount: episodes.isEmpty
129154 ? 0
@@ -149,9 +174,33 @@ class _DetailEpisodesState extends State<DetailEpisodes> {
149174 },
150175 );
151176 },
152- ),
177+ );
178+ },
179+ ),
180+ );
181+ }
182+
183+ return cardTile (
184+ ListView .builder (
185+ shrinkWrap: true ,
186+ padding: const EdgeInsets .all (0 ),
187+ itemCount:
188+ episodes.isEmpty ? 0 : episodes[c.selectEpGroup.value].urls.length,
189+ itemBuilder: (context, index) {
190+ return fluent.ListTile (
191+ title: Text (episodes[c.selectEpGroup.value].urls[index].name),
192+ onPressed: () {
193+ c.goWatch (
194+ context,
195+ episodes[c.selectEpGroup.value].urls,
196+ index,
197+ c.selectEpGroup.value,
198+ );
199+ },
153200 );
154- }));
201+ },
202+ ),
203+ );
155204 }
156205
157206 @override
0 commit comments