Compare commits

..

No commits in common. "main" and "1.0.0" have entirely different histories.
main ... 1.0.0

20 changed files with 236 additions and 383 deletions

@ -1 +1 @@
Subproject commit 312b9e81e93663b38f8e58d540be860fc75372b9 Subproject commit b7e7d46a046ba8a22897a514bf2311a0f81ab198

View file

@ -1,15 +1,3 @@
# 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
- Fix localization errors
# 1.0.0 # 1.0.0
- Change icon - Change icon

View file

@ -1,95 +1,5 @@
# Contributing to Prašule # Localization
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/) [![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/ 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
<!-- for example "Android 13" -->
### App version
<!--
Can be found in the app by clicking
the three dots > 'About' or in app info in your device's setting
-->
### What was expected to happen
<!-- Enter what you thought SHOULD happen when the bug occured -->
### What actually happened
<!-- Here describe what ACTUALLY happened -->
### Relevant logs
```
Paste your logs here
Make sure it is a codebloc
```
### Steps to reproduce
<!--
Enter the exact steps that you made when you encountered the bug,
so we can reproduce it
-->
- [] I have checked the [list of issues](https://git.mnau.xyz/hernik/prasule/issues) and I'm sure this is not a duplicate
<!-- This is a checkbox, either check it after creating the issue or change [] to [X] -->
```
## 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
<!-- This is a checkbox, either check it after creating the issue or change [] to [X] -->
### Is your feature request related to a bug or an issue? If yes, describe it or link it
<!-- You can link issues by simply writing # followed by the ID of the issue or PR, for example #12 -->
### Describe your request, how you'd like it to be implemented etc.
<!-- This is the space for your requests to be made -->
```
## 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.

View file

@ -20,7 +20,7 @@ pluginManagement {
plugins { plugins {
id "dev.flutter.flutter-plugin-loader" version "1.0.0" id "dev.flutter.flutter-plugin-loader" version "1.0.0"
id "com.android.application" version "7.3.0" apply false id "com.android.application" version "7.3.0" apply false
id "org.jetbrains.kotlin.android" version "1.9.22" apply false id "org.jetbrains.kotlin.android" version "1.7.10" apply false
} }
include ":app" include ":app"

View file

@ -7,7 +7,7 @@
"next": "Další", "next": "Další",
"back": "Zpět", "back": "Zpět",
"finish": "Dokončit", "finish": "Dokončit",
"errorEmptyName": "Název nemůže být prázdný!", "errorEmptyName": "Název peněženky nemůže být prázdný!",
"welcome": "Vítejte!", "welcome": "Vítejte!",
"welcomeAboutPrasule": "Prašule je správce výdajů navržený pro lidi, kteří nechtějí vyplňovat každý malý detail.", "welcomeAboutPrasule": "Prašule je správce výdajů navržený pro lidi, kteří nechtějí vyplňovat každý malý detail.",
"welcomeInstruction": "Na této obrazovce si nastavíte svoji 'peněženku', ve které budou zaznamenány vaše výdaje uspořádané do kategorií, které si nastavíte hned potom.", "welcomeInstruction": "Na této obrazovce si nastavíte svoji 'peněženku', ve které budou zaznamenány vaše výdaje uspořádané do kategorií, které si nastavíte hned potom.",

View file

@ -7,7 +7,7 @@
"next": "Next", "next": "Next",
"back": "Back", "back": "Back",
"finish": "Finish", "finish": "Finish",
"errorEmptyName": "Name cannot be empty", "errorEmptyName": "Wallet name cannot be empty",
"welcome": "Welcome!", "welcome": "Welcome!",
"welcomeAboutPrasule": "Prašule is an expense tracker tool designed for people, who don't want to spend too much time filling in all the little details.", "welcomeAboutPrasule": "Prašule is an expense tracker tool designed for people, who don't want to spend too much time filling in all the little details.",
"welcomeInstruction": "On this screen you will set up your 'wallet', in which you will track your expenses categorized under categories, which you can later set in the settings menu.", "welcomeInstruction": "On this screen you will set up your 'wallet', in which you will track your expenses categorized under categories, which you can later set in the settings menu.",

View file

@ -20,9 +20,11 @@ const lightColorScheme = ColorScheme(
errorContainer: Color(0xFFFFDAD6), errorContainer: Color(0xFFFFDAD6),
onError: Color(0xFFFFFFFF), onError: Color(0xFFFFFFFF),
onErrorContainer: Color(0xFF410002), onErrorContainer: Color(0xFF410002),
background: Color(0xFFFBFDF8),
onBackground: Color(0xFF191C19),
surface: Color(0xFFFBFDF8), surface: Color(0xFFFBFDF8),
onSurface: Color(0xFF191C19), onSurface: Color(0xFF191C19),
surfaceContainerHighest: Color(0xFFDCE5DB), surfaceVariant: Color(0xFFDCE5DB),
onSurfaceVariant: Color(0xFF414942), onSurfaceVariant: Color(0xFF414942),
outline: Color(0xFF717971), outline: Color(0xFF717971),
onInverseSurface: Color(0xFFF0F1EC), onInverseSurface: Color(0xFFF0F1EC),
@ -52,9 +54,11 @@ const darkColorScheme = ColorScheme(
errorContainer: Color(0xFF93000A), errorContainer: Color(0xFF93000A),
onError: Color(0xFF690005), onError: Color(0xFF690005),
onErrorContainer: Color(0xFFFFDAD6), onErrorContainer: Color(0xFFFFDAD6),
background: Color(0xFF191C19),
onBackground: Color(0xFFE1E3DE),
surface: Color(0xFF191C19), surface: Color(0xFF191C19),
onSurface: Color(0xFFE1E3DE), onSurface: Color(0xFFE1E3DE),
surfaceContainerHighest: Color(0xFF414942), surfaceVariant: Color(0xFF414942),
onSurfaceVariant: Color(0xFFC0C9BF), onSurfaceVariant: Color(0xFFC0C9BF),
outline: Color(0xFF8B938A), outline: Color(0xFF8B938A),
onInverseSurface: Color(0xFF191C19), onInverseSurface: Color(0xFF191C19),

View file

@ -71,8 +71,7 @@ class ExpensesLineChart extends StatelessWidget {
LineChartData( LineChartData(
lineTouchData: LineTouchData( lineTouchData: LineTouchData(
touchTooltipData: LineTouchTooltipData( touchTooltipData: LineTouchTooltipData(
getTooltipColor: (group) => tooltipBgColor: Theme.of(context).colorScheme.secondaryContainer,
Theme.of(context).colorScheme.secondaryContainer,
getTooltipItems: (spots) => List<LineTooltipItem>.generate( getTooltipItems: (spots) => List<LineTooltipItem>.generate(
spots.length, spots.length,
(index) => LineTooltipItem( (index) => LineTooltipItem(
@ -429,39 +428,11 @@ class _CategoriesPieChartState extends State<CategoriesPieChart> {
(index) => Padding( (index) => Padding(
padding: const EdgeInsets.all(8), padding: const EdgeInsets.all(8),
child: Indicator( child: Indicator(
size: (touchedIndex != -1 && size: touchedIndex == index ? 18 : 16,
touchedIndex ==
widget.categories
.where(
(element) => widget.entries
.where(
(w) =>
w.category.id ==
element
.id, // TODO: more elegant fix
)
.isNotEmpty,
)
.toList()
.indexOf(widget.categories[index]))
? 18
: 16,
color: widget.categories[index].color, color: widget.categories[index].color,
text: widget.categories[index].name, text: widget.categories[index].name,
textStyle: TextStyle( textStyle: TextStyle(
fontWeight: (touchedIndex != -1 && fontWeight: (touchedIndex == index)
touchedIndex ==
widget.categories
.where(
(element) => widget.entries
.where(
(w) =>
w.category.id == element.id,
)
.isNotEmpty,
)
.toList()
.indexOf(widget.categories[index]))
? FontWeight.bold ? FontWeight.bold
: FontWeight.normal, : FontWeight.normal,
), ),

View file

@ -12,7 +12,7 @@ void showAbout(BuildContext context) {
context: context, context: context,
applicationLegalese: AppLocalizations.of(context).license, applicationLegalese: AppLocalizations.of(context).license,
applicationName: "Prašule", applicationName: "Prašule",
applicationVersion: "1.1.1", applicationVersion: "1.0.0",
applicationIcon: const CircleAvatar( applicationIcon: const CircleAvatar(
backgroundImage: AssetImage("assets/icon/full_ico.png"), backgroundImage: AssetImage("assets/icon/full_ico.png"),
), ),

View file

@ -16,8 +16,7 @@ class CreateSingleEntryView extends StatefulWidget {
/// Used when user wants to add new entry /// Used when user wants to add new entry
const CreateSingleEntryView({ const CreateSingleEntryView({
required this.w, required this.w,
required this.locale, required this.locale, super.key,
super.key,
this.editEntry, this.editEntry,
}); });
@ -29,7 +28,6 @@ class CreateSingleEntryView extends StatefulWidget {
/// Is null unless we are editing an existing entry /// Is null unless we are editing an existing entry
final WalletSingleEntry? editEntry; final WalletSingleEntry? editEntry;
/// Locale as set on user's system
final String locale; final String locale;
@override @override
@ -38,9 +36,6 @@ class CreateSingleEntryView extends StatefulWidget {
class _CreateSingleEntryViewState extends State<CreateSingleEntryView> { class _CreateSingleEntryViewState extends State<CreateSingleEntryView> {
late WalletSingleEntry newEntry; late WalletSingleEntry newEntry;
final _entryNameController = TextEditingController();
final _entryBalanceController = TextEditingController();
final _entryDescriptionController = TextEditingController();
@override @override
void initState() { void initState() {
super.initState(); super.initState();
@ -55,9 +50,6 @@ class _CreateSingleEntryViewState extends State<CreateSingleEntryView> {
category: widget.w.categories.first, category: widget.w.categories.first,
); );
} }
_entryNameController.text = newEntry.data.name;
_entryBalanceController.text = newEntry.data.amount.toString();
_entryDescriptionController.text = newEntry.data.description;
setState(() {}); setState(() {});
} }
@ -79,7 +71,10 @@ class _CreateSingleEntryViewState extends State<CreateSingleEntryView> {
width: MediaQuery.of(context).size.width * 0.8, width: MediaQuery.of(context).size.width * 0.8,
child: PlatformField( child: PlatformField(
labelText: AppLocalizations.of(context).name, labelText: AppLocalizations.of(context).name,
controller: _entryNameController, controller: TextEditingController(text: newEntry.data.name),
onChanged: (v) {
newEntry.data.name = v;
},
), ),
), ),
const SizedBox( const SizedBox(
@ -89,7 +84,9 @@ class _CreateSingleEntryViewState extends State<CreateSingleEntryView> {
width: MediaQuery.of(context).size.width * 0.8, width: MediaQuery.of(context).size.width * 0.8,
child: PlatformField( child: PlatformField(
labelText: AppLocalizations.of(context).amount, labelText: AppLocalizations.of(context).amount,
controller: _entryBalanceController, controller: TextEditingController(
text: newEntry.data.amount.toString(),
),
keyboardType: keyboardType:
const TextInputType.numberWithOptions(decimal: true), const TextInputType.numberWithOptions(decimal: true),
inputFormatters: [ inputFormatters: [
@ -97,6 +94,9 @@ class _CreateSingleEntryViewState extends State<CreateSingleEntryView> {
RegExp(r'\d+[\.,]{0,1}\d{0,}'), RegExp(r'\d+[\.,]{0,1}\d{0,}'),
), ),
], ],
onChanged: (v) {
newEntry.data.amount = double.parse(v);
},
), ),
), ),
const SizedBox( const SizedBox(
@ -183,7 +183,12 @@ class _CreateSingleEntryViewState extends State<CreateSingleEntryView> {
child: PlatformField( child: PlatformField(
keyboardType: TextInputType.multiline, keyboardType: TextInputType.multiline,
maxLines: null, maxLines: null,
controller: _entryDescriptionController, controller: TextEditingController(
text: newEntry.data.description,
),
onChanged: (v) {
newEntry.data.description = v;
},
), ),
), ),
const SizedBox( const SizedBox(
@ -192,10 +197,10 @@ class _CreateSingleEntryViewState extends State<CreateSingleEntryView> {
Text(AppLocalizations.of(context).date), Text(AppLocalizations.of(context).date),
PlatformButton( PlatformButton(
style: ButtonStyle( style: ButtonStyle(
backgroundColor: WidgetStateProperty.all( backgroundColor: MaterialStateProperty.all(
Theme.of(context).colorScheme.primary, Theme.of(context).colorScheme.primary,
), ),
foregroundColor: WidgetStateProperty.all( foregroundColor: MaterialStateProperty.all(
Theme.of(context).colorScheme.onPrimary, Theme.of(context).colorScheme.onPrimary,
), ),
), ),
@ -219,18 +224,13 @@ class _CreateSingleEntryViewState extends State<CreateSingleEntryView> {
PlatformButton( PlatformButton(
text: AppLocalizations.of(context).save, text: AppLocalizations.of(context).save,
onPressed: () { onPressed: () {
if (_entryNameController.text.isEmpty) { if (newEntry.data.name.isEmpty) {
showMessage( showMessage(
AppLocalizations.of(context).errorEmptyName, AppLocalizations.of(context).errorEmptyName,
context, context,
); );
return; return;
} }
newEntry.data.name = _entryNameController.text;
newEntry.data.amount =
double.parse(_entryBalanceController.text);
newEntry.data.description =
_entryDescriptionController.text;
if (widget.editEntry != null) { if (widget.editEntry != null) {
Navigator.of(context).pop(newEntry); Navigator.of(context).pop(newEntry);
return; return;

View file

@ -7,6 +7,7 @@ import 'package:prasule/api/entry_data.dart';
import 'package:prasule/api/recurring_entry.dart'; import 'package:prasule/api/recurring_entry.dart';
import 'package:prasule/api/wallet.dart'; import 'package:prasule/api/wallet.dart';
import 'package:prasule/api/wallet_manager.dart'; import 'package:prasule/api/wallet_manager.dart';
import 'package:prasule/main.dart';
import 'package:prasule/pw/platformbutton.dart'; import 'package:prasule/pw/platformbutton.dart';
import 'package:prasule/pw/platformfield.dart'; import 'package:prasule/pw/platformfield.dart';
import 'package:prasule/util/show_message.dart'; import 'package:prasule/util/show_message.dart';
@ -38,10 +39,6 @@ class CreateRecurringEntryView extends StatefulWidget {
class _CreateRecurringEntryViewState extends State<CreateRecurringEntryView> { class _CreateRecurringEntryViewState extends State<CreateRecurringEntryView> {
late RecurringWalletEntry newEntry; late RecurringWalletEntry newEntry;
final _entryNameController = TextEditingController();
final _entryBalanceController = TextEditingController();
final _entryDescriptionController = TextEditingController();
final _repeatAfterController = TextEditingController();
@override @override
void initState() { void initState() {
super.initState(); super.initState();
@ -58,10 +55,6 @@ class _CreateRecurringEntryViewState extends State<CreateRecurringEntryView> {
recurType: RecurType.month, 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(() {}); setState(() {});
} }
@ -83,7 +76,10 @@ class _CreateRecurringEntryViewState extends State<CreateRecurringEntryView> {
width: MediaQuery.of(context).size.width * 0.8, width: MediaQuery.of(context).size.width * 0.8,
child: PlatformField( child: PlatformField(
labelText: AppLocalizations.of(context).name, labelText: AppLocalizations.of(context).name,
controller: _entryNameController, controller: TextEditingController(text: newEntry.data.name),
onChanged: (v) {
newEntry.data.name = v;
},
), ),
), ),
const SizedBox( const SizedBox(
@ -93,7 +89,9 @@ class _CreateRecurringEntryViewState extends State<CreateRecurringEntryView> {
width: MediaQuery.of(context).size.width * 0.8, width: MediaQuery.of(context).size.width * 0.8,
child: PlatformField( child: PlatformField(
labelText: AppLocalizations.of(context).amount, labelText: AppLocalizations.of(context).amount,
controller: _entryBalanceController, controller: TextEditingController(
text: newEntry.data.amount.toString(),
),
keyboardType: keyboardType:
const TextInputType.numberWithOptions(decimal: true), const TextInputType.numberWithOptions(decimal: true),
inputFormatters: [ inputFormatters: [
@ -101,6 +99,10 @@ class _CreateRecurringEntryViewState extends State<CreateRecurringEntryView> {
RegExp(r'\d+[\.,]{0,1}\d{0,}'), RegExp(r'\d+[\.,]{0,1}\d{0,}'),
), ),
], ],
onChanged: (v) {
logger.i(v);
newEntry.data.amount = double.parse(v);
},
), ),
), ),
const SizedBox( const SizedBox(
@ -187,7 +189,12 @@ class _CreateRecurringEntryViewState extends State<CreateRecurringEntryView> {
child: PlatformField( child: PlatformField(
keyboardType: TextInputType.multiline, keyboardType: TextInputType.multiline,
maxLines: null, maxLines: null,
controller: _entryDescriptionController, controller: TextEditingController(
text: newEntry.data.description,
),
onChanged: (v) {
newEntry.data.description = v;
},
), ),
), ),
const SizedBox( const SizedBox(
@ -208,7 +215,9 @@ class _CreateRecurringEntryViewState extends State<CreateRecurringEntryView> {
SizedBox( SizedBox(
width: 50, width: 50,
child: PlatformField( child: PlatformField(
controller: _repeatAfterController, controller: TextEditingController(
text: newEntry.repeatAfter.toString(),
),
inputFormatters: [ inputFormatters: [
FilteringTextInputFormatter.digitsOnly, FilteringTextInputFormatter.digitsOnly,
FilteringTextInputFormatter.deny( FilteringTextInputFormatter.deny(
@ -304,20 +313,13 @@ class _CreateRecurringEntryViewState extends State<CreateRecurringEntryView> {
PlatformButton( PlatformButton(
text: AppLocalizations.of(context).save, text: AppLocalizations.of(context).save,
onPressed: () { onPressed: () {
if (_entryNameController.text.isEmpty) { if (newEntry.data.name.isEmpty) {
showMessage( showMessage(
AppLocalizations.of(context).errorEmptyName, AppLocalizations.of(context).errorEmptyName,
context, context,
); );
return; 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) { if (widget.editEntry != null) {
Navigator.of(context).pop(newEntry); Navigator.of(context).pop(newEntry);
return; return;

View file

@ -97,8 +97,7 @@ class _GraphViewState extends State<GraphView> {
super.initState(); super.initState();
loadWallet(); loadWallet();
SharedPreferences.getInstance().then((s) { SharedPreferences.getInstance().then((s) {
chartType = s.getInt("yearlygraph") ?? 1; chartType = s.getInt("monthlygraph") ?? 2;
logger.d(chartType);
setState(() {}); setState(() {});
}); });
} }
@ -198,9 +197,7 @@ class _GraphViewState extends State<GraphView> {
title: DropdownButton<int>( title: DropdownButton<int>(
value: (selectedWallet == null) value: (selectedWallet == null)
? -1 ? -1
: wallets.indexOf( : wallets.indexOf(selectedWallet!),
wallets.where((w) => w.name == selectedWallet!.name).first,
),
items: [ items: [
...wallets.map( ...wallets.map(
(e) => DropdownMenuItem( (e) => DropdownMenuItem(
@ -336,7 +333,7 @@ class _GraphViewState extends State<GraphView> {
? Theme.of(context) ? Theme.of(context)
.colorScheme .colorScheme
.secondaryContainer .secondaryContainer
: Theme.of(context).colorScheme.surface, : Theme.of(context).colorScheme.background,
), ),
child: Padding( child: Padding(
padding: const EdgeInsets.all(8), padding: const EdgeInsets.all(8),
@ -430,7 +427,7 @@ class _GraphViewState extends State<GraphView> {
? Theme.of(context) ? Theme.of(context)
.colorScheme .colorScheme
.secondaryContainer .secondaryContainer
: Theme.of(context).colorScheme.surface, : Theme.of(context).colorScheme.background,
), ),
width: MediaQuery.of(context).size.width * 0.95, width: MediaQuery.of(context).size.width * 0.95,
height: MediaQuery.of(context).size.height * 0.4, height: MediaQuery.of(context).size.height * 0.4,
@ -560,7 +557,7 @@ class _GraphViewState extends State<GraphView> {
? Theme.of(context) ? Theme.of(context)
.colorScheme .colorScheme
.secondaryContainer .secondaryContainer
: Theme.of(context).colorScheme.surface, : Theme.of(context).colorScheme.background,
), ),
child: Padding( child: Padding(
padding: const EdgeInsets.all(8), padding: const EdgeInsets.all(8),
@ -653,7 +650,7 @@ class _GraphViewState extends State<GraphView> {
? Theme.of(context) ? Theme.of(context)
.colorScheme .colorScheme
.secondaryContainer .secondaryContainer
: Theme.of(context).colorScheme.surface, : Theme.of(context).colorScheme.background,
), ),
width: MediaQuery.of(context).size.width * 0.95, width: MediaQuery.of(context).size.width * 0.95,
height: MediaQuery.of(context).size.height * 0.4, height: MediaQuery.of(context).size.height * 0.4,

View file

@ -166,11 +166,7 @@ class _HomeViewState extends State<HomeView> {
secondChild: DropdownButton<int>( secondChild: DropdownButton<int>(
value: (selectedWallet == null) value: (selectedWallet == null)
? -1 ? -1
: wallets.indexOf( : wallets.indexOf(selectedWallet!),
wallets
.where((w) => w.name == selectedWallet!.name)
.first,
),
items: [ items: [
...wallets.map( ...wallets.map(
(e) => DropdownMenuItem( (e) => DropdownMenuItem(
@ -251,9 +247,7 @@ class _HomeViewState extends State<HomeView> {
.then((value) async { .then((value) async {
wallets = await WalletManager.listWallets(); wallets = await WalletManager.listWallets();
selectedWallet = await WalletManager.loadWallet( selectedWallet = await WalletManager.loadWallet(
selectedWallet!.name, selectedWallet!.name,);
);
setState(() {});
}); });
} else if (value == AppLocalizations.of(context).about) { } else if (value == AppLocalizations.of(context).about) {
showAbout(context); showAbout(context);
@ -359,7 +353,7 @@ class _HomeViewState extends State<HomeView> {
style: TextStyle( style: TextStyle(
color: Theme.of(context) color: Theme.of(context)
.colorScheme .colorScheme
.onSurface, .onBackground,
), ),
), ),
TextSpan( TextSpan(
@ -409,7 +403,7 @@ class _HomeViewState extends State<HomeView> {
style: TextStyle( style: TextStyle(
color: Theme.of(context) color: Theme.of(context)
.colorScheme .colorScheme
.onSurface, .onBackground,
), ),
), ),
], ],
@ -594,7 +588,7 @@ class _HomeViewState extends State<HomeView> {
style: TextStyle( style: TextStyle(
color: Theme.of(context) color: Theme.of(context)
.colorScheme .colorScheme
.surface .background
.calculateTextColor(), .calculateTextColor(),
), ),
), ),
@ -656,7 +650,7 @@ class _HomeViewState extends State<HomeView> {
await showAdaptiveDialog<void>( await showAdaptiveDialog<void>(
context: context, context: context,
builder: (c) => StatefulBuilder( builder: (c) => StatefulBuilder(
builder: (ctx, setDialogState) => AlertDialog.adaptive( builder: (ctx, setState) => AlertDialog.adaptive(
actions: [ actions: [
TextButton( TextButton(
onPressed: () async { onPressed: () async {
@ -770,7 +764,7 @@ class _HomeViewState extends State<HomeView> {
1 && 1 &&
!value)) return; !value)) return;
selectedLanguages[index] = value; selectedLanguages[index] = value;
setDialogState(() {}); setState(() {});
}, },
), ),
const SizedBox( const SizedBox(

View file

@ -63,11 +63,8 @@ class _RecurringEntriesViewState extends State<RecurringEntriesView> {
drawer: makeDrawer(context, 3), drawer: makeDrawer(context, 3),
appBar: AppBar( appBar: AppBar(
title: DropdownButton<int>( title: DropdownButton<int>(
value: (selectedWallet == null) value:
? -1 (selectedWallet == null) ? -1 : wallets.indexOf(selectedWallet!),
: wallets.indexOf(
wallets.where((w) => w.name == selectedWallet!.name).first,
),
items: [ items: [
...wallets.map( ...wallets.map(
(e) => DropdownMenuItem( (e) => DropdownMenuItem(
@ -128,16 +125,14 @@ class _RecurringEntriesViewState extends State<RecurringEntriesView> {
floatingActionButton: FloatingActionButton( floatingActionButton: FloatingActionButton(
child: const Icon(Icons.add), child: const Icon(Icons.add),
onPressed: () { onPressed: () {
Navigator.of(context) Navigator.of(context).push(
.push( platformRoute(
platformRoute( (p0) => CreateRecurringEntryView(
(p0) => CreateRecurringEntryView( w: selectedWallet!,
w: selectedWallet!, locale: locale,
locale: locale, ),
), ),
), );
)
.then((value) => setState(() {}));
}, },
), ),
body: Center( body: Center(

View file

@ -1,5 +1,4 @@
import 'dart:async'; import 'dart:async';
import 'dart:io';
import 'package:dynamic_color/dynamic_color.dart'; import 'package:dynamic_color/dynamic_color.dart';
import 'package:flex_color_picker/flex_color_picker.dart'; import 'package:flex_color_picker/flex_color_picker.dart';
@ -153,13 +152,6 @@ class _EditCategoriesViewState extends State<EditCategoriesView> {
onTap: () async { onTap: () async {
final icon = await showIconPicker( final icon = await showIconPicker(
context, context,
iconPackModes: [
if (!Platform.isIOS && !Platform.isMacOS)
IconPack.material,
if (Platform.isIOS || Platform.isMacOS)
IconPack.cupertino,
],
// adaptiveDialog: true,
); );
if (icon != null) { if (icon != null) {
selectedWallet!.categories[i].icon = icon; selectedWallet!.categories[i].icon = icon;

View file

@ -37,7 +37,7 @@ class _GraphTypeSettingsViewState extends State<GraphTypeSettingsView> {
body: SettingsList( body: SettingsList(
applicationType: ApplicationType.both, applicationType: ApplicationType.both,
darkTheme: SettingsThemeData( darkTheme: SettingsThemeData(
settingsListBackground: Theme.of(context).colorScheme.surface, settingsListBackground: Theme.of(context).colorScheme.background,
titleTextColor: Theme.of(context).colorScheme.primary, titleTextColor: Theme.of(context).colorScheme.primary,
), ),
sections: [ sections: [

View file

@ -42,7 +42,7 @@ class _SettingsViewState extends State<SettingsView> {
body: SettingsList( body: SettingsList(
applicationType: ApplicationType.both, applicationType: ApplicationType.both,
darkTheme: SettingsThemeData( darkTheme: SettingsThemeData(
settingsListBackground: Theme.of(context).colorScheme.surface, settingsListBackground: Theme.of(context).colorScheme.background,
titleTextColor: Theme.of(context).colorScheme.primary, titleTextColor: Theme.of(context).colorScheme.primary,
), ),
sections: [ sections: [

View file

@ -1,5 +1,4 @@
import 'dart:async'; import 'dart:async';
import 'dart:io';
import 'package:currency_picker/currency_picker.dart'; import 'package:currency_picker/currency_picker.dart';
import 'package:dynamic_color/dynamic_color.dart'; import 'package:dynamic_color/dynamic_color.dart';
@ -49,57 +48,60 @@ class _SetupViewState extends State<SetupView> {
}, },
); );
List<WalletCategory> categories = <WalletCategory>[]; List<WalletCategory> categories = <WalletCategory>[];
final _nameController = TextEditingController(); String name = "";
final _balanceController = TextEditingController(text: "0.0"); final _balanceController = TextEditingController(text: "0.0");
@override @override
void didChangeDependencies() { void didChangeDependencies() {
super.didChangeDependencies(); super.didChangeDependencies();
if (categories.isNotEmpty) return; if (categories.isEmpty) {
_nameController.text = AppLocalizations.of(context).setupNamePlaceholder; name = AppLocalizations.of(context).setupNamePlaceholder;
categories = [ categories = [
WalletCategory( WalletCategory(
name: AppLocalizations.of(context).noCategory, name: AppLocalizations.of(context).noCategory,
id: 0, id: 0,
icon: IconData( icon: IconData(
Icons.payments.codePoint, Icons.payments.codePoint,
fontFamily: 'MaterialIcons', fontFamily: 'MaterialIcons',
),
color: Theme.of(context).colorScheme.secondary,
), ),
color: Theme.of(context).colorScheme.secondary, WalletCategory(
), name: AppLocalizations.of(context).categoryHealth,
WalletCategory( id: 1,
name: AppLocalizations.of(context).categoryHealth, icon: IconData(
id: 1, Icons.medical_information.codePoint,
icon: IconData( fontFamily: 'MaterialIcons',
Icons.medical_information.codePoint, ),
fontFamily: 'MaterialIcons', color: Colors.red.shade700
.harmonizeWith(Theme.of(context).colorScheme.primary),
), ),
color: Colors.red.shade700 WalletCategory(
.harmonizeWith(Theme.of(context).colorScheme.primary), name: AppLocalizations.of(context).categoryCar,
), id: 2,
WalletCategory( icon:
name: AppLocalizations.of(context).categoryCar, IconData(Icons.car_repair.codePoint, fontFamily: 'MaterialIcons'),
id: 2, color: Colors.purple
icon: IconData(Icons.car_repair.codePoint, fontFamily: 'MaterialIcons'), .harmonizeWith(Theme.of(context).colorScheme.primary),
color: ),
Colors.purple.harmonizeWith(Theme.of(context).colorScheme.primary), WalletCategory(
), name: AppLocalizations.of(context).categoryFood,
WalletCategory( id: 3,
name: AppLocalizations.of(context).categoryFood, icon:
id: 3, IconData(Icons.restaurant.codePoint, fontFamily: 'MaterialIcons'),
icon: IconData(Icons.restaurant.codePoint, fontFamily: 'MaterialIcons'), color: Colors.green.shade700
color: Colors.green.shade700 .harmonizeWith(Theme.of(context).colorScheme.primary),
.harmonizeWith(Theme.of(context).colorScheme.primary), ),
), WalletCategory(
WalletCategory( name: AppLocalizations.of(context).categoryTravel,
name: AppLocalizations.of(context).categoryTravel, id: 4,
id: 4, icon: IconData(Icons.train.codePoint, fontFamily: 'MaterialIcons'),
icon: IconData(Icons.train.codePoint, fontFamily: 'MaterialIcons'), color: Colors.orange.shade700
color: Colors.orange.shade700 .harmonizeWith(Theme.of(context).colorScheme.primary),
.harmonizeWith(Theme.of(context).colorScheme.primary), ),
), ];
]; setState(() {});
setState(() {}); }
} }
@override @override
@ -132,7 +134,7 @@ class _SetupViewState extends State<SetupView> {
back: Text(AppLocalizations.of(context).back), back: Text(AppLocalizations.of(context).back),
done: Text(AppLocalizations.of(context).finish), done: Text(AppLocalizations.of(context).finish),
onDone: () async { onDone: () async {
if (_nameController.text.isEmpty) { if (name.isEmpty) {
unawaited( unawaited(
showMessage( showMessage(
AppLocalizations.of(context).errorEmptyName, AppLocalizations.of(context).errorEmptyName,
@ -141,8 +143,7 @@ class _SetupViewState extends State<SetupView> {
); );
return; return;
} }
if (await WalletManager.exists(_nameController.text) && if (await WalletManager.exists(name) && context.mounted) {
context.mounted) {
unawaited( unawaited(
showMessage( showMessage(
AppLocalizations.of(context).walletExists, AppLocalizations.of(context).walletExists,
@ -152,11 +153,10 @@ class _SetupViewState extends State<SetupView> {
return; return;
} }
final wallet = Wallet( final wallet = Wallet(
name: _nameController.text, name: name,
currency: _selectedCurrency, currency: _selectedCurrency,
categories: categories, categories: categories,
starterBalance: double.parse(_balanceController.text), starterBalance: double.parse(_balanceController.text),);
);
await WalletManager.saveWallet(wallet); await WalletManager.saveWallet(wallet);
if (widget.newWallet && context.mounted) { if (widget.newWallet && context.mounted) {
@ -230,7 +230,15 @@ class _SetupViewState extends State<SetupView> {
children: [ children: [
SizedBox( SizedBox(
width: MediaQuery.of(context).size.width * 0.7, width: MediaQuery.of(context).size.width * 0.7,
child: PlatformField(controller: _nameController), child: PlatformField(
controller: TextEditingController(
text:
AppLocalizations.of(context).setupNamePlaceholder,
),
onChanged: (t) {
name = t;
},
),
), ),
const SizedBox( const SizedBox(
height: 5, height: 5,
@ -332,14 +340,6 @@ class _SetupViewState extends State<SetupView> {
onTap: () async { onTap: () async {
final icon = await showIconPicker( final icon = await showIconPicker(
context, context,
iconPackModes: [
if (!Platform.isIOS &&
!Platform.isMacOS)
IconPack.material,
if (Platform.isIOS || Platform.isMacOS)
IconPack.cupertino,
],
// adaptiveDialog: true,
); );
if (icon != null) categories[i].icon = icon; if (icon != null) categories[i].icon = icon;
final materialEnabled = final materialEnabled =

View file

@ -29,10 +29,10 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: args name: args
sha256: "7cf60b9f0cc88203c5a190b4cd62a99feea42759a7fa695010eb5de1c0b2252a" sha256: eef6c46b622e0494a36c5a12d10d77fb4e855501a91c1b9ef9339326e58f0596
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.5.0" version: "2.4.2"
async: async:
dependency: transitive dependency: transitive
description: description:
@ -85,10 +85,10 @@ packages:
dependency: "direct dev" dependency: "direct dev"
description: description:
name: build_runner name: build_runner
sha256: "3ac61a79bfb6f6cc11f693591063a7f19a7af628dc52f141743edac5c16e8c22" sha256: "581bacf68f89ec8792f5e5a0b2c4decd1c948e97ce659dc783688c8a88fbec21"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.4.9" version: "2.4.8"
build_runner_core: build_runner_core:
dependency: transitive dependency: transitive
description: description:
@ -109,10 +109,10 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: built_value name: built_value
sha256: c7913a9737ee4007efedaffc968c049fd0f3d0e49109e778edc10de9426005cb sha256: a3ec2e0f967bc47f69f95009bb93db936288d61d5343b9436e378b28a2f830c6
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "8.9.2" version: "8.9.0"
characters: characters:
dependency: transitive dependency: transitive
description: description:
@ -189,34 +189,34 @@ packages:
dependency: "direct main" dependency: "direct main"
description: description:
name: cupertino_icons name: cupertino_icons
sha256: ba631d1c7f7bef6b729a622b7b752645a2d076dba9976925b8f25725a30e1ee6 sha256: d57953e10f9f8327ce64a508a355f0b1ec902193f66288e8cb5070e7c47eeb2d
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "1.0.8" version: "1.0.6"
currency_picker: currency_picker:
dependency: "direct main" dependency: "direct main"
description: description:
name: currency_picker name: currency_picker
sha256: c9ab5c0da8ae4dcc6421064dccde072b44f5b44914691b967ea4cf45a266a658 sha256: eb75deb7bc92e3f31e1b8ad4efacf71371e8e49d7a0eebd1c1a8e9fae58cc23d
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.0.21" version: "2.0.20"
dart_style: dart_style:
dependency: transitive dependency: transitive
description: description:
name: dart_style name: dart_style
sha256: "99e066ce75c89d6b29903d788a7bb9369cf754f7b24bf70bf4b6d6d6b26853b9" sha256: "40ae61a5d43feea6d24bd22c0537a6629db858963b99b4bc1c3db80676f32368"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.3.6" version: "2.3.4"
dio: dio:
dependency: "direct main" dependency: "direct main"
description: description:
name: dio name: dio
sha256: "11e40df547d418cc0c4900a9318b26304e665da6fa4755399a9ff9efd09034b5" sha256: "797e1e341c3dd2f69f2dad42564a6feff3bfb87187d05abb93b9609e6f1645c3"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "5.4.3+1" version: "5.4.0"
dots_indicator: dots_indicator:
dependency: transitive dependency: transitive
description: description:
@ -229,10 +229,10 @@ packages:
dependency: "direct main" dependency: "direct main"
description: description:
name: dynamic_color name: dynamic_color
sha256: eae98052fa6e2826bdac3dd2e921c6ce2903be15c6b7f8b6d8a5d49b5086298d sha256: a866f1f8947bfdaf674d7928e769eac7230388a2e7a2542824fad4bb5b87be3b
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "1.7.0" version: "1.6.9"
equatable: equatable:
dependency: transitive dependency: transitive
description: description:
@ -277,26 +277,26 @@ packages:
dependency: "direct main" dependency: "direct main"
description: description:
name: fl_chart name: fl_chart
sha256: "2b7c1f5d867da9a054661641c8f499c55c47c39acccb97b3bc673f5fa9a39e74" sha256: b5e2b0f13d93f8c532b5a2786bfb44580de1f50b927bf95813fa1af617e9caf8
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "0.67.0" version: "0.66.1"
flex_color_picker: flex_color_picker:
dependency: "direct main" dependency: "direct main"
description: description:
name: flex_color_picker name: flex_color_picker
sha256: "5c846437069fb7afdd7ade6bf37e628a71d2ab0787095ddcb1253bf9345d5f3a" sha256: "0871edc170153cfc3de316d30625f40a85daecfa76ce541641f3cc0ec7757cbf"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "3.4.1" version: "3.3.1"
flex_seed_scheme: flex_seed_scheme:
dependency: transitive dependency: transitive
description: description:
name: flex_seed_scheme name: flex_seed_scheme
sha256: "4cee2f1d07259f77e8b36f4ec5f35499d19e74e17c7dce5b819554914082bc01" sha256: "29c12aba221eb8a368a119685371381f8035011d18de5ba277ad11d7dfb8657f"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "1.5.0" version: "1.4.0"
flutter: flutter:
dependency: "direct main" dependency: "direct main"
description: flutter description: flutter
@ -327,10 +327,10 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: flutter_keyboard_visibility name: flutter_keyboard_visibility
sha256: "98664be7be0e3ffca00de50f7f6a287ab62c763fc8c762e0a21584584a3ff4f8" sha256: "4983655c26ab5b959252ee204c2fffa4afeb4413cd030455194ec0caa3b8e7cb"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "6.0.0" version: "5.4.1"
flutter_keyboard_visibility_linux: flutter_keyboard_visibility_linux:
dependency: transitive dependency: transitive
description: description:
@ -383,10 +383,10 @@ packages:
dependency: "direct dev" dependency: "direct dev"
description: description:
name: flutter_lints name: flutter_lints
sha256: "9e8c3858111da373efc5aa341de011d9bd23e2c5c5e0c62bccf32438e192d7b1" sha256: e2a421b7e59244faef694ba7b30562e489c2b489866e505074eb005cd7060db7
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "3.0.2" version: "3.0.1"
flutter_localizations: flutter_localizations:
dependency: "direct main" dependency: "direct main"
description: flutter description: flutter
@ -396,10 +396,10 @@ packages:
dependency: "direct main" dependency: "direct main"
description: description:
name: flutter_slidable name: flutter_slidable
sha256: "673403d2eeef1f9e8483bd6d8d92aae73b1d8bd71f382bc3930f699c731bc27c" sha256: "19ed4813003a6ff4e9c6bcce37e792a2a358919d7603b2b31ff200229191e44c"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "3.1.0" version: "3.0.1"
flutter_speed_dial: flutter_speed_dial:
dependency: "direct main" dependency: "direct main"
description: description:
@ -430,10 +430,10 @@ packages:
dependency: "direct main" dependency: "direct main"
description: description:
name: fluttertoast name: fluttertoast
sha256: "81b68579e23fcbcada2db3d50302813d2371664afe6165bc78148050ab94bf66" sha256: dfdde255317af381bfc1c486ed968d5a43a2ded9c931e87cbecd88767d6a71c1
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "8.2.5" version: "8.2.4"
font_awesome_flutter: font_awesome_flutter:
dependency: transitive dependency: transitive
description: description:
@ -446,10 +446,10 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: frontend_server_client name: frontend_server_client
sha256: f64a0333a82f30b0cca061bc3d143813a486dc086b574bfb233b7c1372427694 sha256: "408e3ca148b31c20282ad6f37ebfa6f4bdc8fede5b74bc2f08d9d92b55db3612"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "4.0.0" version: "3.2.0"
fuchsia_remote_debug_protocol: fuchsia_remote_debug_protocol:
dependency: transitive dependency: transitive
description: flutter description: flutter
@ -499,10 +499,10 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: image name: image
sha256: "4c68bfd5ae83e700b5204c1e74451e7bf3cf750e6843c6e158289cf56bda018e" sha256: "49a0d4b0c12402853d3f227fe7c315601b238d126aa4caa5dbb2dcf99421aa4a"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "4.1.7" version: "4.1.6"
integration_test: integration_test:
dependency: "direct dev" dependency: "direct dev"
description: flutter description: flutter
@ -512,18 +512,18 @@ packages:
dependency: "direct main" dependency: "direct main"
description: description:
name: intl name: intl
sha256: d6f56758b7d3014a48af9701c085700aac781a92a87a62b1333b46d8879661cf sha256: "3bc132a9dbce73a7e4a21a17d06e1878839ffbf975568bc875c60537824b0c4d"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "0.19.0" version: "0.18.1"
introduction_screen: introduction_screen:
dependency: "direct main" dependency: "direct main"
description: description:
name: introduction_screen name: introduction_screen
sha256: "325f26e86fa3c3e86e6ab2bbc1fda860c9e6eae5ff29166fc2a3cab8f710d5b5" sha256: "72d25ceb71471773783f72783608e17585af93d4bc6474df577fcfe9e7842852"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "3.1.14" version: "3.1.12"
io: io:
dependency: transitive dependency: transitive
description: description:
@ -560,26 +560,26 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: leak_tracker name: leak_tracker
sha256: "7f0df31977cb2c0b88585095d168e689669a2cc9b97c309665e3386f3e9d341a" sha256: "78eb209deea09858f5269f5a5b02be4049535f568c07b275096836f01ea323fa"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "10.0.4" version: "10.0.0"
leak_tracker_flutter_testing: leak_tracker_flutter_testing:
dependency: transitive dependency: transitive
description: description:
name: leak_tracker_flutter_testing name: leak_tracker_flutter_testing
sha256: "06e98f569d004c1315b991ded39924b21af84cf14cc94791b8aea337d25b57f8" sha256: b46c5e37c19120a8a01918cfaf293547f47269f7cb4b0058f21531c2465d6ef0
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "3.0.3" version: "2.0.1"
leak_tracker_testing: leak_tracker_testing:
dependency: transitive dependency: transitive
description: description:
name: leak_tracker_testing name: leak_tracker_testing
sha256: "6ba465d5d76e67ddf503e1161d1f4a6bc42306f9d66ca1e8f079a47290fb06d3" sha256: a597f72a664dbd293f3bfc51f9ba69816f84dcd403cdac7066cb3f6003f3ab47
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "3.0.1" version: "2.0.1"
lints: lints:
dependency: transitive dependency: transitive
description: description:
@ -592,10 +592,10 @@ packages:
dependency: "direct main" dependency: "direct main"
description: description:
name: logger name: logger
sha256: "8c94b8c219e7e50194efc8771cd0e9f10807d8d3e219af473d89b06cc2ee4e04" sha256: "6bbb9d6f7056729537a4309bda2e74e18e5d9f14302489cc1e93f33b3fe32cac"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.2.0" version: "2.0.2+1"
logging: logging:
dependency: transitive dependency: transitive
description: description:
@ -624,10 +624,10 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: meta name: meta
sha256: "7687075e408b093f36e6bbf6c91878cc0d4cd10f409506f7bc996f68220b9136" sha256: d584fa6707a52763a52446f02cc621b077888fb63b93bbcb1143a7be5a0c0c04
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "1.12.0" version: "1.11.0"
mime: mime:
dependency: transitive dependency: transitive
description: description:
@ -672,18 +672,18 @@ packages:
dependency: "direct main" dependency: "direct main"
description: description:
name: path_provider name: path_provider
sha256: c9e7d3a4cd1410877472158bee69963a4579f78b68c65a2b7d40d1a7a88bb161 sha256: b27217933eeeba8ff24845c34003b003b2b22151de3c908d0e679e8fe1aa078b
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.1.3" version: "2.1.2"
path_provider_android: path_provider_android:
dependency: transitive dependency: transitive
description: description:
name: path_provider_android name: path_provider_android
sha256: a248d8146ee5983446bf03ed5ea8f6533129a12b11f12057ad1b4a67a2b3b41d sha256: "477184d672607c0a3bf68fbbf601805f92ef79c82b64b4d6eb318cbca4c48668"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.2.4" version: "2.2.2"
path_provider_foundation: path_provider_foundation:
dependency: transitive dependency: transitive
description: description:
@ -744,10 +744,10 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: pointycastle name: pointycastle
sha256: "79fbafed02cfdbe85ef3fd06c7f4bc2cbcba0177e61b765264853d4253b21744" sha256: "43ac87de6e10afabc85c445745a7b799e04de84cebaa4fd7bf55a5e1e9604d29"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "3.9.0" version: "3.7.4"
pool: pool:
dependency: transitive dependency: transitive
description: description:
@ -768,10 +768,10 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: provider name: provider
sha256: c8a055ee5ce3fd98d6fc872478b03823ffdb448699c6ebdbbc71d59b596fd48c sha256: "9a96a0a19b594dbc5bf0f1f27d2bc67d5f95957359b461cd9feb44ed6ae75096"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "6.1.2" version: "6.1.1"
pub_semver: pub_semver:
dependency: transitive dependency: transitive
description: description:
@ -800,18 +800,18 @@ packages:
dependency: "direct main" dependency: "direct main"
description: description:
name: shared_preferences name: shared_preferences
sha256: d3bbe5553a986e83980916ded2f0b435ef2e1893dfaa29d5a7a790d0eca12180 sha256: "81429e4481e1ccfb51ede496e916348668fd0921627779233bd24cc3ff6abd02"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.2.3" version: "2.2.2"
shared_preferences_android: shared_preferences_android:
dependency: transitive dependency: transitive
description: description:
name: shared_preferences_android name: shared_preferences_android
sha256: "1ee8bf911094a1b592de7ab29add6f826a7331fb854273d55918693d5364a1f2" sha256: "8568a389334b6e83415b6aae55378e158fbc2314e074983362d20c562780fb06"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.2.2" version: "2.2.1"
shared_preferences_foundation: shared_preferences_foundation:
dependency: transitive dependency: transitive
description: description:
@ -840,10 +840,10 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: shared_preferences_web name: shared_preferences_web
sha256: "9aee1089b36bd2aafe06582b7d7817fd317ef05fc30e6ba14bff247d0933042a" sha256: "7b15ffb9387ea3e237bb7a66b8a23d2147663d391cafc5c8f37b2e7b4bde5d21"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.3.0" version: "2.2.2"
shared_preferences_windows: shared_preferences_windows:
dependency: transitive dependency: transitive
description: description:
@ -981,26 +981,26 @@ packages:
dependency: "direct dev" dependency: "direct dev"
description: description:
name: test name: test
sha256: "7ee446762c2c50b3bd4ea96fe13ffac69919352bd3b4b17bac3f3465edc58073" sha256: a1f7595805820fcc05e5c52e3a231aedd0b72972cb333e8c738a8b1239448b6f
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "1.25.2" version: "1.24.9"
test_api: test_api:
dependency: transitive dependency: transitive
description: description:
name: test_api name: test_api
sha256: "9955ae474176f7ac8ee4e989dadfb411a58c30415bcfb648fa04b2b8a03afa7f" sha256: "5c2f730018264d276c20e4f1503fd1308dfbbae39ec8ee63c5236311ac06954b"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "0.7.0" version: "0.6.1"
test_core: test_core:
dependency: transitive dependency: transitive
description: description:
name: test_core name: test_core
sha256: "2bc4b4ecddd75309300d8096f781c0e3280ca1ef85beda558d33fcbedc2eead4" sha256: a757b14fc47507060a162cc2530d9a4a2f92f5100a952c7443b5cad5ef5b106a
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "0.6.0" version: "0.5.9"
timing: timing:
dependency: transitive dependency: transitive
description: description:
@ -1021,26 +1021,26 @@ packages:
dependency: "direct main" dependency: "direct main"
description: description:
name: url_launcher name: url_launcher
sha256: "6ce1e04375be4eed30548f10a315826fd933c1e493206eab82eed01f438c8d2e" sha256: c512655380d241a337521703af62d2c122bf7b77a46ff7dd750092aa9433499c
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "6.2.6" version: "6.2.4"
url_launcher_android: url_launcher_android:
dependency: transitive dependency: transitive
description: description:
name: url_launcher_android name: url_launcher_android
sha256: "360a6ed2027f18b73c8d98e159dda67a61b7f2e0f6ec26e86c3ada33b0621775" sha256: "507dc655b1d9cb5ebc756032eb785f114e415f91557b73bf60b7e201dfedeb2f"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "6.3.1" version: "6.2.2"
url_launcher_ios: url_launcher_ios:
dependency: transitive dependency: transitive
description: description:
name: url_launcher_ios name: url_launcher_ios
sha256: "9149d493b075ed740901f3ee844a38a00b33116c7c5c10d7fb27df8987fb51d5" sha256: "75bb6fe3f60070407704282a2d295630cab232991eb52542b18347a8a941df03"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "6.2.5" version: "6.2.4"
url_launcher_linux: url_launcher_linux:
dependency: transitive dependency: transitive
description: description:
@ -1061,18 +1061,18 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: url_launcher_platform_interface name: url_launcher_platform_interface
sha256: "552f8a1e663569be95a8190206a38187b531910283c3e982193e4f2733f01029" sha256: a932c3a8082e118f80a475ce692fde89dc20fddb24c57360b96bc56f7035de1f
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.3.2" version: "2.3.1"
url_launcher_web: url_launcher_web:
dependency: transitive dependency: transitive
description: description:
name: url_launcher_web name: url_launcher_web
sha256: "8d9e750d8c9338601e709cd0885f95825086bd8b642547f26bda435aade95d8a" sha256: fff0932192afeedf63cdd50ecbb1bc825d31aed259f02bb8dba0f3b729a5e88b
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.3.1" version: "2.2.3"
url_launcher_windows: url_launcher_windows:
dependency: transitive dependency: transitive
description: description:
@ -1101,10 +1101,10 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: vm_service name: vm_service
sha256: "3923c89304b715fb1eb6423f017651664a03bf5f4b29983627c4da791f74a4ec" sha256: b3d56ff4341b8f182b96aceb2fa20e3dcb336b9f867bc0eafc0de10f1048e957
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "14.2.1" version: "13.0.0"
watcher: watcher:
dependency: transitive dependency: transitive
description: description:
@ -1117,18 +1117,18 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: web name: web
sha256: "97da13628db363c635202ad97068d47c5b8aa555808e7a9411963c533b449b27" sha256: "4188706108906f002b3a293509234588823c8c979dc83304e229ff400c996b05"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "0.5.1" version: "0.4.2"
web_socket_channel: web_socket_channel:
dependency: transitive dependency: transitive
description: description:
name: web_socket_channel name: web_socket_channel
sha256: "58c6666b342a38816b2e7e50ed0f1e261959630becd4c879c4f26bfa14aa5a42" sha256: "939ab60734a4f8fa95feacb55804fa278de28bdeef38e616dc08e44a84adea23"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.4.5" version: "2.4.3"
webdriver: webdriver:
dependency: transitive dependency: transitive
description: description:
@ -1157,10 +1157,10 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: win32 name: win32
sha256: "0a989dc7ca2bb51eac91e8fd00851297cfffd641aa7538b165c62637ca0eaa4a" sha256: "464f5674532865248444b4c3daca12bd9bf2d7c47f759ce2617986e7229494a8"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "5.4.0" version: "5.2.0"
xdg_directories: xdg_directories:
dependency: transitive dependency: transitive
description: description:
@ -1186,5 +1186,5 @@ packages:
source: hosted source: hosted
version: "3.1.2" version: "3.1.2"
sdks: sdks:
dart: ">=3.3.0 <4.0.0" dart: ">=3.3.0-279.1.beta <4.0.0"
flutter: ">=3.19.0" flutter: ">=3.16.0"

View file

@ -1,7 +1,7 @@
name: prasule name: prasule
description: Open-source private expense tracker description: Open-source private expense tracker
version: 1.1.1+8 version: 1.0.0+6
environment: environment:
sdk: '>=3.1.0-262.2.beta <4.0.0' sdk: '>=3.1.0-262.2.beta <4.0.0'
@ -18,12 +18,12 @@ dependencies:
currency_picker: ^2.0.16 currency_picker: ^2.0.16
dio: ^5.3.0 dio: ^5.3.0
dynamic_color: ^1.6.6 dynamic_color: ^1.6.6
fl_chart: ^0.67.0 fl_chart: ^0.66.0
flex_color_picker: ^3.3.0 flex_color_picker: ^3.3.0
flutter: flutter:
sdk: flutter sdk: flutter
flutter_file_dialog: ^3.0.2 flutter_file_dialog: ^3.0.2
flutter_iconpicker: <3.4.0 flutter_iconpicker: ^3.2.4
flutter_localizations: flutter_localizations:
sdk: flutter sdk: flutter
flutter_slidable: ^3.0.0 flutter_slidable: ^3.0.0