From 3e0e2409a2e86bf4b615cdb1c0ff55808b7d6510 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maty=C3=A1=C5=A1=20Caras?= Date: Mon, 22 Apr 2024 17:05:22 +0200 Subject: [PATCH] chore: publish version 1.1.1 (#43) Co-authored-by: Renovator Reviewed-on: https://git.mnau.xyz/hernik/prasule/pulls/43 --- .flutter | 2 +- CHANGELOG.md | 8 ++ CONTRIBUTING.md | 94 ++++++++++++++++++- lib/util/color_schemes.g.dart | 8 +- lib/util/graphs.dart | 3 +- lib/util/utils.dart | 2 +- lib/views/create_entry.dart | 40 ++++---- lib/views/create_recur_entry.dart | 42 ++++----- lib/views/graph_view.dart | 15 +-- lib/views/home.dart | 12 ++- lib/views/recurring_view.dart | 7 +- lib/views/settings/graph_type.dart | 2 +- lib/views/settings/settings.dart | 2 +- lib/views/setup.dart | 108 ++++++++++------------ pubspec.lock | 144 ++++++++++++++--------------- pubspec.yaml | 4 +- 16 files changed, 293 insertions(+), 200 deletions(-) diff --git a/.flutter b/.flutter index 1751123..312b9e8 160000 --- a/.flutter +++ b/.flutter @@ -1 +1 @@ -Subproject commit 1751123cde4ffad08ae27bdee4f8ddebd033fe76 +Subproject commit 312b9e81e93663b38f8e58d540be860fc75372b9 diff --git a/CHANGELOG.md b/CHANGELOG.md index f1f88fa..c4fdf39 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,11 @@ +# 1.1.1 +- Removed deprecated code +- Updated dependencies +- Fix wrong graph type upon opening graph view +- Fix text fields behaving unexpectedly +- Fix `Add new wallet` showing in the app bar when returning from another view +- Fix new wallet name being rewritten to the default placeholder + # 1.1.0 - Fix indicators for Pie Chart - Fix entries not showing up immediately after creation diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 18d512d..6cc5509 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,5 +1,95 @@ -# Localization +# Contributing to Prašule +Hello! I'm glad you want to contribute to Prašule. It is currently a one-man project, so I alwaýs appreciate more help. + +Below you can see all the different ways you can help the project. Make sure to read the sections carefully, if there's something you don't understand or feel like is missing, don't be afraid to create an issue or send me an e-mail. :) + +## Before contributing +Prašule is an open-source project, all code and assets are licensed under the GNU AGPL version 3 (see [LICENSE.md](https://git.mnau.xyz/hernik/prasule/src/commit/cff9f6c8c72156d7c9ee761d2e6c15b37218c166/LICENSE.md) for more details), unless otherwise stated. Localizations are published under [CC0 1.0](https://creativecommons.org/publicdomain/zero/1.0/deed.en). + +By contributing to this project you agree that you are the author of your contributions (or have the rights to publish them to this project) and that they will be published under the license of the contribution, depending if it's localization or code. + +## Localization [![Translation status](https://hosted.weblate.org/widget/prasule/287x66-grey.png)](https://hosted.weblate.org/engage/prasule/) -You can help with localization through Weblate, join the translation project on https://hosted.weblate.org/engage/prasule/ \ No newline at end of file +You can help with localization through Weblate, join the translation project on https://hosted.weblate.org/engage/prasule/ + +## Filing bug reports +Probably one of the easiest ways to help the project is to use the app and find bugs and other problems. Before submitting a issue, check the list of [open and closed issues](https://git.mnau.xyz/hernik/prasule/issues) so we don't have to deal with duplicates. + +If you ever find something, +file a new issue using the relevant template [here](https://git.mnau.xyz/hernik/prasule/issues/new/choose), make sure to fill up as much information as you can. + +Template preview: +```md +### Operating System + Version + + +### App version + + +### What was expected to happen + + +### What actually happened + + +### Relevant logs +``` +Paste your logs here + +Make sure it is a codebloc +``` + +### Steps to reproduce + + +- [] I have checked the [list of issues](https://git.mnau.xyz/hernik/prasule/issues) and I'm sure this is not a duplicate + +``` + +## Suggesting features +Features can be suggested using the same issue tracker, make sure to choose the feature request template when creating a [new issue](https://git.mnau.xyz/hernik/prasule/issues/new/choose). + +Template preview: +```md +- [] I have checked the [list of issues](https://git.mnau.xyz/hernik/prasule/issues) and I'm sure this is not a duplicate + + +### Is your feature request related to a bug or an issue? If yes, describe it or link it + + +### Describe your request, how you'd like it to be implemented etc. + +``` + +## Code contributions +Code contributions can either be bug fixes related to open issues or new features. First let's get you ready with a dev environment. + +### Running the app locally +To have everyone use the same Flutter version, this project uses [Flutter Wrapper](https://github.com/passsy/flutter_wrapper) for version management. The version is kept using git submodules, so when you're cloning the repo, make sure to add a `--recurse-submodules` flag to your clone command. + +Because the wrapper operates using a shell script, you'll have to use WSL on Windows or download the specific Flutter version. We use the `beta` update channel. After the project has cloned with the submodules, use `flutterw` (not `flutter`) for every Flutter command. + +Make sure to set up your device (debug mode or VM for Android, simulator or physical device for iOS) and run the development build using `./flutterw run`. The app should now install and run on your device. + +### Code conventions +This project uses the [very_good_analysis](https://pub.dev/packages/very_good_analysis) lint package (with minor edits seen in `analysis_options.yaml`). If you don't have an IDE that shows lints, you can check for lint errors using the `./flutterw analyze` command. Certain issues have automated fixes, but don't rely on them, they can make mistakes sometimes. + +Certain lint issues, like `lines_longer_than_80_chars`, can be ignored in certain scenarios, but try to have the code issue-free. + +### Submitting new code to the repo +First of all, fork the repo to your own profile and clone it (if you've already cloned it, change the remote URL: `git remote set-url origin https://git.mnau.xyz/YOUR_USERNAME/prasule.git` and pull any changes). + +The `main` branch contains only stable code ready for shipping, all development occurs on the `dev` branch, so create a new branch **from the `dev` branch**. There are no branch naming conventions, but if it's a new feature, it could be `feat-featurename`, for bug fixes `fix-issuename`. + +Check out your branch in your workspace and start coding. When you're done and want to commit your changes, make sure the commit message adheres the [Conventional Commits](https://www.conventionalcommits.org/en/v1.0.0/) specification. + +When all your changes are ready to be pushed to the main repo, submit a new [pull request](https://forgejo.org/docs/latest/user/pull-requests-and-git-flow/) **into the `dev` branch**. The PR will be reviewed by a maintainer, make sure to check back from time to time for any additional requests. + diff --git a/lib/util/color_schemes.g.dart b/lib/util/color_schemes.g.dart index 47200d1..05e9f27 100644 --- a/lib/util/color_schemes.g.dart +++ b/lib/util/color_schemes.g.dart @@ -20,11 +20,9 @@ const lightColorScheme = ColorScheme( errorContainer: Color(0xFFFFDAD6), onError: Color(0xFFFFFFFF), onErrorContainer: Color(0xFF410002), - background: Color(0xFFFBFDF8), - onBackground: Color(0xFF191C19), surface: Color(0xFFFBFDF8), onSurface: Color(0xFF191C19), - surfaceVariant: Color(0xFFDCE5DB), + surfaceContainerHighest: Color(0xFFDCE5DB), onSurfaceVariant: Color(0xFF414942), outline: Color(0xFF717971), onInverseSurface: Color(0xFFF0F1EC), @@ -54,11 +52,9 @@ const darkColorScheme = ColorScheme( errorContainer: Color(0xFF93000A), onError: Color(0xFF690005), onErrorContainer: Color(0xFFFFDAD6), - background: Color(0xFF191C19), - onBackground: Color(0xFFE1E3DE), surface: Color(0xFF191C19), onSurface: Color(0xFFE1E3DE), - surfaceVariant: Color(0xFF414942), + surfaceContainerHighest: Color(0xFF414942), onSurfaceVariant: Color(0xFFC0C9BF), outline: Color(0xFF8B938A), onInverseSurface: Color(0xFF191C19), diff --git a/lib/util/graphs.dart b/lib/util/graphs.dart index 3abf042..d125b36 100644 --- a/lib/util/graphs.dart +++ b/lib/util/graphs.dart @@ -71,7 +71,8 @@ class ExpensesLineChart extends StatelessWidget { LineChartData( lineTouchData: LineTouchData( touchTooltipData: LineTouchTooltipData( - tooltipBgColor: Theme.of(context).colorScheme.secondaryContainer, + getTooltipColor: (group) => + Theme.of(context).colorScheme.secondaryContainer, getTooltipItems: (spots) => List.generate( spots.length, (index) => LineTooltipItem( diff --git a/lib/util/utils.dart b/lib/util/utils.dart index 5c84324..ef466ae 100644 --- a/lib/util/utils.dart +++ b/lib/util/utils.dart @@ -12,7 +12,7 @@ void showAbout(BuildContext context) { context: context, applicationLegalese: AppLocalizations.of(context).license, applicationName: "Prašule", - applicationVersion: "1.1.0", + applicationVersion: "1.1.1", applicationIcon: const CircleAvatar( backgroundImage: AssetImage("assets/icon/full_ico.png"), ), diff --git a/lib/views/create_entry.dart b/lib/views/create_entry.dart index 26593f2..77d8492 100644 --- a/lib/views/create_entry.dart +++ b/lib/views/create_entry.dart @@ -16,7 +16,8 @@ class CreateSingleEntryView extends StatefulWidget { /// Used when user wants to add new entry const CreateSingleEntryView({ required this.w, - required this.locale, super.key, + required this.locale, + super.key, this.editEntry, }); @@ -28,6 +29,7 @@ class CreateSingleEntryView extends StatefulWidget { /// Is null unless we are editing an existing entry final WalletSingleEntry? editEntry; + /// Locale as set on user's system final String locale; @override @@ -36,6 +38,9 @@ class CreateSingleEntryView extends StatefulWidget { class _CreateSingleEntryViewState extends State { late WalletSingleEntry newEntry; + final _entryNameController = TextEditingController(); + final _entryBalanceController = TextEditingController(); + final _entryDescriptionController = TextEditingController(); @override void initState() { super.initState(); @@ -50,6 +55,9 @@ class _CreateSingleEntryViewState extends State { category: widget.w.categories.first, ); } + _entryNameController.text = newEntry.data.name; + _entryBalanceController.text = newEntry.data.amount.toString(); + _entryDescriptionController.text = newEntry.data.description; setState(() {}); } @@ -71,10 +79,7 @@ class _CreateSingleEntryViewState extends State { width: MediaQuery.of(context).size.width * 0.8, child: PlatformField( labelText: AppLocalizations.of(context).name, - controller: TextEditingController(text: newEntry.data.name), - onChanged: (v) { - newEntry.data.name = v; - }, + controller: _entryNameController, ), ), const SizedBox( @@ -84,9 +89,7 @@ class _CreateSingleEntryViewState extends State { width: MediaQuery.of(context).size.width * 0.8, child: PlatformField( labelText: AppLocalizations.of(context).amount, - controller: TextEditingController( - text: newEntry.data.amount.toString(), - ), + controller: _entryBalanceController, keyboardType: const TextInputType.numberWithOptions(decimal: true), inputFormatters: [ @@ -94,9 +97,6 @@ class _CreateSingleEntryViewState extends State { RegExp(r'\d+[\.,]{0,1}\d{0,}'), ), ], - onChanged: (v) { - newEntry.data.amount = double.parse(v); - }, ), ), const SizedBox( @@ -183,12 +183,7 @@ class _CreateSingleEntryViewState extends State { child: PlatformField( keyboardType: TextInputType.multiline, maxLines: null, - controller: TextEditingController( - text: newEntry.data.description, - ), - onChanged: (v) { - newEntry.data.description = v; - }, + controller: _entryDescriptionController, ), ), const SizedBox( @@ -197,10 +192,10 @@ class _CreateSingleEntryViewState extends State { Text(AppLocalizations.of(context).date), PlatformButton( style: ButtonStyle( - backgroundColor: MaterialStateProperty.all( + backgroundColor: WidgetStateProperty.all( Theme.of(context).colorScheme.primary, ), - foregroundColor: MaterialStateProperty.all( + foregroundColor: WidgetStateProperty.all( Theme.of(context).colorScheme.onPrimary, ), ), @@ -224,13 +219,18 @@ class _CreateSingleEntryViewState extends State { PlatformButton( text: AppLocalizations.of(context).save, onPressed: () { - if (newEntry.data.name.isEmpty) { + if (_entryNameController.text.isEmpty) { showMessage( AppLocalizations.of(context).errorEmptyName, context, ); return; } + newEntry.data.name = _entryNameController.text; + newEntry.data.amount = + double.parse(_entryBalanceController.text); + newEntry.data.description = + _entryDescriptionController.text; if (widget.editEntry != null) { Navigator.of(context).pop(newEntry); return; diff --git a/lib/views/create_recur_entry.dart b/lib/views/create_recur_entry.dart index be03897..5224277 100644 --- a/lib/views/create_recur_entry.dart +++ b/lib/views/create_recur_entry.dart @@ -7,7 +7,6 @@ import 'package:prasule/api/entry_data.dart'; import 'package:prasule/api/recurring_entry.dart'; import 'package:prasule/api/wallet.dart'; import 'package:prasule/api/wallet_manager.dart'; -import 'package:prasule/main.dart'; import 'package:prasule/pw/platformbutton.dart'; import 'package:prasule/pw/platformfield.dart'; import 'package:prasule/util/show_message.dart'; @@ -39,6 +38,10 @@ class CreateRecurringEntryView extends StatefulWidget { class _CreateRecurringEntryViewState extends State { late RecurringWalletEntry newEntry; + final _entryNameController = TextEditingController(); + final _entryBalanceController = TextEditingController(); + final _entryDescriptionController = TextEditingController(); + final _repeatAfterController = TextEditingController(); @override void initState() { super.initState(); @@ -55,6 +58,10 @@ class _CreateRecurringEntryViewState extends State { recurType: RecurType.month, ); } + _entryNameController.text = newEntry.data.name; + _entryBalanceController.text = newEntry.data.amount.toString(); + _entryDescriptionController.text = newEntry.data.description; + _repeatAfterController.text = newEntry.repeatAfter.toString(); setState(() {}); } @@ -76,10 +83,7 @@ class _CreateRecurringEntryViewState extends State { width: MediaQuery.of(context).size.width * 0.8, child: PlatformField( labelText: AppLocalizations.of(context).name, - controller: TextEditingController(text: newEntry.data.name), - onChanged: (v) { - newEntry.data.name = v; - }, + controller: _entryNameController, ), ), const SizedBox( @@ -89,9 +93,7 @@ class _CreateRecurringEntryViewState extends State { width: MediaQuery.of(context).size.width * 0.8, child: PlatformField( labelText: AppLocalizations.of(context).amount, - controller: TextEditingController( - text: newEntry.data.amount.toString(), - ), + controller: _entryBalanceController, keyboardType: const TextInputType.numberWithOptions(decimal: true), inputFormatters: [ @@ -99,10 +101,6 @@ class _CreateRecurringEntryViewState extends State { RegExp(r'\d+[\.,]{0,1}\d{0,}'), ), ], - onChanged: (v) { - logger.i(v); - newEntry.data.amount = double.parse(v); - }, ), ), const SizedBox( @@ -189,12 +187,7 @@ class _CreateRecurringEntryViewState extends State { child: PlatformField( keyboardType: TextInputType.multiline, maxLines: null, - controller: TextEditingController( - text: newEntry.data.description, - ), - onChanged: (v) { - newEntry.data.description = v; - }, + controller: _entryDescriptionController, ), ), const SizedBox( @@ -215,9 +208,7 @@ class _CreateRecurringEntryViewState extends State { SizedBox( width: 50, child: PlatformField( - controller: TextEditingController( - text: newEntry.repeatAfter.toString(), - ), + controller: _repeatAfterController, inputFormatters: [ FilteringTextInputFormatter.digitsOnly, FilteringTextInputFormatter.deny( @@ -313,13 +304,20 @@ class _CreateRecurringEntryViewState extends State { PlatformButton( text: AppLocalizations.of(context).save, onPressed: () { - if (newEntry.data.name.isEmpty) { + if (_entryNameController.text.isEmpty) { showMessage( AppLocalizations.of(context).errorEmptyName, context, ); return; } + newEntry.data.name = _entryNameController.text; + newEntry.data.amount = + double.parse(_entryBalanceController.text); + newEntry.repeatAfter = + int.parse(_repeatAfterController.text); + newEntry.data.description = + _entryDescriptionController.text; if (widget.editEntry != null) { Navigator.of(context).pop(newEntry); return; diff --git a/lib/views/graph_view.dart b/lib/views/graph_view.dart index 8531171..4a25c4c 100644 --- a/lib/views/graph_view.dart +++ b/lib/views/graph_view.dart @@ -97,7 +97,8 @@ class _GraphViewState extends State { super.initState(); loadWallet(); SharedPreferences.getInstance().then((s) { - chartType = s.getInt("monthlygraph") ?? 2; + chartType = s.getInt("yearlygraph") ?? 1; + logger.d(chartType); setState(() {}); }); } @@ -197,7 +198,9 @@ class _GraphViewState extends State { title: DropdownButton( value: (selectedWallet == null) ? -1 - : wallets.indexOf(selectedWallet!), + : wallets.indexOf( + wallets.where((w) => w.name == selectedWallet!.name).first, + ), items: [ ...wallets.map( (e) => DropdownMenuItem( @@ -333,7 +336,7 @@ class _GraphViewState extends State { ? Theme.of(context) .colorScheme .secondaryContainer - : Theme.of(context).colorScheme.background, + : Theme.of(context).colorScheme.surface, ), child: Padding( padding: const EdgeInsets.all(8), @@ -427,7 +430,7 @@ class _GraphViewState extends State { ? Theme.of(context) .colorScheme .secondaryContainer - : Theme.of(context).colorScheme.background, + : Theme.of(context).colorScheme.surface, ), width: MediaQuery.of(context).size.width * 0.95, height: MediaQuery.of(context).size.height * 0.4, @@ -557,7 +560,7 @@ class _GraphViewState extends State { ? Theme.of(context) .colorScheme .secondaryContainer - : Theme.of(context).colorScheme.background, + : Theme.of(context).colorScheme.surface, ), child: Padding( padding: const EdgeInsets.all(8), @@ -650,7 +653,7 @@ class _GraphViewState extends State { ? Theme.of(context) .colorScheme .secondaryContainer - : Theme.of(context).colorScheme.background, + : Theme.of(context).colorScheme.surface, ), width: MediaQuery.of(context).size.width * 0.95, height: MediaQuery.of(context).size.height * 0.4, diff --git a/lib/views/home.dart b/lib/views/home.dart index 23c82e9..64476ff 100644 --- a/lib/views/home.dart +++ b/lib/views/home.dart @@ -166,7 +166,11 @@ class _HomeViewState extends State { secondChild: DropdownButton( value: (selectedWallet == null) ? -1 - : wallets.indexOf(selectedWallet!), + : wallets.indexOf( + wallets + .where((w) => w.name == selectedWallet!.name) + .first, + ), items: [ ...wallets.map( (e) => DropdownMenuItem( @@ -355,7 +359,7 @@ class _HomeViewState extends State { style: TextStyle( color: Theme.of(context) .colorScheme - .onBackground, + .onSurface, ), ), TextSpan( @@ -405,7 +409,7 @@ class _HomeViewState extends State { style: TextStyle( color: Theme.of(context) .colorScheme - .onBackground, + .onSurface, ), ), ], @@ -590,7 +594,7 @@ class _HomeViewState extends State { style: TextStyle( color: Theme.of(context) .colorScheme - .background + .surface .calculateTextColor(), ), ), diff --git a/lib/views/recurring_view.dart b/lib/views/recurring_view.dart index faa6cde..c5edbaa 100644 --- a/lib/views/recurring_view.dart +++ b/lib/views/recurring_view.dart @@ -63,8 +63,11 @@ class _RecurringEntriesViewState extends State { drawer: makeDrawer(context, 3), appBar: AppBar( title: DropdownButton( - value: - (selectedWallet == null) ? -1 : wallets.indexOf(selectedWallet!), + value: (selectedWallet == null) + ? -1 + : wallets.indexOf( + wallets.where((w) => w.name == selectedWallet!.name).first, + ), items: [ ...wallets.map( (e) => DropdownMenuItem( diff --git a/lib/views/settings/graph_type.dart b/lib/views/settings/graph_type.dart index b946ba6..278d5b8 100644 --- a/lib/views/settings/graph_type.dart +++ b/lib/views/settings/graph_type.dart @@ -37,7 +37,7 @@ class _GraphTypeSettingsViewState extends State { body: SettingsList( applicationType: ApplicationType.both, darkTheme: SettingsThemeData( - settingsListBackground: Theme.of(context).colorScheme.background, + settingsListBackground: Theme.of(context).colorScheme.surface, titleTextColor: Theme.of(context).colorScheme.primary, ), sections: [ diff --git a/lib/views/settings/settings.dart b/lib/views/settings/settings.dart index 47ea3d1..0570525 100644 --- a/lib/views/settings/settings.dart +++ b/lib/views/settings/settings.dart @@ -42,7 +42,7 @@ class _SettingsViewState extends State { body: SettingsList( applicationType: ApplicationType.both, darkTheme: SettingsThemeData( - settingsListBackground: Theme.of(context).colorScheme.background, + settingsListBackground: Theme.of(context).colorScheme.surface, titleTextColor: Theme.of(context).colorScheme.primary, ), sections: [ diff --git a/lib/views/setup.dart b/lib/views/setup.dart index f07a572..f260887 100644 --- a/lib/views/setup.dart +++ b/lib/views/setup.dart @@ -49,60 +49,57 @@ class _SetupViewState extends State { }, ); List categories = []; - String name = ""; + final _nameController = TextEditingController(); final _balanceController = TextEditingController(text: "0.0"); @override void didChangeDependencies() { super.didChangeDependencies(); - if (categories.isEmpty) { - name = AppLocalizations.of(context).setupNamePlaceholder; - categories = [ - WalletCategory( - name: AppLocalizations.of(context).noCategory, - id: 0, - icon: IconData( - Icons.payments.codePoint, - fontFamily: 'MaterialIcons', - ), - color: Theme.of(context).colorScheme.secondary, + if (categories.isNotEmpty) return; + _nameController.text = AppLocalizations.of(context).setupNamePlaceholder; + categories = [ + WalletCategory( + name: AppLocalizations.of(context).noCategory, + id: 0, + icon: IconData( + Icons.payments.codePoint, + fontFamily: 'MaterialIcons', ), - WalletCategory( - name: AppLocalizations.of(context).categoryHealth, - id: 1, - icon: IconData( - Icons.medical_information.codePoint, - fontFamily: 'MaterialIcons', - ), - color: Colors.red.shade700 - .harmonizeWith(Theme.of(context).colorScheme.primary), + color: Theme.of(context).colorScheme.secondary, + ), + WalletCategory( + name: AppLocalizations.of(context).categoryHealth, + id: 1, + icon: IconData( + Icons.medical_information.codePoint, + fontFamily: 'MaterialIcons', ), - WalletCategory( - name: AppLocalizations.of(context).categoryCar, - id: 2, - icon: - IconData(Icons.car_repair.codePoint, fontFamily: 'MaterialIcons'), - color: Colors.purple - .harmonizeWith(Theme.of(context).colorScheme.primary), - ), - WalletCategory( - name: AppLocalizations.of(context).categoryFood, - id: 3, - icon: - IconData(Icons.restaurant.codePoint, fontFamily: 'MaterialIcons'), - color: Colors.green.shade700 - .harmonizeWith(Theme.of(context).colorScheme.primary), - ), - WalletCategory( - name: AppLocalizations.of(context).categoryTravel, - id: 4, - icon: IconData(Icons.train.codePoint, fontFamily: 'MaterialIcons'), - color: Colors.orange.shade700 - .harmonizeWith(Theme.of(context).colorScheme.primary), - ), - ]; - setState(() {}); - } + color: Colors.red.shade700 + .harmonizeWith(Theme.of(context).colorScheme.primary), + ), + WalletCategory( + name: AppLocalizations.of(context).categoryCar, + id: 2, + icon: IconData(Icons.car_repair.codePoint, fontFamily: 'MaterialIcons'), + color: + Colors.purple.harmonizeWith(Theme.of(context).colorScheme.primary), + ), + WalletCategory( + name: AppLocalizations.of(context).categoryFood, + id: 3, + icon: IconData(Icons.restaurant.codePoint, fontFamily: 'MaterialIcons'), + color: Colors.green.shade700 + .harmonizeWith(Theme.of(context).colorScheme.primary), + ), + WalletCategory( + name: AppLocalizations.of(context).categoryTravel, + id: 4, + icon: IconData(Icons.train.codePoint, fontFamily: 'MaterialIcons'), + color: Colors.orange.shade700 + .harmonizeWith(Theme.of(context).colorScheme.primary), + ), + ]; + setState(() {}); } @override @@ -135,7 +132,7 @@ class _SetupViewState extends State { back: Text(AppLocalizations.of(context).back), done: Text(AppLocalizations.of(context).finish), onDone: () async { - if (name.isEmpty) { + if (_nameController.text.isEmpty) { unawaited( showMessage( AppLocalizations.of(context).errorEmptyName, @@ -144,7 +141,8 @@ class _SetupViewState extends State { ); return; } - if (await WalletManager.exists(name) && context.mounted) { + if (await WalletManager.exists(_nameController.text) && + context.mounted) { unawaited( showMessage( AppLocalizations.of(context).walletExists, @@ -154,7 +152,7 @@ class _SetupViewState extends State { return; } final wallet = Wallet( - name: name, + name: _nameController.text, currency: _selectedCurrency, categories: categories, starterBalance: double.parse(_balanceController.text), @@ -232,15 +230,7 @@ class _SetupViewState extends State { children: [ SizedBox( width: MediaQuery.of(context).size.width * 0.7, - child: PlatformField( - controller: TextEditingController( - text: - AppLocalizations.of(context).setupNamePlaceholder, - ), - onChanged: (t) { - name = t; - }, - ), + child: PlatformField(controller: _nameController), ), const SizedBox( height: 5, diff --git a/pubspec.lock b/pubspec.lock index adbb95b..14ab21a 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -29,10 +29,10 @@ packages: dependency: transitive description: name: args - sha256: eef6c46b622e0494a36c5a12d10d77fb4e855501a91c1b9ef9339326e58f0596 + sha256: "7cf60b9f0cc88203c5a190b4cd62a99feea42759a7fa695010eb5de1c0b2252a" url: "https://pub.dev" source: hosted - version: "2.4.2" + version: "2.5.0" async: dependency: transitive description: @@ -85,10 +85,10 @@ packages: dependency: "direct dev" description: name: build_runner - sha256: "581bacf68f89ec8792f5e5a0b2c4decd1c948e97ce659dc783688c8a88fbec21" + sha256: "3ac61a79bfb6f6cc11f693591063a7f19a7af628dc52f141743edac5c16e8c22" url: "https://pub.dev" source: hosted - version: "2.4.8" + version: "2.4.9" build_runner_core: dependency: transitive description: @@ -109,10 +109,10 @@ packages: dependency: transitive description: name: built_value - sha256: fedde275e0a6b798c3296963c5cd224e3e1b55d0e478d5b7e65e6b540f363a0e + sha256: c7913a9737ee4007efedaffc968c049fd0f3d0e49109e778edc10de9426005cb url: "https://pub.dev" source: hosted - version: "8.9.1" + version: "8.9.2" characters: dependency: transitive description: @@ -189,34 +189,34 @@ packages: dependency: "direct main" description: name: cupertino_icons - sha256: d57953e10f9f8327ce64a508a355f0b1ec902193f66288e8cb5070e7c47eeb2d + sha256: ba631d1c7f7bef6b729a622b7b752645a2d076dba9976925b8f25725a30e1ee6 url: "https://pub.dev" source: hosted - version: "1.0.6" + version: "1.0.8" currency_picker: dependency: "direct main" description: name: currency_picker - sha256: eb75deb7bc92e3f31e1b8ad4efacf71371e8e49d7a0eebd1c1a8e9fae58cc23d + sha256: c9ab5c0da8ae4dcc6421064dccde072b44f5b44914691b967ea4cf45a266a658 url: "https://pub.dev" source: hosted - version: "2.0.20" + version: "2.0.21" dart_style: dependency: transitive description: name: dart_style - sha256: "40ae61a5d43feea6d24bd22c0537a6629db858963b99b4bc1c3db80676f32368" + sha256: "99e066ce75c89d6b29903d788a7bb9369cf754f7b24bf70bf4b6d6d6b26853b9" url: "https://pub.dev" source: hosted - version: "2.3.4" + version: "2.3.6" dio: dependency: "direct main" description: name: dio - sha256: "49af28382aefc53562459104f64d16b9dfd1e8ef68c862d5af436cc8356ce5a8" + sha256: "11e40df547d418cc0c4900a9318b26304e665da6fa4755399a9ff9efd09034b5" url: "https://pub.dev" source: hosted - version: "5.4.1" + version: "5.4.3+1" dots_indicator: dependency: transitive description: @@ -229,10 +229,10 @@ packages: dependency: "direct main" description: name: dynamic_color - sha256: a866f1f8947bfdaf674d7928e769eac7230388a2e7a2542824fad4bb5b87be3b + sha256: eae98052fa6e2826bdac3dd2e921c6ce2903be15c6b7f8b6d8a5d49b5086298d url: "https://pub.dev" source: hosted - version: "1.6.9" + version: "1.7.0" equatable: dependency: transitive description: @@ -277,26 +277,26 @@ packages: dependency: "direct main" description: name: fl_chart - sha256: "00b74ae680df6b1135bdbea00a7d1fc072a9180b7c3f3702e4b19a9943f5ed7d" + sha256: "2b7c1f5d867da9a054661641c8f499c55c47c39acccb97b3bc673f5fa9a39e74" url: "https://pub.dev" source: hosted - version: "0.66.2" + version: "0.67.0" flex_color_picker: dependency: "direct main" description: name: flex_color_picker - sha256: "0871edc170153cfc3de316d30625f40a85daecfa76ce541641f3cc0ec7757cbf" + sha256: "5c846437069fb7afdd7ade6bf37e628a71d2ab0787095ddcb1253bf9345d5f3a" url: "https://pub.dev" source: hosted - version: "3.3.1" + version: "3.4.1" flex_seed_scheme: dependency: transitive description: name: flex_seed_scheme - sha256: "29c12aba221eb8a368a119685371381f8035011d18de5ba277ad11d7dfb8657f" + sha256: "4cee2f1d07259f77e8b36f4ec5f35499d19e74e17c7dce5b819554914082bc01" url: "https://pub.dev" source: hosted - version: "1.4.0" + version: "1.5.0" flutter: dependency: "direct main" description: flutter @@ -327,10 +327,10 @@ packages: dependency: transitive description: name: flutter_keyboard_visibility - sha256: "4983655c26ab5b959252ee204c2fffa4afeb4413cd030455194ec0caa3b8e7cb" + sha256: "98664be7be0e3ffca00de50f7f6a287ab62c763fc8c762e0a21584584a3ff4f8" url: "https://pub.dev" source: hosted - version: "5.4.1" + version: "6.0.0" flutter_keyboard_visibility_linux: dependency: transitive description: @@ -383,10 +383,10 @@ packages: dependency: "direct dev" description: name: flutter_lints - sha256: e2a421b7e59244faef694ba7b30562e489c2b489866e505074eb005cd7060db7 + sha256: "9e8c3858111da373efc5aa341de011d9bd23e2c5c5e0c62bccf32438e192d7b1" url: "https://pub.dev" source: hosted - version: "3.0.1" + version: "3.0.2" flutter_localizations: dependency: "direct main" description: flutter @@ -396,10 +396,10 @@ packages: dependency: "direct main" description: name: flutter_slidable - sha256: "19ed4813003a6ff4e9c6bcce37e792a2a358919d7603b2b31ff200229191e44c" + sha256: "673403d2eeef1f9e8483bd6d8d92aae73b1d8bd71f382bc3930f699c731bc27c" url: "https://pub.dev" source: hosted - version: "3.0.1" + version: "3.1.0" flutter_speed_dial: dependency: "direct main" description: @@ -430,10 +430,10 @@ packages: dependency: "direct main" description: name: fluttertoast - sha256: dfdde255317af381bfc1c486ed968d5a43a2ded9c931e87cbecd88767d6a71c1 + sha256: "81b68579e23fcbcada2db3d50302813d2371664afe6165bc78148050ab94bf66" url: "https://pub.dev" source: hosted - version: "8.2.4" + version: "8.2.5" font_awesome_flutter: dependency: transitive description: @@ -446,10 +446,10 @@ packages: dependency: transitive description: name: frontend_server_client - sha256: "408e3ca148b31c20282ad6f37ebfa6f4bdc8fede5b74bc2f08d9d92b55db3612" + sha256: f64a0333a82f30b0cca061bc3d143813a486dc086b574bfb233b7c1372427694 url: "https://pub.dev" source: hosted - version: "3.2.0" + version: "4.0.0" fuchsia_remote_debug_protocol: dependency: transitive description: flutter @@ -512,18 +512,18 @@ packages: dependency: "direct main" description: name: intl - sha256: "3bc132a9dbce73a7e4a21a17d06e1878839ffbf975568bc875c60537824b0c4d" + sha256: d6f56758b7d3014a48af9701c085700aac781a92a87a62b1333b46d8879661cf url: "https://pub.dev" source: hosted - version: "0.18.1" + version: "0.19.0" introduction_screen: dependency: "direct main" description: name: introduction_screen - sha256: "72d25ceb71471773783f72783608e17585af93d4bc6474df577fcfe9e7842852" + sha256: "325f26e86fa3c3e86e6ab2bbc1fda860c9e6eae5ff29166fc2a3cab8f710d5b5" url: "https://pub.dev" source: hosted - version: "3.1.12" + version: "3.1.14" io: dependency: transitive description: @@ -560,26 +560,26 @@ packages: dependency: transitive description: name: leak_tracker - sha256: cdd14e3836065a1f6302a236ec8b5f700695c803c57ae11a1c84df31e6bcf831 + sha256: "7f0df31977cb2c0b88585095d168e689669a2cc9b97c309665e3386f3e9d341a" url: "https://pub.dev" source: hosted - version: "10.0.3" + version: "10.0.4" leak_tracker_flutter_testing: dependency: transitive description: name: leak_tracker_flutter_testing - sha256: "9b2ef90589911d665277464e0482b209d39882dffaaf4ef69a3561a3354b2ebc" + sha256: "06e98f569d004c1315b991ded39924b21af84cf14cc94791b8aea337d25b57f8" url: "https://pub.dev" source: hosted - version: "3.0.2" + version: "3.0.3" leak_tracker_testing: dependency: transitive description: name: leak_tracker_testing - sha256: fd3cd66cb2bcd7b50dcd3b413af49d78051f809c8b3f6e047962765c15a0d23d + sha256: "6ba465d5d76e67ddf503e1161d1f4a6bc42306f9d66ca1e8f079a47290fb06d3" url: "https://pub.dev" source: hosted - version: "3.0.0" + version: "3.0.1" lints: dependency: transitive description: @@ -592,10 +592,10 @@ packages: dependency: "direct main" description: name: logger - sha256: "6bbb9d6f7056729537a4309bda2e74e18e5d9f14302489cc1e93f33b3fe32cac" + sha256: "8c94b8c219e7e50194efc8771cd0e9f10807d8d3e219af473d89b06cc2ee4e04" url: "https://pub.dev" source: hosted - version: "2.0.2+1" + version: "2.2.0" logging: dependency: transitive description: @@ -624,10 +624,10 @@ packages: dependency: transitive description: name: meta - sha256: d584fa6707a52763a52446f02cc621b077888fb63b93bbcb1143a7be5a0c0c04 + sha256: "7687075e408b093f36e6bbf6c91878cc0d4cd10f409506f7bc996f68220b9136" url: "https://pub.dev" source: hosted - version: "1.11.0" + version: "1.12.0" mime: dependency: transitive description: @@ -672,18 +672,18 @@ packages: dependency: "direct main" description: name: path_provider - sha256: b27217933eeeba8ff24845c34003b003b2b22151de3c908d0e679e8fe1aa078b + sha256: c9e7d3a4cd1410877472158bee69963a4579f78b68c65a2b7d40d1a7a88bb161 url: "https://pub.dev" source: hosted - version: "2.1.2" + version: "2.1.3" path_provider_android: dependency: transitive description: name: path_provider_android - sha256: "477184d672607c0a3bf68fbbf601805f92ef79c82b64b4d6eb318cbca4c48668" + sha256: a248d8146ee5983446bf03ed5ea8f6533129a12b11f12057ad1b4a67a2b3b41d url: "https://pub.dev" source: hosted - version: "2.2.2" + version: "2.2.4" path_provider_foundation: dependency: transitive description: @@ -744,10 +744,10 @@ packages: dependency: transitive description: name: pointycastle - sha256: "43ac87de6e10afabc85c445745a7b799e04de84cebaa4fd7bf55a5e1e9604d29" + sha256: "79fbafed02cfdbe85ef3fd06c7f4bc2cbcba0177e61b765264853d4253b21744" url: "https://pub.dev" source: hosted - version: "3.7.4" + version: "3.9.0" pool: dependency: transitive description: @@ -768,10 +768,10 @@ packages: dependency: transitive description: name: provider - sha256: "9a96a0a19b594dbc5bf0f1f27d2bc67d5f95957359b461cd9feb44ed6ae75096" + sha256: c8a055ee5ce3fd98d6fc872478b03823ffdb448699c6ebdbbc71d59b596fd48c url: "https://pub.dev" source: hosted - version: "6.1.1" + version: "6.1.2" pub_semver: dependency: transitive description: @@ -800,18 +800,18 @@ packages: dependency: "direct main" description: name: shared_preferences - sha256: "81429e4481e1ccfb51ede496e916348668fd0921627779233bd24cc3ff6abd02" + sha256: d3bbe5553a986e83980916ded2f0b435ef2e1893dfaa29d5a7a790d0eca12180 url: "https://pub.dev" source: hosted - version: "2.2.2" + version: "2.2.3" shared_preferences_android: dependency: transitive description: name: shared_preferences_android - sha256: "8568a389334b6e83415b6aae55378e158fbc2314e074983362d20c562780fb06" + sha256: "1ee8bf911094a1b592de7ab29add6f826a7331fb854273d55918693d5364a1f2" url: "https://pub.dev" source: hosted - version: "2.2.1" + version: "2.2.2" shared_preferences_foundation: dependency: transitive description: @@ -1021,18 +1021,18 @@ packages: dependency: "direct main" description: name: url_launcher - sha256: "0ecc004c62fd3ed36a2ffcbe0dd9700aee63bd7532d0b642a488b1ec310f492e" + sha256: "6ce1e04375be4eed30548f10a315826fd933c1e493206eab82eed01f438c8d2e" url: "https://pub.dev" source: hosted - version: "6.2.5" + version: "6.2.6" url_launcher_android: dependency: transitive description: name: url_launcher_android - sha256: d4ed0711849dd8e33eb2dd69c25db0d0d3fdc37e0a62e629fe32f57a22db2745 + sha256: "360a6ed2027f18b73c8d98e159dda67a61b7f2e0f6ec26e86c3ada33b0621775" url: "https://pub.dev" source: hosted - version: "6.3.0" + version: "6.3.1" url_launcher_ios: dependency: transitive description: @@ -1069,10 +1069,10 @@ packages: dependency: transitive description: name: url_launcher_web - sha256: "3692a459204a33e04bc94f5fb91158faf4f2c8903281ddd82915adecdb1a901d" + sha256: "8d9e750d8c9338601e709cd0885f95825086bd8b642547f26bda435aade95d8a" url: "https://pub.dev" source: hosted - version: "2.3.0" + version: "2.3.1" url_launcher_windows: dependency: transitive description: @@ -1101,10 +1101,10 @@ packages: dependency: transitive description: name: vm_service - sha256: a2662fb1f114f4296cf3f5a50786a2d888268d7776cf681aa17d660ffa23b246 + sha256: "3923c89304b715fb1eb6423f017651664a03bf5f4b29983627c4da791f74a4ec" url: "https://pub.dev" source: hosted - version: "14.0.0" + version: "14.2.1" watcher: dependency: transitive description: @@ -1117,18 +1117,18 @@ packages: dependency: transitive description: name: web - sha256: "1d9158c616048c38f712a6646e317a3426da10e884447626167240d45209cbad" + sha256: "97da13628db363c635202ad97068d47c5b8aa555808e7a9411963c533b449b27" url: "https://pub.dev" source: hosted - version: "0.5.0" + version: "0.5.1" web_socket_channel: dependency: transitive description: name: web_socket_channel - sha256: "1d8e795e2a8b3730c41b8a98a2dff2e0fb57ae6f0764a1c46ec5915387d257b2" + sha256: "58c6666b342a38816b2e7e50ed0f1e261959630becd4c879c4f26bfa14aa5a42" url: "https://pub.dev" source: hosted - version: "2.4.4" + version: "2.4.5" webdriver: dependency: transitive description: @@ -1157,10 +1157,10 @@ packages: dependency: transitive description: name: win32 - sha256: "5a751eddf9db89b3e5f9d50c20ab8612296e4e8db69009788d6c8b060a84191c" + sha256: "0a989dc7ca2bb51eac91e8fd00851297cfffd641aa7538b165c62637ca0eaa4a" url: "https://pub.dev" source: hosted - version: "4.1.4" + version: "5.4.0" xdg_directories: dependency: transitive description: diff --git a/pubspec.yaml b/pubspec.yaml index 8a2a40a..a108462 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,7 +1,7 @@ name: prasule description: Open-source private expense tracker -version: 1.1.0+7 +version: 1.1.1+8 environment: sdk: '>=3.1.0-262.2.beta <4.0.0' @@ -18,7 +18,7 @@ dependencies: currency_picker: ^2.0.16 dio: ^5.3.0 dynamic_color: ^1.6.6 - fl_chart: ^0.66.0 + fl_chart: ^0.67.0 flex_color_picker: ^3.3.0 flutter: sdk: flutter