Refactor RadioListTile usage to RadioGroup in multiple screens

This commit is contained in:
Moustapha Kodjo Amadou 2025-08-24 11:33:11 +01:00
parent 6101d96c96
commit b11ae203ea
14 changed files with 554 additions and 539 deletions

View file

@ -127,23 +127,25 @@ class _SourcePreferenceWidgetState extends State<SourcePreferenceWidget> {
),
content: SizedBox(
width: context.width(0.8),
child: SuperListView.builder(
shrinkWrap: true,
itemCount: pref.entries!.length,
itemBuilder: (context, index) {
return RadioListTile(
dense: true,
contentPadding: const EdgeInsets.all(0),
value: index,
groupValue: pref.valueIndex,
onChanged: (value) {
Navigator.pop(context, index);
},
title: Row(
children: [Text(pref.entries![index])],
),
);
child: RadioGroup(
groupValue: pref.valueIndex,
onChanged: (value) {
Navigator.pop(context, value);
},
child: SuperListView.builder(
shrinkWrap: true,
itemCount: pref.entries!.length,
itemBuilder: (context, index) {
return RadioListTile(
dense: true,
contentPadding: const EdgeInsets.all(0),
value: index,
title: Row(
children: [Text(pref.entries![index])],
),
);
},
),
),
),
actions: [

View file

@ -64,7 +64,6 @@ class _HistoryScreenState extends ConsumerState<HistoryScreen>
}
bool _isSearch = false;
// List<History> _entriesData = []; // TODO. The variable is never used/modified
@override
Widget build(BuildContext context) {
final hideItems = ref.watch(hideItemsStateProvider);

View file

@ -1349,29 +1349,29 @@ class _MangaDetailViewState extends ConsumerState<MangaDetailView>
),
Consumer(
builder: (context, ref, chil) {
return Column(
children: [
RadioListTile(
dense: true,
title: Text(l10n.source_title),
value: "e",
groupValue: "e",
selected: true,
onChanged: (value) {},
),
RadioListTile(
dense: true,
title: Text(
widget.itemType != ItemType.anime
? l10n.chapter_number
: l10n.episode_number,
return RadioGroup(
groupValue: "e",
onChanged: (value) {},
child: Column(
children: [
RadioListTile(
dense: true,
title: Text(l10n.source_title),
value: "e",
selected: true,
),
value: "ej",
groupValue: "e",
selected: false,
onChanged: (value) {},
),
],
RadioListTile(
dense: true,
title: Text(
widget.itemType != ItemType.anime
? l10n.chapter_number
: l10n.episode_number,
),
value: "ej",
selected: false,
),
],
),
);
},
),

View file

@ -170,50 +170,45 @@ class _TrackerWidgetState extends ConsumerState<TrackerWidget> {
title: Text(l10n!.status),
content: SizedBox(
width: context.width(0.8),
child: SuperListView.builder(
shrinkWrap: true,
itemCount: ref
.read(
trackStateProvider(
track: widget.trackRes,
itemType: widget.itemType,
).notifier,
)
.getStatusList()
.length,
itemBuilder: (context, index) {
final status = ref
child: RadioGroup(
groupValue: toTrackStatus(
widget.trackRes.status,
widget.itemType,
widget.trackRes.syncId!,
),
onChanged: (value) {
// Individual RadioListTile will handle the change
},
child: SuperListView.builder(
shrinkWrap: true,
itemCount: ref
.read(
trackStateProvider(
track: widget.trackRes,
itemType: widget.itemType,
).notifier,
)
.getStatusList()[index];
return RadioListTile(
dense: true,
contentPadding: const EdgeInsets.all(0),
value: status,
groupValue: toTrackStatus(
widget.trackRes.status,
widget.itemType,
widget.trackRes.syncId!,
),
onChanged: (value) {
ref
.read(
trackStateProvider(
track: widget.trackRes
..status = status,
itemType: widget.itemType,
).notifier,
)
.updateManga();
Navigator.pop(context);
},
title: Text(getTrackStatus(status, context)),
);
},
.getStatusList()
.length,
itemBuilder: (context, index) {
final status = ref
.read(
trackStateProvider(
track: widget.trackRes,
itemType: widget.itemType,
).notifier,
)
.getStatusList()[index];
return RadioListTile(
dense: true,
contentPadding: const EdgeInsets.all(0),
value: status,
title: Text(
getTrackStatus(status, context),
),
);
},
),
),
),
actions: [

View file

@ -238,38 +238,29 @@ class _MangaHomeScreenState extends ConsumerState<MangaHomeScreen> {
return [
PopupMenuItem<int>(
value: 0,
child: RadioListTile(
title: Text(context.l10n.comfortable_grid),
value: DisplayType.comfortableGrid,
groupValue: displayType,
onChanged: (a) {
context.pop();
displayTypeNotifier.setMangaHomeDisplayType(a!);
},
),
),
PopupMenuItem<int>(
value: 1,
child: RadioListTile(
title: Text(context.l10n.compact_grid),
value: DisplayType.compactGrid,
groupValue: displayType,
onChanged: (a) {
context.pop();
displayTypeNotifier.setMangaHomeDisplayType(a!);
},
),
),
PopupMenuItem<int>(
value: 2,
child: RadioListTile(
title: Text(context.l10n.list),
value: DisplayType.list,
child: RadioGroup(
groupValue: displayType,
onChanged: (a) {
context.pop();
displayTypeNotifier.setMangaHomeDisplayType(a!);
},
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
RadioListTile(
title: Text(context.l10n.comfortable_grid),
value: DisplayType.comfortableGrid,
),
RadioListTile(
title: Text(context.l10n.compact_grid),
value: DisplayType.compactGrid,
),
RadioListTile(
title: Text(context.l10n.list),
value: DisplayType.list,
),
],
),
),
),
];

View file

@ -39,50 +39,48 @@ class DataAndStorage extends ConsumerWidget {
title: Text(l10n.download_location),
content: SizedBox(
width: context.width(0.8),
child: SuperListView(
shrinkWrap: true,
children: [
RadioListTile(
dense: true,
contentPadding: const EdgeInsets.all(0),
value: downloadLocationState.$2.isEmpty
? downloadLocationState.$1
: downloadLocationState.$2,
groupValue: downloadLocationState.$1,
onChanged: (value) {
child: RadioGroup(
groupValue: downloadLocationState.$2.isEmpty
? downloadLocationState.$1
: downloadLocationState.$2,
onChanged: (value) async {
if (value == downloadLocationState.$1) {
ref
.read(downloadLocationStateProvider.notifier)
.set("");
Navigator.pop(context);
} else {
String? result = await FilePicker.platform
.getDirectoryPath();
if (result != null) {
ref
.read(
downloadLocationStateProvider.notifier,
)
.set("");
Navigator.pop(context);
},
title: Text(downloadLocationState.$1),
),
RadioListTile(
dense: true,
contentPadding: const EdgeInsets.all(0),
value: downloadLocationState.$2.isEmpty
? downloadLocationState.$1
: downloadLocationState.$2,
groupValue: downloadLocationState.$2,
onChanged: (value) async {
String? result = await FilePicker.platform
.getDirectoryPath();
if (result != null) {
ref
.read(
downloadLocationStateProvider.notifier,
)
.set(result);
} else {}
if (!context.mounted) return;
Navigator.pop(context);
},
title: Text(l10n.custom_location),
),
],
.set(result);
} else {}
if (!context.mounted) return;
Navigator.pop(context);
}
},
child: SuperListView(
shrinkWrap: true,
children: [
RadioListTile(
dense: true,
contentPadding: const EdgeInsets.all(0),
value: downloadLocationState.$1,
title: Text(downloadLocationState.$1),
),
RadioListTile(
dense: true,
contentPadding: const EdgeInsets.all(0),
value: downloadLocationState.$2,
title: Text(l10n.custom_location),
),
],
),
),
),
actions: [
@ -275,24 +273,26 @@ class DataAndStorage extends ConsumerWidget {
title: Text(l10n.backup_frequency),
content: SizedBox(
width: context.width(0.8),
child: SuperListView.builder(
shrinkWrap: true,
itemCount: list.length,
itemBuilder: (context, index) {
return RadioListTile(
dense: true,
contentPadding: const EdgeInsets.all(0),
value: index,
groupValue: backupFrequency,
onChanged: (value) {
ref
.read(backupFrequencyStateProvider.notifier)
.set(value!);
Navigator.pop(context);
},
title: Row(children: [Text(list[index])]),
);
child: RadioGroup(
groupValue: backupFrequency,
onChanged: (value) {
ref
.read(backupFrequencyStateProvider.notifier)
.set(value!);
Navigator.pop(context);
},
child: SuperListView.builder(
shrinkWrap: true,
itemCount: list.length,
itemBuilder: (context, index) {
return RadioListTile(
dense: true,
contentPadding: const EdgeInsets.all(0),
value: index,
title: Row(children: [Text(list[index])]),
);
},
),
),
),
actions: [

View file

@ -146,25 +146,29 @@ class AppearanceScreen extends ConsumerWidget {
title: Text(l10n.app_language),
content: SizedBox(
width: context.width(0.8),
child: SuperListView.builder(
shrinkWrap: true,
itemCount: AppLocalizations.supportedLocales.length,
itemBuilder: (context, index) {
final locale = AppLocalizations.supportedLocales[index];
return RadioListTile(
dense: true,
contentPadding: const EdgeInsets.all(0),
value: locale,
groupValue: l10nLocale,
onChanged: (value) {
ref
.read(l10nLocaleStateProvider.notifier)
.setLocale(locale);
Navigator.pop(context);
},
title: Text(completeLanguageName(locale.toLanguageTag())),
);
child: RadioGroup(
groupValue: l10nLocale,
onChanged: (value) {
ref
.read(l10nLocaleStateProvider.notifier)
.setLocale(value!);
Navigator.pop(context);
},
child: SuperListView.builder(
shrinkWrap: true,
itemCount: AppLocalizations.supportedLocales.length,
itemBuilder: (context, index) {
final locale = AppLocalizations.supportedLocales[index];
return RadioListTile(
dense: true,
contentPadding: const EdgeInsets.all(0),
value: locale,
title: Text(
completeLanguageName(locale.toLanguageTag()),
),
);
},
),
),
),
actions: [
@ -276,28 +280,29 @@ class AppearanceScreen extends ConsumerWidget {
slivers: [
SliverPadding(
padding: const EdgeInsets.all(0),
sliver: SuperSliverList.builder(
itemCount: values.length,
itemBuilder: (context, index) {
final value = values[index];
return RadioListTile(
dense: true,
contentPadding:
const EdgeInsets.all(0),
value: value.value().fontFamily,
groupValue: appFontFamily,
onChanged: (value) {
ref
.read(
appFontFamilyProvider
.notifier,
)
.set(value);
Navigator.pop(context);
},
title: Text(value.key),
);
sliver: RadioGroup(
groupValue: appFontFamily,
onChanged: (value) {
ref
.read(
appFontFamilyProvider.notifier,
)
.set(value);
Navigator.pop(context);
},
child: SuperSliverList.builder(
itemCount: values.length,
itemBuilder: (context, index) {
final value = values[index];
return RadioListTile(
dense: true,
contentPadding:
const EdgeInsets.all(0),
value: value.value().fontFamily,
title: Text(value.key),
);
},
),
),
),
],
@ -364,28 +369,30 @@ class AppearanceScreen extends ConsumerWidget {
title: Text(l10n.relative_timestamp),
content: SizedBox(
width: context.width(0.8),
child: SuperListView.builder(
shrinkWrap: true,
itemCount: relativeTimestampsList(context).length,
itemBuilder: (context, index) {
return RadioListTile(
dense: true,
contentPadding: const EdgeInsets.all(0),
value: index,
groupValue: relativeTimestamps,
onChanged: (value) {
ref
.read(relativeTimesTampsStateProvider.notifier)
.set(value!);
Navigator.pop(context);
},
title: Row(
children: [
Text(relativeTimestampsList(context)[index]),
],
),
);
child: RadioGroup(
groupValue: relativeTimestamps,
onChanged: (value) {
ref
.read(relativeTimesTampsStateProvider.notifier)
.set(value!);
Navigator.pop(context);
},
child: SuperListView.builder(
shrinkWrap: true,
itemCount: relativeTimestampsList(context).length,
itemBuilder: (context, index) {
return RadioListTile(
dense: true,
contentPadding: const EdgeInsets.all(0),
value: index,
title: Row(
children: [
Text(relativeTimestampsList(context)[index]),
],
),
);
},
),
),
),
actions: [
@ -431,28 +438,30 @@ class AppearanceScreen extends ConsumerWidget {
title: Text(l10n.date_format),
content: SizedBox(
width: context.width(0.8),
child: SuperListView.builder(
shrinkWrap: true,
itemCount: dateFormatsList.length,
itemBuilder: (context, index) {
return RadioListTile(
dense: true,
contentPadding: const EdgeInsets.all(0),
value: dateFormatsList[index],
groupValue: dateFormatState,
onChanged: (value) {
ref.read(dateFormatStateProvider.notifier).set(value!);
Navigator.pop(context);
},
title: Row(
children: [
Text(
"${dateFormatsList[index]} (${dateFormat(context: context, DateTime.now().millisecondsSinceEpoch.toString(), useRelativeTimesTamps: false, dateFormat: dateFormatsList[index], ref: ref)})",
),
],
),
);
child: RadioGroup(
groupValue: dateFormatState,
onChanged: (value) {
ref.read(dateFormatStateProvider.notifier).set(value!);
Navigator.pop(context);
},
child: SuperListView.builder(
shrinkWrap: true,
itemCount: dateFormatsList.length,
itemBuilder: (context, index) {
return RadioListTile(
dense: true,
contentPadding: const EdgeInsets.all(0),
value: dateFormatsList[index],
title: Row(
children: [
Text(
"${dateFormatsList[index]} (${dateFormat(context: context, DateTime.now().millisecondsSinceEpoch.toString(), useRelativeTimesTamps: false, dateFormat: dateFormatsList[index], ref: ref)})",
),
],
),
);
},
),
),
),
actions: [

View file

@ -1,5 +1,3 @@
import 'dart:ui';
import 'package:flutter/widgets.dart';
import 'package:mangayomi/main.dart';
import 'package:mangayomi/models/settings.dart';

View file

@ -68,24 +68,26 @@ class _PlayerAudioScreenState extends ConsumerState<PlayerAudioScreen> {
title: Text(context.l10n.audio_channels),
content: SizedBox(
width: context.width(0.8),
child: SuperListView.builder(
shrinkWrap: true,
itemCount: values.length,
itemBuilder: (context, index) {
return RadioListTile(
dense: true,
contentPadding: const EdgeInsets.all(0),
value: values[index].$1,
groupValue: audioChannel,
onChanged: (value) {
ref
.read(audioChannelStateProvider.notifier)
.set(value!);
Navigator.pop(context);
},
title: Row(children: [Text(values[index].$2)]),
);
child: RadioGroup(
groupValue: audioChannel,
onChanged: (value) {
ref
.read(audioChannelStateProvider.notifier)
.set(value!);
Navigator.pop(context);
},
child: SuperListView.builder(
shrinkWrap: true,
itemCount: values.length,
itemBuilder: (context, index) {
return RadioListTile(
dense: true,
contentPadding: const EdgeInsets.all(0),
value: values[index].$1,
title: Row(children: [Text(values[index].$2)]),
);
},
),
),
),
actions: [

View file

@ -49,34 +49,36 @@ class _PlayerDecoderScreenState extends ConsumerState<PlayerDecoderScreen> {
title: Text(context.l10n.hwdec),
content: SizedBox(
width: context.width(0.8),
child: SuperListView.builder(
shrinkWrap: true,
itemCount: values.length,
itemBuilder: (context, index) {
return RadioListTile(
dense: true,
contentPadding: const EdgeInsets.all(0),
value: values[index].$1,
groupValue: hwdecMode,
onChanged: (value) {
ref
.read(
hwdecModeStateProvider(
rawValue: true,
).notifier,
)
.set(value!);
Navigator.pop(context);
},
title: Row(
children: [
Text(
"${values[index].$1} ${values[index].$2}",
),
],
),
);
child: RadioGroup(
groupValue: hwdecMode,
onChanged: (value) {
ref
.read(
hwdecModeStateProvider(
rawValue: true,
).notifier,
)
.set(value!);
Navigator.pop(context);
},
child: SuperListView.builder(
shrinkWrap: true,
itemCount: values.length,
itemBuilder: (context, index) {
return RadioListTile(
dense: true,
contentPadding: const EdgeInsets.all(0),
value: values[index].$1,
title: Row(
children: [
Text(
"${values[index].$1} ${values[index].$2}",
),
],
),
);
},
),
),
),
actions: [
@ -130,24 +132,26 @@ class _PlayerDecoderScreenState extends ConsumerState<PlayerDecoderScreen> {
title: Text(context.l10n.debanding),
content: SizedBox(
width: context.width(0.8),
child: SuperListView.builder(
shrinkWrap: true,
itemCount: values.length,
itemBuilder: (context, index) {
return RadioListTile(
dense: true,
contentPadding: const EdgeInsets.all(0),
value: values[index].$1,
groupValue: debandingType,
onChanged: (value) {
ref
.read(debandingStateProvider.notifier)
.set(value!);
Navigator.pop(context);
},
title: Row(children: [Text(values[index].$2)]),
);
child: RadioGroup(
groupValue: debandingType,
onChanged: (value) {
ref
.read(debandingStateProvider.notifier)
.set(value!);
Navigator.pop(context);
},
child: SuperListView.builder(
shrinkWrap: true,
itemCount: values.length,
itemBuilder: (context, index) {
return RadioListTile(
dense: true,
contentPadding: const EdgeInsets.all(0),
value: values[index].$1,
title: Row(children: [Text(values[index].$2)]),
);
},
),
),
),
actions: [

View file

@ -1,5 +1,3 @@
import 'dart:io';
import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:mangayomi/modules/more/settings/player/providers/player_state_provider.dart';
@ -49,30 +47,30 @@ class _PlayerScreenState extends ConsumerState<PlayerScreen> {
title: Text(context.l10n.default_subtitle_language),
content: SizedBox(
width: context.width(0.8),
child: SuperListView.builder(
shrinkWrap: true,
itemCount: AppLocalizations.supportedLocales.length,
itemBuilder: (context, index) {
final locale =
AppLocalizations.supportedLocales[index];
return RadioListTile(
dense: true,
contentPadding: const EdgeInsets.all(0),
value: locale,
groupValue: defaultSubtitleLang,
onChanged: (value) {
ref
.read(
defaultSubtitleLangStateProvider.notifier,
)
.setLocale(locale);
Navigator.pop(context);
},
title: Text(
completeLanguageName(locale.toLanguageTag()),
),
);
child: RadioGroup(
groupValue: defaultSubtitleLang,
onChanged: (value) {
ref
.read(defaultSubtitleLangStateProvider.notifier)
.setLocale(value!);
Navigator.pop(context);
},
child: SuperListView.builder(
shrinkWrap: true,
itemCount: AppLocalizations.supportedLocales.length,
itemBuilder: (context, index) {
final locale =
AppLocalizations.supportedLocales[index];
return RadioListTile(
dense: true,
contentPadding: const EdgeInsets.all(0),
value: locale,
title: Text(
completeLanguageName(locale.toLanguageTag()),
),
);
},
),
),
),
actions: [
@ -111,27 +109,30 @@ class _PlayerScreenState extends ConsumerState<PlayerScreen> {
title: Text(context.l10n.markEpisodeAsSeenSetting),
content: SizedBox(
width: context.width(0.8),
child: SuperListView.builder(
shrinkWrap: true,
itemCount: values.length,
itemBuilder: (context, index) {
return RadioListTile(
dense: true,
contentPadding: const EdgeInsets.all(0),
value: values[index],
groupValue: markEpisodeAsSeenType,
onChanged: (value) {
ref
.read(
markEpisodeAsSeenTypeStateProvider
.notifier,
)
.set(value!);
Navigator.pop(context);
},
title: Row(children: [Text("${values[index]}%")]),
);
child: RadioGroup(
groupValue: markEpisodeAsSeenType,
onChanged: (value) {
ref
.read(
markEpisodeAsSeenTypeStateProvider.notifier,
)
.set(value!);
Navigator.pop(context);
},
child: SuperListView.builder(
shrinkWrap: true,
itemCount: values.length,
itemBuilder: (context, index) {
return RadioListTile(
dense: true,
contentPadding: const EdgeInsets.all(0),
value: values[index],
title: Row(
children: [Text("${values[index]}%")],
),
);
},
),
),
),
actions: [
@ -241,27 +242,31 @@ class _PlayerScreenState extends ConsumerState<PlayerScreen> {
),
content: SizedBox(
width: context.width(0.8),
child: SuperListView.builder(
shrinkWrap: true,
itemCount: values.length,
itemBuilder: (context, index) {
return RadioListTile(
dense: true,
contentPadding: const EdgeInsets.all(0),
value: values[index],
groupValue: defaultDoubleTapToSkipLength,
onChanged: (value) {
ref
.read(
defaultDoubleTapToSkipLengthStateProvider
.notifier,
)
.set(value!);
Navigator.pop(context);
},
title: Row(children: [Text("${values[index]}s")]),
);
child: RadioGroup(
groupValue: defaultDoubleTapToSkipLength,
onChanged: (value) {
ref
.read(
defaultDoubleTapToSkipLengthStateProvider
.notifier,
)
.set(value!);
Navigator.pop(context);
},
child: SuperListView.builder(
shrinkWrap: true,
itemCount: values.length,
itemBuilder: (context, index) {
return RadioListTile(
dense: true,
contentPadding: const EdgeInsets.all(0),
value: values[index],
title: Row(
children: [Text("${values[index]}s")],
),
);
},
),
),
),
actions: [
@ -300,27 +305,30 @@ class _PlayerScreenState extends ConsumerState<PlayerScreen> {
title: Text(context.l10n.default_playback_speed_length),
content: SizedBox(
width: context.width(0.8),
child: SuperListView.builder(
shrinkWrap: true,
itemCount: values.length,
itemBuilder: (context, index) {
return RadioListTile(
dense: true,
contentPadding: const EdgeInsets.all(0),
value: values[index],
groupValue: defaultPlayBackSpeed,
onChanged: (value) {
ref
.read(
defaultPlayBackSpeedStateProvider
.notifier,
)
.set(value!);
Navigator.pop(context);
},
title: Row(children: [Text("x${values[index]}")]),
);
child: RadioGroup(
groupValue: defaultPlayBackSpeed,
onChanged: (value) {
ref
.read(
defaultPlayBackSpeedStateProvider.notifier,
)
.set(value!);
Navigator.pop(context);
},
child: SuperListView.builder(
shrinkWrap: true,
itemCount: values.length,
itemBuilder: (context, index) {
return RadioListTile(
dense: true,
contentPadding: const EdgeInsets.all(0),
value: values[index],
title: Row(
children: [Text("x${values[index]}")],
),
);
},
),
),
),
actions: [
@ -408,29 +416,31 @@ class _PlayerScreenState extends ConsumerState<PlayerScreen> {
),
content: SizedBox(
width: context.width(0.8),
child: SuperListView.builder(
shrinkWrap: true,
itemCount: values.length,
itemBuilder: (context, index) {
return RadioListTile(
dense: true,
contentPadding: const EdgeInsets.all(0),
value: values[index],
groupValue: aniSkipTimeoutLength,
onChanged: (value) {
ref
.read(
aniSkipTimeoutLengthStateProvider
.notifier,
)
.set(value!);
Navigator.pop(context);
},
title: Row(
children: [Text("${values[index]}s")],
),
);
child: RadioGroup(
groupValue: aniSkipTimeoutLength,
onChanged: (value) {
ref
.read(
aniSkipTimeoutLengthStateProvider
.notifier,
)
.set(value!);
Navigator.pop(context);
},
child: SuperListView.builder(
shrinkWrap: true,
itemCount: values.length,
itemBuilder: (context, index) {
return RadioListTile(
dense: true,
contentPadding: const EdgeInsets.all(0),
value: values[index],
title: Row(
children: [Text("${values[index]}s")],
),
);
},
),
),
),
actions: [

View file

@ -39,35 +39,35 @@ class ReaderScreen extends ConsumerWidget {
title: Text(context.l10n.default_reading_mode),
content: SizedBox(
width: context.width(0.8),
child: SuperListView.builder(
shrinkWrap: true,
itemCount: ReaderMode.values.length,
itemBuilder: (context, index) {
return RadioListTile(
dense: true,
contentPadding: const EdgeInsets.all(0),
value: ReaderMode.values[index],
groupValue: defaultReadingMode,
onChanged: (value) {
ref
.read(
defaultReadingModeStateProvider.notifier,
)
.set(value!);
Navigator.pop(context);
},
title: Row(
children: [
Text(
getReaderModeName(
ReaderMode.values[index],
context,
),
),
],
),
);
child: RadioGroup(
groupValue: defaultReadingMode,
onChanged: (value) {
ref
.read(defaultReadingModeStateProvider.notifier)
.set(value!);
Navigator.pop(context);
},
child: SuperListView.builder(
shrinkWrap: true,
itemCount: ReaderMode.values.length,
itemBuilder: (context, index) {
return RadioListTile(
dense: true,
contentPadding: const EdgeInsets.all(0),
value: ReaderMode.values[index],
title: Row(
children: [
Text(
getReaderModeName(
ReaderMode.values[index],
context,
),
),
],
),
);
},
),
),
),
actions: [
@ -105,31 +105,32 @@ class ReaderScreen extends ConsumerWidget {
title: Text(context.l10n.double_tap_animation_speed),
content: SizedBox(
width: context.width(0.8),
child: SuperListView.builder(
shrinkWrap: true,
itemCount: 3,
itemBuilder: (context, index) {
return RadioListTile(
dense: true,
contentPadding: const EdgeInsets.all(0),
value: index,
groupValue: doubleTapAnimationSpeed,
onChanged: (value) {
ref
.read(
doubleTapAnimationSpeedStateProvider
.notifier,
)
.set(value!);
Navigator.pop(context);
},
title: Row(
children: [
Text(getAnimationSpeedName(index, context)),
],
),
);
child: RadioGroup(
groupValue: doubleTapAnimationSpeed,
onChanged: (value) {
ref
.read(
doubleTapAnimationSpeedStateProvider.notifier,
)
.set(value!);
Navigator.pop(context);
},
child: SuperListView.builder(
shrinkWrap: true,
itemCount: 3,
itemBuilder: (context, index) {
return RadioListTile(
dense: true,
contentPadding: const EdgeInsets.all(0),
value: index,
title: Row(
children: [
Text(getAnimationSpeedName(index, context)),
],
),
);
},
),
),
),
actions: [
@ -167,33 +168,35 @@ class ReaderScreen extends ConsumerWidget {
title: Text(context.l10n.background_color),
content: SizedBox(
width: context.width(0.8),
child: SuperListView.builder(
shrinkWrap: true,
itemCount: BackgroundColor.values.length,
itemBuilder: (context, index) {
return RadioListTile(
dense: true,
contentPadding: const EdgeInsets.all(0),
value: BackgroundColor.values[index],
groupValue: backgroundColor,
onChanged: (value) {
ref
.read(backgroundColorStateProvider.notifier)
.set(value!);
Navigator.pop(context);
},
title: Row(
children: [
Text(
getBackgroundColorName(
BackgroundColor.values[index],
context,
),
),
],
),
);
child: RadioGroup(
groupValue: backgroundColor,
onChanged: (value) {
ref
.read(backgroundColorStateProvider.notifier)
.set(value!);
Navigator.pop(context);
},
child: SuperListView.builder(
shrinkWrap: true,
itemCount: BackgroundColor.values.length,
itemBuilder: (context, index) {
return RadioListTile(
dense: true,
contentPadding: const EdgeInsets.all(0),
value: BackgroundColor.values[index],
title: Row(
children: [
Text(
getBackgroundColorName(
BackgroundColor.values[index],
context,
),
),
],
),
);
},
),
),
),
actions: [
@ -301,32 +304,34 @@ class ReaderScreen extends ConsumerWidget {
title: Text(context.l10n.scale_type),
content: SizedBox(
width: context.width(0.8),
child: SuperListView.builder(
shrinkWrap: true,
itemCount: getScaleTypeNames(context).length,
itemBuilder: (context, index) {
return RadioListTile(
// dense: true,
contentPadding: const EdgeInsets.all(0),
value: index,
groupValue: scaleType.index,
onChanged: (value) {
ref
.read(scaleTypeStateProvider.notifier)
.set(ScaleType.values[value!]);
Navigator.pop(context);
},
title: Row(
children: [
Text(
getScaleTypeNames(
context,
)[index].toString(),
),
],
),
);
child: RadioGroup(
groupValue: scaleType.index,
onChanged: (value) {
ref
.read(scaleTypeStateProvider.notifier)
.set(ScaleType.values[value!]);
Navigator.pop(context);
},
child: SuperListView.builder(
shrinkWrap: true,
itemCount: getScaleTypeNames(context).length,
itemBuilder: (context, index) {
return RadioListTile(
// dense: true,
contentPadding: const EdgeInsets.all(0),
value: index,
title: Row(
children: [
Text(
getScaleTypeNames(
context,
)[index].toString(),
),
],
),
);
},
),
),
),
actions: [

View file

@ -65,30 +65,30 @@ class SyncScreen extends ConsumerWidget {
title: Text(l10n.sync_auto),
content: SizedBox(
width: context.width(0.8),
child: SuperListView.builder(
shrinkWrap: true,
itemCount: autoSyncOptions.length,
itemBuilder: (context, index) {
final optionName = autoSyncOptions.keys
.elementAt(index);
final optionValue = autoSyncOptions.values
.elementAt(index);
return RadioListTile(
dense: true,
contentPadding: const EdgeInsets.all(0),
value: optionValue,
groupValue: syncPreference.autoSyncFrequency,
onChanged: (value) {
ref
.read(
synchingProvider(syncId: 1).notifier,
)
.setAutoSyncFrequency(value!);
Navigator.pop(context);
},
title: Text(optionName),
);
child: RadioGroup(
groupValue: syncPreference.autoSyncFrequency,
onChanged: (value) {
ref
.read(synchingProvider(syncId: 1).notifier)
.setAutoSyncFrequency(value!);
Navigator.pop(context);
},
child: SuperListView.builder(
shrinkWrap: true,
itemCount: autoSyncOptions.length,
itemBuilder: (context, index) {
final optionName = autoSyncOptions.keys
.elementAt(index);
final optionValue = autoSyncOptions.values
.elementAt(index);
return RadioListTile(
dense: true,
contentPadding: const EdgeInsets.all(0),
value: optionValue,
title: Text(optionName),
);
},
),
),
),
actions: [

View file

@ -164,7 +164,7 @@ SPEC CHECKSUMS:
flutter_inappwebview_macos: c2d68649f9f8f1831bfcd98d73fd6256366d9d1d
flutter_qjs: cb2d0cba9deade1d03b89f6c432eac126f39482a
flutter_web_auth_2: 62b08da29f15a20fa63f144234622a1488d45b65
FlutterMacOS: 8f6f14fa908a6fb3fba0cd85dbd81ec4b251fb24
FlutterMacOS: d0db08ddef1a9af05a5ec4b724367152bb0500b1
isar_flutter_libs: a65381780401f81ad6bf3f2e7cd0de5698fb98c4
just_audio: 4e391f57b79cad2b0674030a00453ca5ce817eed
media_kit_libs_macos_video: 85a23e549b5f480e72cae3e5634b5514bc692f65