diff options
author | davidpkj <davidpenkow1@gmail.com> | 2023-03-11 17:54:46 +0100 |
---|---|---|
committer | davidpkj <davidpenkow1@gmail.com> | 2023-03-11 17:54:46 +0100 |
commit | 0570147b3104eb329207ff374541d9d6797fe427 (patch) | |
tree | 41da77cffc72c8a8e9329c9dde0bff3a4c7f9ecc /lib/views/recipe_view.dart | |
parent | c9acbf458ff90d37be76fa32aeb1a2591d87144f (diff) |
Updated code to dart analysis recommendations
Diffstat (limited to 'lib/views/recipe_view.dart')
-rw-r--r-- | lib/views/recipe_view.dart | 390 |
1 files changed, 0 insertions, 390 deletions
diff --git a/lib/views/recipe_view.dart b/lib/views/recipe_view.dart deleted file mode 100644 index 3aaa160..0000000 --- a/lib/views/recipe_view.dart +++ /dev/null @@ -1,390 +0,0 @@ -import 'dart:io'; - -import 'package:flutter/material.dart'; - -import 'package:kulinar_app/constants.dart'; -import 'package:kulinar_app/views/image_view.dart'; -import 'package:kulinar_app/models/recipe_class.dart'; -import 'package:kulinar_app/widgets/toastbar_widget.dart'; -import 'package:kulinar_app/widgets/custom_markdown_style.dart'; -import 'package:kulinar_app/models/data/recipe_data_class.dart'; -import 'package:kulinar_app/widgets/page_route_transitions.dart'; -import 'package:kulinar_app/widgets/utility_icon_row_widget.dart'; -import 'package:kulinar_app/models/data/shoplist_data_class.dart'; -import 'package:kulinar_app/models/data/settings_data_class.dart'; - -import 'package:flutter_markdown/flutter_markdown.dart'; -import 'package:path_provider/path_provider.dart'; -import 'package:image_picker/image_picker.dart'; -import 'package:share_plus/share_plus.dart'; - -import 'package:flutter_gen/gen_l10n/app_localizations.dart'; - -class RecipeView extends StatefulWidget { - const RecipeView({Key? key, this.remote = false, this.recipe, this.redrawCallback, this.showToastCallback}) : super(key: key); - - final bool remote; - final Recipe? recipe; - final Function? redrawCallback; - final Function? showToastCallback; - - @override - RecipeViewState createState() => RecipeViewState(); -} - -class RecipeViewState extends State<RecipeView> { - final GlobalKey<FormState> _formKey = GlobalKey<FormState>(); - final GlobalKey<ScaffoldState> _scaffoldKey = GlobalKey<ScaffoldState>(); - final TextEditingController _controller1 = TextEditingController(); - final TextEditingController _controller2 = TextEditingController(); - final FocusNode _detailsTitleFocus = FocusNode(); - final FocusNode _detailsTextFocus = FocusNode(); - Recipe _unsavedRecipe = Recipe(); - bool _isEditModeEnabled = false; - Recipe? _removedRecipe; - - @override - Widget build(BuildContext context) { - // TODO: Refactor to easier code - if (widget.recipe != null && _unsavedRecipe.isDefault()) _unsavedRecipe = widget.recipe!; - - if (_unsavedRecipe.isDefault()) { - _controller1.clear(); - _controller2.clear(); - _isEditModeEnabled = true; - } else { - _controller1.text = _unsavedRecipe.title ?? ""; - _controller2.text = _unsavedRecipe.description ?? ""; - } - - return Scaffold( - key: _scaffoldKey, - appBar: _buildAppBar(context, _unsavedRecipe), - body: GestureDetector( - onTap: () { - _detailsTextFocus.requestFocus(); - _controller2.selection = TextSelection.fromPosition(TextPosition(offset: _controller2.text.length)); - }, - child: Form( - key: _formKey, - child: ListView( - children: [ - _buildUtilityRow(), - _buildTitleInput(), - _buildImage(), - _buildDescriptionInput(), - ], - ), - ), - ), - ); - } - - void _cacheUnsavedRecipe() { - _unsavedRecipe.title = _controller1.text; - _unsavedRecipe.description = _controller2.text; - } - - void _addRecipe({Recipe? passedRecipe}) { - if (passedRecipe != null) { - RecipeData.recipeList.add(passedRecipe); - RecipeData.save(); - return; - } - - if (!_formKey.currentState!.validate()) return; - - _unsavedRecipe.title = _controller1.text; - _unsavedRecipe.description = _controller2.text; - - if (_isEditModeEnabled) { - if (!RecipeData.recipeList.contains(_unsavedRecipe)) RecipeData.recipeList.add(_unsavedRecipe); - RecipeData.save(); - } - - _isEditModeEnabled = false; - - if (widget.recipe == null) { - Navigator.pop(context); - } else { - setState(() {}); - } - } - - void _removeRecipe(BuildContext _) { - Navigator.pop(context); - RecipeData.recipeList.remove(widget.recipe); - RecipeData.save(); - - _removedRecipe = widget.recipe; - - String _content = AppLocalizations.of(context)!.removed; - String _actionLabel = AppLocalizations.of(context)!.undo; - - if (widget.showToastCallback != null) { - widget.showToastCallback!(_content, _actionLabel, () { - _addRecipe(passedRecipe: _removedRecipe); - widget.redrawCallback!(); - }); - } - - setState(() {}); - } - - // TODO: This might introduce bugs later (sanitize); maybe use FileHandler? - void downloadRecipe(BuildContext context, Recipe recipe) async { - RecipeData.recipeList.add(recipe); - ToastBar.showToastBar(context, AppLocalizations.of(context)!.downloadSuccess); - - setState(() {}); - } - - void _pickImage() async { - XFile? _pickedFile; - - if (SettingsData.settings["photoSource"] == "0") { - _pickedFile = await ImagePicker().pickImage(source: ImageSource.camera); - } else { - _pickedFile = await ImagePicker().pickImage(source: ImageSource.gallery); - } - - if (_pickedFile != null) { - Directory _directory = await getApplicationDocumentsDirectory(); - String _name = DateTime.now().millisecondsSinceEpoch.toString(); - File _file = File("${_directory.path}/$_name"); - - _file.writeAsBytes(await _pickedFile.readAsBytes()); - _unsavedRecipe.image = _file.path; - - RecipeData.save(); - } - - setState(() {}); - } - - void _removeImage() async { - _unsavedRecipe.image = null; - await RecipeData.save(); - - setState(() {}); - } - - Widget _buildUtilityRow() { - if (widget.remote) { - return const SizedBox( - height: 10.0, - width: double.infinity, - ); - } else { - // _buildAppBarPhotoActions(recipe), - return UtilityIconRow( - remote: widget.remote, - isEditModeEnabled: _isEditModeEnabled, - unsavedRecipe: _unsavedRecipe, - pickImageCallback: _pickImage, - removeImageCallback: _removeImage, - removeRecipeCallback: _removeRecipe, - downloadRecipeCallback: downloadRecipe, - cacheUnsavedRecipeCallback: _cacheUnsavedRecipe, - ); - } - } - - Widget _buildTitleInput() { - return Padding( - padding: const EdgeInsets.only(right: 20.0, left: 20.0), - child: TextFormField( - controller: _controller1, - style: cRecipeTitleStyle, - cursorColor: cPrimaryColor, - enabled: _isEditModeEnabled, - focusNode: _detailsTitleFocus, - textInputAction: TextInputAction.next, - decoration: InputDecoration( - hintText: AppLocalizations.of(context)!.inputHint, - hintStyle: cInputHintStyle, - ), - onFieldSubmitted: (_) { - _detailsTitleFocus.unfocus(); - FocusScope.of(context).requestFocus(_detailsTextFocus); - }, - validator: (input) { - if (input == "" || input!.trim().isEmpty) return AppLocalizations.of(context)!.inputError; - - return null; - }, - ), - ); - } - - Widget _buildImage() { - if (_unsavedRecipe.image != null) { - return Padding( - padding: const EdgeInsets.only(top: 12.0, left: 20.0, right: 20.0), - child: GestureDetector( - child: ClipRRect( - borderRadius: BorderRadius.circular(10.0), - child: Hero( - tag: "image", - child: Image( - image: FileImage( - File(_unsavedRecipe.image!), - ), - ), - ), - ), - onTap: () { - Navigator.push( - context, - FadeRoute(child: ImageView(image: _unsavedRecipe.image!)), - ); - }, - ), - ); - } - - return Container(); - } - - Widget _buildDescriptionInput() { - return Padding( - padding: const EdgeInsets.all(18.0), - child: _isEditModeEnabled ? _buildInputDescription() : _buildMarkdownDescription(), - ); - } - - TextField _buildInputDescription() { - return TextField( - expands: true, - maxLines: null, - minLines: null, - decoration: null, - controller: _controller2, - cursorColor: cPrimaryColor, - focusNode: _detailsTextFocus, - style: cRecipeDescriptionStyle, - enableInteractiveSelection: true, - toolbarOptions: const ToolbarOptions( - copy: true, - cut: true, - paste: true, - selectAll: true, - ), - ); - } - - MarkdownBody _buildMarkdownDescription() { - return MarkdownBody( - styleSheet: CustomMarkdownStyle.sheet(), - data: _controller2.text, - selectable: true, - onTapLink: (text, href, title) => {}, - imageBuilder: (uri, title, alt) => Container(), - // styleSheet: CustomMarkdownStyle(), - ); - } - - void _shareData(BuildContext _) { - Share.share("${_unsavedRecipe.title}\n\n${_unsavedRecipe.description}", subject: _unsavedRecipe.title); - } - - void _addToShoppingList(BuildContext _) { - final _ingredients = _unsavedRecipe.description!.split("\n")..retainWhere((element) => element.startsWith("- ")); - - if (_ingredients.isEmpty) { - widget.showToastCallback!(AppLocalizations.of(context)!.ingredientsError, "", () {}); - return; - } - - for (String _ingredient in _ingredients) { - String _item = _ingredient.substring(2).trim(); - - if (!ShoplistData.shoplist.contains(_item)) { - ShoplistData.shoplist.add(_item); - } - } - - ShoplistData.save(); - - if (widget.showToastCallback != null) { - widget.showToastCallback!(AppLocalizations.of(context)!.ingredientsAdded, "", () {}); - } - } - - void _uploadRecipe(BuildContext context) async { - return; - } - - List<Widget> _buildAppBarActions(BuildContext context, Recipe recipe) { - final _actionList = [_shareData, _addToShoppingList, _uploadRecipe, _removeRecipe]; - - List<Widget> _localActions = [ - _buildAppBarCheckActions(), - PopupMenuButton( - onSelected: (int value) => _actionList.elementAt(value)(context), - itemBuilder: (BuildContext context) => [ - PopupMenuItem<int>(value: 0, child: Text(AppLocalizations.of(context)!.menu1)), - PopupMenuItem<int>(value: 1, child: Text(AppLocalizations.of(context)!.menu2)), - PopupMenuItem<int>(value: 2, child: Text(AppLocalizations.of(context)!.menu3)), - PopupMenuItem<int>(value: 3, child: Text(AppLocalizations.of(context)!.menu4)), - ], - ), - ]; - - List<Widget> _remoteDownloadAction = [ - IconButton( - icon: const Icon(Icons.save_alt_rounded), - onPressed: () { - downloadRecipe(context, recipe); - }, - ), - ]; - - List<Widget> _remoteLookupAction = [ - const IconButton( - icon: Icon(Icons.menu_open_rounded), - onPressed: null, - ), - ]; - - if (widget.remote && RecipeData.recipeList.contains(recipe)) return _remoteLookupAction; - if (widget.remote) return _remoteDownloadAction; - - return _localActions; - } - - PreferredSizeWidget _buildAppBar(BuildContext context, Recipe recipe) { - String _title = AppLocalizations.of(context)!.mode1; - - if (_isEditModeEnabled) _title = AppLocalizations.of(context)!.mode2; - - return AppBar( - title: Text(_title), - leading: IconButton( - icon: const Icon(Icons.close), - onPressed: () { - Navigator.pop(context); - }, - ), - actions: _buildAppBarActions(context, recipe), - ); - } - - Widget _buildAppBarCheckActions() { - if (_isEditModeEnabled) { - return IconButton( - icon: const Icon(Icons.check), - onPressed: _addRecipe, - ); - } else { - return IconButton( - icon: const Icon(Icons.edit), - onPressed: () { - _isEditModeEnabled = true; - - setState(() {}); - }, - ); - } - } -} |