diff options
Diffstat (limited to 'lib/views/settings_view.dart')
-rw-r--r-- | lib/views/settings_view.dart | 184 |
1 files changed, 184 insertions, 0 deletions
diff --git a/lib/views/settings_view.dart b/lib/views/settings_view.dart new file mode 100644 index 0000000..7f2ae90 --- /dev/null +++ b/lib/views/settings_view.dart @@ -0,0 +1,184 @@ +import 'package:flutter/material.dart'; + +import 'package:kulinar_app/constants.dart'; +import 'package:kulinar_app/util/file_handler.dart'; +import 'package:kulinar_app/widgets/custom_drawer_widget.dart'; +import 'package:kulinar_app/models/data/recipe_data_class.dart'; +import 'package:kulinar_app/models/data/settings_data_class.dart'; + +import 'package:flutter_gen/gen_l10n/app_localizations.dart'; + +class SettingsView extends StatefulWidget { + const SettingsView({Key? key}) : super(key: key); + + @override + _SettingsViewState createState() => _SettingsViewState(); +} + +// TODO: Add subtitles +class _SettingsViewState extends State<SettingsView> { + final TextEditingController _controller = TextEditingController(); + final FocusNode _focusNode = FocusNode(); + + @override + void initState() { + super.initState(); + _controller.text = SettingsData.settings["serverURL"]!; + } + + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppBar(title: Text(AppLocalizations.of(context)!.category8)), + drawer: CustomDrawer(initalIndex: 5), + body: Builder( + builder: (BuildContext context) => ListView( + children: [ + _buildTinyTitle(AppLocalizations.of(context)!.settingTitle1), + ListTile( + title: Text(AppLocalizations.of(context)!.setting11, style: cDefaultTextStyle), + trailing: _buildShowPhotosDropDownButton(), + ), + _buildTinyTitle(AppLocalizations.of(context)!.settingTitle2), + ListTile( + title: Text(AppLocalizations.of(context)!.setting21, style: cDefaultTextStyle), + trailing: _buildPhotoSourceDropDownButton(), + ), + /* + ListTile( + title: Text(AppLocalizations.of(context)!.setting22, style: cDefaultTextStyle), + trailing: _buildServerIPInput(), + ), + */ + ListTile( + title: Text(AppLocalizations.of(context)!.setting22, style: cDefaultTextStyle), + trailing: IconButton( + icon: Icon(Icons.arrow_forward_rounded), + onPressed: null, // TODO: IMPLEMENT: specific server settings + ), + ), + _buildTinyTitle(AppLocalizations.of(context)!.settingTitle3), + ListTile( + title: Text(AppLocalizations.of(context)!.setting31, style: cDefaultTextStyle), + trailing: ElevatedButton( + child: Text(AppLocalizations.of(context)!.option311, style: cOptionTextStyle.copyWith(color: cIconColor)), + onPressed: () async { + final data = { + "recipes": RecipeData.encode(), + "settings": SettingsData.encode(), + }; + + await FileHandler.serializeFile(context, data); + + setState(() {}); + }, + ), + ), + ListTile( + title: Text(AppLocalizations.of(context)!.setting32, style: cDefaultTextStyle), + trailing: ElevatedButton( + child: Text(AppLocalizations.of(context)!.option312, style: cOptionTextStyle.copyWith(color: cIconColor)), + onPressed: () async { + final _file = await FileHandler.pickDeserializableFile(context); + + await FileHandler.deserializeFile(context, _file!); + + setState(() {}); + }, + ), + ), + ], + ), + ), + ); + } + + void _updateSettings(String text) { + _focusNode.unfocus(); + + if (text != null) { + SettingsData.settings["serverURL"] = text; + SettingsData.save(); + } + } + +/* + // TODO: Use later in direct settings? + Widget _buildServerIPInput() { + if (MediaQuery.of(context).viewInsets.bottom == 0) _updateSettings(null); + + return Container( + width: 150.0, + child: TextFormField( + keyboardType: TextInputType.url, + controller: _controller, + style: cRecipeTextStyle, + focusNode: _focusNode, + cursorColor: cPrimaryColor, + onEditingComplete: () { + _updateSettings(_controller.text); + }, + ), + ); + } +*/ + + Widget _buildPhotoSourceDropDownButton() { + return DropdownButton( + value: int.parse(SettingsData.settings["photoSource"]!), + items: [ + DropdownMenuItem( + child: Text(AppLocalizations.of(context)!.option111, style: cOptionTextStyle), + value: 0, + ), + DropdownMenuItem( + child: Text(AppLocalizations.of(context)!.option112, style: cOptionTextStyle), + value: 1, + ), + ], + onChanged: (value) { + SettingsData.settings["photoSource"] = value.toString(); + SettingsData.save(); + + setState(() {}); + }, + ); + } + + Widget _buildShowPhotosDropDownButton() { + return DropdownButton( + value: int.parse(SettingsData.settings["showPhotos"]!), + items: [ + DropdownMenuItem( + child: Text(AppLocalizations.of(context)!.option211, style: cOptionTextStyle), + value: 0, + ), + DropdownMenuItem( + child: Text(AppLocalizations.of(context)!.option212, style: cOptionTextStyle), + value: 1, + ), + DropdownMenuItem( + child: Text(AppLocalizations.of(context)!.option213, style: cOptionTextStyle), + value: 2, + ), + DropdownMenuItem( + child: Text(AppLocalizations.of(context)!.option214, style: cOptionTextStyle), + value: 3, + ), + ], + onChanged: (value) { + SettingsData.settings["showPhotos"] = value.toString(); + SettingsData.save(); + + setState(() {}); + }, + ); + } + + Widget _buildTinyTitle(String title) { + return Padding( + padding: const EdgeInsets.only(top: 15.0, left: 15.0), + child: Text(title, style: cTinyTitleStyle), + ); + } +} |