import 'dart:io'; import 'package:downloadsfolder/downloadsfolder.dart'; import 'package:file_picker/file_picker.dart'; import 'package:flutter/material.dart'; import 'package:easy_localization/easy_localization.dart'; import 'package:filesystem_picker/filesystem_picker.dart'; import 'package:shared_preferences/shared_preferences.dart'; class Settings extends StatefulWidget { Settings({super.key}); @override State createState() => _SettingsState(); } class _SettingsState extends State { late Directory downloadFolder; late SharedPreferences prefs; Future _init() async { prefs = await SharedPreferences.getInstance(); Directory defaultDownloadDirectory = await getDownloadDirectory(); downloadFolder = Directory( prefs.getString('downloadFolder') ?? defaultDownloadDirectory.path); return 'ok'; } @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text('settings').tr(), ), body: FutureBuilder( future: _init(), builder: (BuildContext context, AsyncSnapshot snapshot) { if (snapshot.connectionState == ConnectionState.waiting) { return CircularProgressIndicator(); } else if (snapshot.hasError) { return Center(child: Text('Error: ${snapshot.error}')); } else if (snapshot.hasData) { return LayoutBuilder(builder: (BuildContext context, BoxConstraints viewportConstraints) { return viewportConstraints.maxHeight < double.infinity ? Center( child: Container( constraints: viewportConstraints, child: Column( children: [ SizedBox(height: 10), Text('settings').tr(), SizedBox(height: 10), Flexible( child: ListView( children: [ ListTile( title: Text('download_folder').tr(), subtitle: Text(downloadFolder.path), trailing: IconButton( icon: Icon(Icons.folder), onPressed: () async { String? selectedDirectory = await FilePicker.platform .getDirectoryPath(); if (selectedDirectory != null) { prefs.setString('downloadFolder', selectedDirectory); setState(() { downloadFolder = Directory(selectedDirectory); }); } }, ), ), ListTile( title: Text('language').tr(), subtitle: Text(context.locale.toString()).tr(), trailing: DropdownButton( items: context.supportedLocales .map((locale) { return DropdownMenuItem( value: locale.toString(), child: Text(locale.toString()).tr(), ); }).toList(), value: context.locale.toString(), onChanged: (String? value) => { if (value != null) { context.setLocale(Locale( value.split("_")[0], value.split("_")[1])), } }, ), ) ], )), ], ), ), ) : CircularProgressIndicator(); }); } else { return Center(child: Text('No data')); } }, )); } }