From 77299f916b74e982b7825164f210c3399e014be4 Mon Sep 17 00:00:00 2001 From: Mathis Imming Date: Wed, 12 Jun 2024 11:34:31 +0200 Subject: [PATCH 1/3] created add category page --- .../add_category/add_category_screen.dart | 74 +++++++++++++++++++ .../lib/screens/home_screen/home_screen.dart | 4 +- client/cashcompass/pubspec.lock | 8 ++ 3 files changed, 84 insertions(+), 2 deletions(-) create mode 100644 client/cashcompass/lib/screens/add_category/add_category_screen.dart diff --git a/client/cashcompass/lib/screens/add_category/add_category_screen.dart b/client/cashcompass/lib/screens/add_category/add_category_screen.dart new file mode 100644 index 0000000..925c1d9 --- /dev/null +++ b/client/cashcompass/lib/screens/add_category/add_category_screen.dart @@ -0,0 +1,74 @@ +import 'package:flutter/cupertino.dart'; + +class AddCategoryScreen extends StatefulWidget { + const AddCategoryScreen({super.key}); + + @override + State createState() => _AddCategoryScreenState(); +} + +class _AddCategoryScreenState extends State { + @override + Widget build(BuildContext context) { + return CupertinoPageScaffold( + navigationBar: const CupertinoNavigationBar( + middle: Text("Add Category"), + ), + child: SafeArea( + child: Padding( + padding: const EdgeInsets.all(8.0), + child: Column( + children: [ + const Padding( + padding: EdgeInsets.symmetric(vertical: 8.0), + child: Row( + children: [ + SizedBox( + width: 25, + ), + Text("Title"), + SizedBox( + width: 50, + ), + Expanded( + child: CupertinoTextField(), + ) + ], + ), + ), + const Padding( + padding: EdgeInsets.symmetric(vertical: 8.0), + child: Row( + children: [ + SizedBox( + width: 25, + ), + Text("Icon"), + SizedBox( + width: 58, + ), + Expanded( + child: CupertinoTextField(), + ) + ], + ), + ), + const SizedBox( + height: 10, + ), + Center( + child: CupertinoButton( + color: CupertinoColors.systemGreen, + onPressed: handleSaveNewCategory, + child: const Text("SAVE"), + ), + ), + ], + ), + ), + ), + ); + } + + void handleSaveNewCategory() {} +} diff --git a/client/cashcompass/lib/screens/home_screen/home_screen.dart b/client/cashcompass/lib/screens/home_screen/home_screen.dart index bbdb7c9..7962568 100644 --- a/client/cashcompass/lib/screens/home_screen/home_screen.dart +++ b/client/cashcompass/lib/screens/home_screen/home_screen.dart @@ -1,4 +1,4 @@ -import 'package:cashcompass/screens/categories_screen/categories_screen.dart'; +import 'package:cashcompass/screens/add_category/add_category_screen.dart'; import 'package:cashcompass/screens/friends/friends_screen.dart'; import 'package:cashcompass/screens/latest_transactions/latest_transactions_screen.dart'; import 'package:cashcompass/screens/profile/profile_screen.dart'; @@ -21,7 +21,7 @@ class _HomeScreenState extends State { ProfileScreen(), WalletsScreen(), LatestTransactionsScreen(), - CategoriesScreen(), + AddCategoryScreen(), FriendsScreen(), ]; diff --git a/client/cashcompass/pubspec.lock b/client/cashcompass/pubspec.lock index e52914b..5b7f306 100644 --- a/client/cashcompass/pubspec.lock +++ b/client/cashcompass/pubspec.lock @@ -223,6 +223,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.15.0" + nested: + dependency: transitive + description: + name: nested + sha256: "03bac4c528c64c95c722ec99280375a6f2fc708eec17c7b3f07253b626cd2a20" + url: "https://pub.dev" + source: hosted + version: "1.0.0" path: dependency: transitive description: From be57a13e9e3d45fe2d1cb83373c7ecb37988cb6e Mon Sep 17 00:00:00 2001 From: Mathis Imming Date: Wed, 12 Jun 2024 11:48:54 +0200 Subject: [PATCH 2/3] added routing to add page --- .../categories_screen/categories_screen.dart | 27 ++++++++++++++----- .../lib/screens/home_screen/home_screen.dart | 4 +-- 2 files changed, 22 insertions(+), 9 deletions(-) diff --git a/client/cashcompass/lib/screens/categories_screen/categories_screen.dart b/client/cashcompass/lib/screens/categories_screen/categories_screen.dart index 0628290..01c7a51 100644 --- a/client/cashcompass/lib/screens/categories_screen/categories_screen.dart +++ b/client/cashcompass/lib/screens/categories_screen/categories_screen.dart @@ -1,12 +1,13 @@ import 'package:cashcompass/controller/controller.dart'; +import 'package:cashcompass/screens/add_category/add_category_screen.dart'; +import 'package:cashcompass_hook/src/accounts/category/category.dart'; +import 'package:cashcompass_hook/src/accounts/category/category_icons.dart'; +import 'package:cashcompass_hook/src/chart_of_accounts.dart/chart_of_accounts.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; + import '../../widgets/balance_overview/balance_overview.dart'; -import 'package:cashcompass_hook/src/chart_of_accounts.dart/chart_of_accounts.dart'; -import 'package:cashcompass_hook/src/data_storage/accout_manager.dart'; import '../../widgets/balance_overview/mock_transaction.dart'; -import 'package:cashcompass_hook/src/accounts/category/category.dart'; -import 'package:cashcompass_hook/src/accounts/category/category_icons.dart'; class CategoriesScreen extends StatefulWidget { const CategoriesScreen({super.key}); @@ -54,8 +55,15 @@ class _CategoriesScreenState extends State { @override Widget build(BuildContext context) { return CupertinoPageScaffold( - navigationBar: const CupertinoNavigationBar( - middle: Text("Categories"), + navigationBar: CupertinoNavigationBar( + middle: const Text("Categories"), + trailing: GestureDetector( + onTap: handleCreateCategory, + child: Icon( + CupertinoIcons.add, + size: 30.0, //you can adjust the size as needed + ), + ), ), child: SafeArea( child: SingleChildScrollView( @@ -67,7 +75,7 @@ class _CategoriesScreenState extends State { expenses: c2, ), ListView.builder( - physics: NeverScrollableScrollPhysics(), + physics: const NeverScrollableScrollPhysics(), shrinkWrap: true, itemCount: list.length + 1, itemBuilder: (context, index) { @@ -134,6 +142,11 @@ class _CategoriesScreenState extends State { void _handleCategoryListTileTapped() { throw UnsupportedError("Not yet implemented"); } + + void handleCreateCategory() { + Navigator.of(context).push( + CupertinoPageRoute(builder: (context) => const AddCategoryScreen())); + } } class InterpretedCategory { diff --git a/client/cashcompass/lib/screens/home_screen/home_screen.dart b/client/cashcompass/lib/screens/home_screen/home_screen.dart index 7962568..bbdb7c9 100644 --- a/client/cashcompass/lib/screens/home_screen/home_screen.dart +++ b/client/cashcompass/lib/screens/home_screen/home_screen.dart @@ -1,4 +1,4 @@ -import 'package:cashcompass/screens/add_category/add_category_screen.dart'; +import 'package:cashcompass/screens/categories_screen/categories_screen.dart'; import 'package:cashcompass/screens/friends/friends_screen.dart'; import 'package:cashcompass/screens/latest_transactions/latest_transactions_screen.dart'; import 'package:cashcompass/screens/profile/profile_screen.dart'; @@ -21,7 +21,7 @@ class _HomeScreenState extends State { ProfileScreen(), WalletsScreen(), LatestTransactionsScreen(), - AddCategoryScreen(), + CategoriesScreen(), FriendsScreen(), ]; From 70df93033b27640fe6d690cff726008860300c1b Mon Sep 17 00:00:00 2001 From: Mathis Imming Date: Wed, 12 Jun 2024 12:11:32 +0200 Subject: [PATCH 3/3] icon picker --- .../add_category/add_category_screen.dart | 58 ++++++++++++++++--- 1 file changed, 50 insertions(+), 8 deletions(-) diff --git a/client/cashcompass/lib/screens/add_category/add_category_screen.dart b/client/cashcompass/lib/screens/add_category/add_category_screen.dart index 925c1d9..0e06812 100644 --- a/client/cashcompass/lib/screens/add_category/add_category_screen.dart +++ b/client/cashcompass/lib/screens/add_category/add_category_screen.dart @@ -1,23 +1,58 @@ +import 'package:cashcompass_hook/src/accounts/category/category_icons.dart'; import 'package:flutter/cupertino.dart'; class AddCategoryScreen extends StatefulWidget { - const AddCategoryScreen({super.key}); + const AddCategoryScreen({Key? key}) : super(key: key); @override State createState() => _AddCategoryScreenState(); } class _AddCategoryScreenState extends State { + CategoryIcons selectedIcon = CategoryIcons.values[0]; + + _showPicker() async { + await showCupertinoModalPopup( + context: context, + builder: (BuildContext context) { + return Container( + height: 200, + padding: EdgeInsets.all(8.0), + color: CupertinoColors.white, // non-transparent background + child: CupertinoPicker( + itemExtent: 35, + onSelectedItemChanged: (index) { + setState(() { + selectedIcon = CategoryIcons.values[index]; + }); + }, + children: CategoryIcons.values + .map((icon) => Row( + children: [ + Icon(icon.icon), + SizedBox( + width: 10, + ), + Text(icon.name), + ], + )) + .toList(), + ), + ); + }, + ); + } + @override Widget build(BuildContext context) { return CupertinoPageScaffold( - navigationBar: const CupertinoNavigationBar( - middle: Text("Add Category"), + navigationBar: CupertinoNavigationBar( + middle: const Text("Add Category"), ), child: SafeArea( child: Padding( padding: const EdgeInsets.all(8.0), - child: Column( + child: ListView( children: [ const Padding( padding: EdgeInsets.symmetric(vertical: 8.0), @@ -36,7 +71,7 @@ class _AddCategoryScreenState extends State { ], ), ), - const Padding( + Padding( padding: EdgeInsets.symmetric(vertical: 8.0), child: Row( children: [ @@ -45,11 +80,18 @@ class _AddCategoryScreenState extends State { ), Text("Icon"), SizedBox( - width: 58, + width: 50, ), Expanded( - child: CupertinoTextField(), - ) + child: CupertinoButton( + child: Row( + mainAxisAlignment: MainAxisAlignment.start, + children: [ + Icon(selectedIcon.icon) + ]), // aligned to the left + onPressed: _showPicker, + ), + ), ], ), ),