mangayomi/lib/modules/more/settings/downloads/downloads_screen.dart
2024-12-14 12:38:56 +02:00

116 lines
5.1 KiB
Dart

import 'package:file_picker/file_picker.dart';
import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:mangayomi/modules/more/settings/downloads/providers/downloads_state_provider.dart';
import 'package:mangayomi/providers/l10n_providers.dart';
import 'package:mangayomi/utils/extensions/build_context_extensions.dart';
class DownloadsScreen extends ConsumerStatefulWidget {
const DownloadsScreen({super.key});
@override
ConsumerState<DownloadsScreen> createState() => _DownloadsScreenState();
}
class _DownloadsScreenState extends ConsumerState<DownloadsScreen> {
@override
Widget build(
BuildContext context,
) {
final saveAsCBZArchiveState = ref.watch(saveAsCBZArchiveStateProvider);
final onlyOnWifiState = ref.watch(onlyOnWifiStateProvider);
final downloadLocationState = ref.watch(downloadLocationStateProvider);
ref.read(downloadLocationStateProvider.notifier).refresh();
final l10n = l10nLocalizations(context);
return Scaffold(
appBar: AppBar(
title: Text(l10n!.downloads),
),
body: SingleChildScrollView(
child: Column(
children: [
ListTile(
onTap: () {
showDialog(
context: context,
builder: (context) {
return AlertDialog(
title: Text(l10n.download_location),
content: SizedBox(
width: context.width(0.8),
child: ListView(
shrinkWrap: true,
children: [
RadioListTile(
dense: true,
contentPadding: const EdgeInsets.all(0),
value: downloadLocationState.$2.isEmpty
? downloadLocationState.$1
: downloadLocationState.$2,
groupValue: downloadLocationState.$1,
onChanged: (value) {
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)),
],
)),
actions: [
Row(
mainAxisAlignment: MainAxisAlignment.end,
children: [
TextButton(
onPressed: () async {
Navigator.pop(context);
},
child: Text(
l10n.cancel,
style: TextStyle(color: context.primaryColor),
)),
],
)
],
);
});
},
title: Text(l10n.download_location),
subtitle: Text(
downloadLocationState.$2.isEmpty ? downloadLocationState.$1 : downloadLocationState.$2,
style: TextStyle(fontSize: 11, color: context.secondaryColor),
),
),
SwitchListTile(
value: onlyOnWifiState,
title: Text(l10n.only_on_wifi),
onChanged: (value) {
ref.read(onlyOnWifiStateProvider.notifier).set(value);
}),
SwitchListTile(
value: saveAsCBZArchiveState,
title: Text(l10n.save_as_cbz_archive),
onChanged: (value) {
ref.read(saveAsCBZArchiveStateProvider.notifier).set(value);
}),
],
),
),
);
}
}