diff --git a/lib/core/constants.dart b/lib/core/constants.dart index 2817f69..b1f8c6f 100644 --- a/lib/core/constants.dart +++ b/lib/core/constants.dart @@ -1,4 +1,7 @@ -class Constants { +import 'package:flutter/material.dart'; + +@immutable +final class Constants { static const double appHPadding = 16; static const double walletStrapWidth = 85; static const double walletStrapHeight = 100; diff --git a/lib/core/data.dart b/lib/core/data.dart index 6121a65..6cdb8c1 100644 --- a/lib/core/data.dart +++ b/lib/core/data.dart @@ -1,7 +1,7 @@ import 'package:flutter/material.dart'; import 'package:wallet_app_workshop/core/styles.dart'; -class CreditCardData { +final class CreditCardData { const CreditCardData({ required this.id, required this.name, diff --git a/lib/core/extensions/string_extensions.dart b/lib/core/extensions/string_extensions.dart new file mode 100644 index 0000000..cc446cd --- /dev/null +++ b/lib/core/extensions/string_extensions.dart @@ -0,0 +1,5 @@ +extension StringExtensions on String { + String get toPng => 'assets/images/$this.png'; + + String get toIcon => 'assets/icons/$this.png'; +} diff --git a/lib/core/init/initialization.dart b/lib/core/init/initialization.dart new file mode 100644 index 0000000..2936b7d --- /dev/null +++ b/lib/core/init/initialization.dart @@ -0,0 +1,12 @@ +import 'package:flutter/material.dart'; +import 'package:flutter/services.dart'; + +@immutable +final class AppInitialization { + const AppInitialization._(); + + static Future initialization() async { + WidgetsFlutterBinding.ensureInitialized(); + SystemChrome.setSystemUIOverlayStyle(SystemUiOverlayStyle.light); + } +} diff --git a/lib/core/styles.dart b/lib/core/styles.dart index 954e1ae..69d25a3 100644 --- a/lib/core/styles.dart +++ b/lib/core/styles.dart @@ -1,6 +1,7 @@ import 'package:flutter/material.dart'; -class AppColors { +@immutable +final class AppColors { static const Color primary = Color(0xff1A77FF); static const Color secondary = Color(0xffFFBB05); static const Color accent = Color(0xffF5C3D2); @@ -13,7 +14,7 @@ class AppColors { static const Color white = Color(0xffF2F2F2); } -class AppBorderRadius { +final class AppBorderRadius { static const double sm = 5; static const double md = 10; static const double lg = 15; @@ -21,7 +22,7 @@ class AppBorderRadius { static const double xxl = 25; } -class AppThemes { +final class AppThemes { static ThemeData getTheme({bool isDark = true}) { return ThemeData( fontFamily: 'Raleway', @@ -69,7 +70,7 @@ class AppThemes { ), menuStyle: MenuStyle( backgroundColor: - const MaterialStatePropertyAll(AppColors.black), + const MaterialStatePropertyAll(AppColors.black), elevation: const MaterialStatePropertyAll(0), shape: MaterialStatePropertyAll( RoundedRectangleBorder( diff --git a/lib/core/widgets/dashed_border_container.dart b/lib/core/widgets/dashed_border_container.dart index df12332..e08a0cd 100644 --- a/lib/core/widgets/dashed_border_container.dart +++ b/lib/core/widgets/dashed_border_container.dart @@ -2,7 +2,7 @@ import 'dart:math'; import 'package:flutter/material.dart'; -class DashedBorderContainer extends StatelessWidget { +final class DashedBorderContainer extends StatelessWidget { const DashedBorderContainer({ super.key, this.width, @@ -41,7 +41,7 @@ class DashedBorderContainer extends StatelessWidget { } } -class DashedBorderPainter extends CustomPainter { +final class DashedBorderPainter extends CustomPainter { DashedBorderPainter({ this.dash = 5.0, this.gap = 3.0, diff --git a/lib/core/widgets/wallet.dart b/lib/core/widgets/wallet.dart index b6cd392..08467db 100644 --- a/lib/core/widgets/wallet.dart +++ b/lib/core/widgets/wallet.dart @@ -3,7 +3,7 @@ import 'package:wallet_app_workshop/core/constants.dart'; import 'package:wallet_app_workshop/core/styles.dart'; import 'package:wallet_app_workshop/core/widgets/dashed_border_container.dart'; -class Wallet extends StatelessWidget { +final class Wallet extends StatelessWidget { const Wallet({ required this.width, required this.height, @@ -48,7 +48,7 @@ class Wallet extends StatelessWidget { } } -class _WalletStrapSide extends StatelessWidget { +final class _WalletStrapSide extends StatelessWidget { const _WalletStrapSide(); @override @@ -88,7 +88,7 @@ class _WalletStrapSide extends StatelessWidget { } } -class WalletSide extends StatelessWidget { +final class WalletSide extends StatelessWidget { const WalletSide({super.key}); @override diff --git a/lib/credit-cards/credit_card.dart b/lib/credit-cards/credit_card.dart index 8d04663..5b5fef5 100644 --- a/lib/credit-cards/credit_card.dart +++ b/lib/credit-cards/credit_card.dart @@ -4,7 +4,7 @@ import 'package:wallet_app_workshop/core/styles.dart'; const double creditCardAspectRatio = 1.56; -class CreditCard extends StatelessWidget { +final class CreditCard extends StatelessWidget { const CreditCard({ required this.data, super.key, @@ -44,7 +44,7 @@ class CreditCard extends StatelessWidget { } } -class _CreditCardFront extends StatelessWidget { +final class _CreditCardFront extends StatelessWidget { const _CreditCardFront(this.data); final CreditCardData data; @@ -114,7 +114,7 @@ class _CreditCardFront extends StatelessWidget { } } -class _CreditCardBack extends StatelessWidget { +final class _CreditCardBack extends StatelessWidget { const _CreditCardBack(this.data); final CreditCardData data; diff --git a/lib/credit-cards/credit_card_page.dart b/lib/credit-cards/credit_card_page.dart index fc657ff..7c34e53 100644 --- a/lib/credit-cards/credit_card_page.dart +++ b/lib/credit-cards/credit_card_page.dart @@ -5,7 +5,7 @@ import 'package:wallet_app_workshop/core/styles.dart'; import 'package:wallet_app_workshop/credit-cards/credit_card.dart'; import 'package:wallet_app_workshop/on-boarding/on_boarding_page.dart'; -class CreditCardPage extends StatefulWidget { +final class CreditCardPage extends StatefulWidget { const CreditCardPage({ required this.initialIndex, required this.pageTransitionAnimation, @@ -182,7 +182,7 @@ class _CreditCardPageState extends State { } } -class _Button extends StatelessWidget { +final class _Button extends StatelessWidget { const _Button({ required this.label, required this.icon, diff --git a/lib/credit-cards/credit_cards_page.dart b/lib/credit-cards/credit_cards_page.dart index 60aa255..5e3615a 100644 --- a/lib/credit-cards/credit_cards_page.dart +++ b/lib/credit-cards/credit_cards_page.dart @@ -14,7 +14,7 @@ const maxCardScale = 1.0; const cardsOffset = 12.0; const minThrowDistance = 300.0; -class CreditCardsPage extends StatefulWidget { +final class CreditCardsPage extends StatefulWidget { const CreditCardsPage({ super.key, this.onCardPagePush, @@ -132,7 +132,7 @@ class _CreditCardsPageState extends State { } } -class CreditCardsStack extends StatefulWidget { +final class CreditCardsStack extends StatefulWidget { const CreditCardsStack({ required this.itemCount, required this.itemBuilder, @@ -150,7 +150,7 @@ class CreditCardsStack extends StatefulWidget { State createState() => _CreditCardsStackState(); } -class _CreditCardsStackState extends State +final class _CreditCardsStackState extends State with SingleTickerProviderStateMixin { late final AnimationController animationController; late final Animation curvedAnimation; diff --git a/lib/home_page.dart b/lib/home_page.dart index 598b5a3..c7ddc47 100644 --- a/lib/home_page.dart +++ b/lib/home_page.dart @@ -1,12 +1,13 @@ import 'package:flutter/material.dart'; import 'package:wallet_app_workshop/core/constants.dart'; import 'package:wallet_app_workshop/core/data.dart'; +import 'package:wallet_app_workshop/core/extensions/string_extensions.dart'; import 'package:wallet_app_workshop/core/styles.dart'; import 'package:wallet_app_workshop/core/widgets/wallet.dart'; import 'package:wallet_app_workshop/credit-cards/credit_cards_page.dart'; import 'package:wallet_app_workshop/payment/payment_bottom_sheet.dart'; -class HomePage extends StatefulWidget { +final class HomePage extends StatefulWidget { const HomePage({super.key}); @override @@ -61,12 +62,12 @@ class _HomePageState extends State { destinations: [ NavigationDestination( selectedIcon: Image.asset( - 'assets/icons/cards-active.png', + 'cards-active'.toIcon, width: 35, height: 35, ), icon: Image.asset( - 'assets/icons/cards.png', + 'cards'.toIcon, width: 35, height: 35, ), @@ -103,12 +104,12 @@ class _HomePageState extends State { ), NavigationDestination( selectedIcon: Image.asset( - 'assets/icons/notifications-active.png', + 'notifications-active'.toIcon, width: 30, height: 30, ), icon: Image.asset( - 'assets/icons/notifications.png', + 'notifications'.toIcon, width: 30, height: 30, ), @@ -123,7 +124,7 @@ class _HomePageState extends State { } } -class _NotificationsPage extends StatelessWidget { +final class _NotificationsPage extends StatelessWidget { const _NotificationsPage(); @override @@ -134,7 +135,7 @@ class _NotificationsPage extends StatelessWidget { mainAxisAlignment: MainAxisAlignment.center, children: [ Center( - child: Image.asset('assets/images/empty.png'), + child: Image.asset('empty'.toPng), ), const SizedBox(height: 20), const Center( diff --git a/lib/main.dart b/lib/main.dart index 471adbb..3eace9f 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -1,15 +1,14 @@ import 'package:flutter/material.dart'; -import 'package:flutter/services.dart'; +import 'package:wallet_app_workshop/core/init/initialization.dart'; import 'package:wallet_app_workshop/core/styles.dart'; import 'package:wallet_app_workshop/on-boarding/on_boarding_page.dart'; -void main() { - WidgetsFlutterBinding.ensureInitialized(); - SystemChrome.setSystemUIOverlayStyle(SystemUiOverlayStyle.light); +Future main() async { + await AppInitialization.initialization(); runApp(const WalletApp()); } -class WalletApp extends StatelessWidget { +final class WalletApp extends StatelessWidget { const WalletApp({super.key}); @override diff --git a/lib/on-boarding/on_boarding_page.dart b/lib/on-boarding/on_boarding_page.dart index 65a0fc0..b8f8ba2 100644 --- a/lib/on-boarding/on_boarding_page.dart +++ b/lib/on-boarding/on_boarding_page.dart @@ -6,7 +6,7 @@ import 'package:wallet_app_workshop/core/styles.dart'; import 'package:wallet_app_workshop/core/widgets/wallet.dart'; import 'package:wallet_app_workshop/home_page.dart'; -class OnBoardingPage extends StatefulWidget { +final class OnBoardingPage extends StatefulWidget { const OnBoardingPage({super.key}); @override diff --git a/lib/payment/payment_bottom_sheet.dart b/lib/payment/payment_bottom_sheet.dart index c3cd26a..3acbd5a 100644 --- a/lib/payment/payment_bottom_sheet.dart +++ b/lib/payment/payment_bottom_sheet.dart @@ -2,7 +2,7 @@ import 'package:flutter/material.dart'; import 'package:wallet_app_workshop/core/data.dart'; import 'package:wallet_app_workshop/payment/payment_button.dart'; -class PaymentBottomSheet extends StatefulWidget { +final class PaymentBottomSheet extends StatefulWidget { const PaymentBottomSheet({super.key}); @override diff --git a/lib/payment/payment_button.dart b/lib/payment/payment_button.dart index 25f19fa..76ac231 100644 --- a/lib/payment/payment_button.dart +++ b/lib/payment/payment_button.dart @@ -1,12 +1,13 @@ import 'dart:math'; import 'package:flutter/material.dart'; +import 'package:wallet_app_workshop/core/extensions/string_extensions.dart'; import 'package:wallet_app_workshop/core/styles.dart'; const dragSnapDuration = Duration(milliseconds: 300); const draggableMinWidth = 60.0; -class PaymentButton extends StatefulWidget { +final class PaymentButton extends StatefulWidget { const PaymentButton({ super.key, this.enabled = false, @@ -198,7 +199,7 @@ class _PaymentButtonState extends State width: 60, child: Center( child: Image.asset( - 'assets/icons/dollar.png', + 'dollar'.toIcon, width: 30, ), ),