diff --git a/assets/images/bottom_bar/active/academy.png b/assets/images/bottom_bar/active/academy.png new file mode 100644 index 0000000..f54020a Binary files /dev/null and b/assets/images/bottom_bar/active/academy.png differ diff --git a/assets/images/bottom_bar/active/invest.png b/assets/images/bottom_bar/active/invest.png new file mode 100644 index 0000000..82bed02 Binary files /dev/null and b/assets/images/bottom_bar/active/invest.png differ diff --git a/assets/images/bottom_bar/active/portfolio.png b/assets/images/bottom_bar/active/portfolio.png new file mode 100644 index 0000000..00b3c37 Binary files /dev/null and b/assets/images/bottom_bar/active/portfolio.png differ diff --git a/assets/images/bottom_bar/active/settings.png b/assets/images/bottom_bar/active/settings.png new file mode 100644 index 0000000..569478f Binary files /dev/null and b/assets/images/bottom_bar/active/settings.png differ diff --git a/assets/images/bottom_bar/active/wallet.png b/assets/images/bottom_bar/active/wallet.png new file mode 100644 index 0000000..dc6320e Binary files /dev/null and b/assets/images/bottom_bar/active/wallet.png differ diff --git a/assets/images/bottom_bar/inactive/academy.png b/assets/images/bottom_bar/inactive/academy.png new file mode 100644 index 0000000..59f998b Binary files /dev/null and b/assets/images/bottom_bar/inactive/academy.png differ diff --git a/assets/images/bottom_bar/inactive/invest.png b/assets/images/bottom_bar/inactive/invest.png new file mode 100644 index 0000000..a22f6ef Binary files /dev/null and b/assets/images/bottom_bar/inactive/invest.png differ diff --git a/assets/images/bottom_bar/inactive/portfolio.png b/assets/images/bottom_bar/inactive/portfolio.png new file mode 100644 index 0000000..385c3c7 Binary files /dev/null and b/assets/images/bottom_bar/inactive/portfolio.png differ diff --git a/assets/images/bottom_bar/inactive/settings.png b/assets/images/bottom_bar/inactive/settings.png new file mode 100644 index 0000000..4599119 Binary files /dev/null and b/assets/images/bottom_bar/inactive/settings.png differ diff --git a/assets/images/bottom_bar/inactive/wallet.png b/assets/images/bottom_bar/inactive/wallet.png new file mode 100644 index 0000000..e132323 Binary files /dev/null and b/assets/images/bottom_bar/inactive/wallet.png differ diff --git a/ios/Flutter/Debug.xcconfig b/ios/Flutter/Debug.xcconfig index 592ceee..ec97fc6 100644 --- a/ios/Flutter/Debug.xcconfig +++ b/ios/Flutter/Debug.xcconfig @@ -1 +1,2 @@ +#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" #include "Generated.xcconfig" diff --git a/ios/Flutter/Release.xcconfig b/ios/Flutter/Release.xcconfig index 592ceee..c4855bf 100644 --- a/ios/Flutter/Release.xcconfig +++ b/ios/Flutter/Release.xcconfig @@ -1 +1,2 @@ +#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" #include "Generated.xcconfig" diff --git a/ios/Podfile b/ios/Podfile new file mode 100644 index 0000000..d97f17e --- /dev/null +++ b/ios/Podfile @@ -0,0 +1,44 @@ +# Uncomment this line to define a global platform for your project +# platform :ios, '12.0' + +# CocoaPods analytics sends network stats synchronously affecting flutter build latency. +ENV['COCOAPODS_DISABLE_STATS'] = 'true' + +project 'Runner', { + 'Debug' => :debug, + 'Profile' => :release, + 'Release' => :release, +} + +def flutter_root + generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'Generated.xcconfig'), __FILE__) + unless File.exist?(generated_xcode_build_settings_path) + raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure flutter pub get is executed first" + end + + File.foreach(generated_xcode_build_settings_path) do |line| + matches = line.match(/FLUTTER_ROOT\=(.*)/) + return matches[1].strip if matches + end + raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Generated.xcconfig, then run flutter pub get" +end + +require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root) + +flutter_ios_podfile_setup + +target 'Runner' do + use_frameworks! + use_modular_headers! + + flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) + target 'RunnerTests' do + inherit! :search_paths + end +end + +post_install do |installer| + installer.pods_project.targets.each do |target| + flutter_additional_ios_build_settings(target) + end +end diff --git a/lib/core/routes/route_name.dart b/lib/core/routes/route_name.dart index 7cfc698..4eb7872 100644 --- a/lib/core/routes/route_name.dart +++ b/lib/core/routes/route_name.dart @@ -22,6 +22,9 @@ class RouteName { //choose country static const String chooseCountryScreen = 'chooseCountryScreen'; + // + static const String mainScreen = 'mainScreen'; + //Biometric static const String biometricScreen = 'biometricScreen'; diff --git a/lib/core/routes/routes.dart b/lib/core/routes/routes.dart index 5792d5c..b754bf5 100644 --- a/lib/core/routes/routes.dart +++ b/lib/core/routes/routes.dart @@ -2,6 +2,7 @@ import 'package:go_router/go_router.dart'; import 'package:tanami_app/core/routes/route_name.dart'; +import 'package:tanami_app/features/MainScreens/MainScreen.dart'; import 'package:tanami_app/features/biometric/presentation/pages/biometric_screen.dart'; import 'package:tanami_app/features/countrySelection/presentation/pages/choose_country_screen.dart'; import 'package:tanami_app/features/otpVerification/presentation/pages/otp_screen.dart'; @@ -60,6 +61,13 @@ final goRouter = GoRouter( return const ChooseCountryScreen(); }, ), + GoRoute( + name: RouteName.mainScreen, + path: RouteName.mainScreen, + builder: (context, state) { + return const MainScreen(); + }, + ), GoRoute( name: RouteName.biometricScreen, path: RouteName.biometricScreen, diff --git a/lib/features/MainScreens/Academy/presentation/pages/academyScreen.dart b/lib/features/MainScreens/Academy/presentation/pages/academyScreen.dart new file mode 100644 index 0000000..2c81d9b --- /dev/null +++ b/lib/features/MainScreens/Academy/presentation/pages/academyScreen.dart @@ -0,0 +1,15 @@ +import 'package:flutter/material.dart'; + +class AcademyScreen extends StatefulWidget { + const AcademyScreen({super.key}); + + @override + State createState() => _AcademyScreenState(); +} + +class _AcademyScreenState extends State { + @override + Widget build(BuildContext context) { + return Scaffold(body: Text('Academy'),); + } +} \ No newline at end of file diff --git a/lib/features/MainScreens/Invest/presentation/pages/investScreen.dart b/lib/features/MainScreens/Invest/presentation/pages/investScreen.dart new file mode 100644 index 0000000..3d5570e --- /dev/null +++ b/lib/features/MainScreens/Invest/presentation/pages/investScreen.dart @@ -0,0 +1,15 @@ +import 'package:flutter/material.dart'; + +class InvestScreen extends StatefulWidget { + const InvestScreen({super.key}); + + @override + State createState() => _InvestScreenState(); +} + +class _InvestScreenState extends State { + @override + Widget build(BuildContext context) { + return Scaffold(body: Text('Invest'),); + } +} \ No newline at end of file diff --git a/lib/features/MainScreens/MainScreen.dart b/lib/features/MainScreens/MainScreen.dart new file mode 100644 index 0000000..a1d6e05 --- /dev/null +++ b/lib/features/MainScreens/MainScreen.dart @@ -0,0 +1,32 @@ +import 'package:flutter/material.dart'; +import 'package:tanami_app/features/MainScreens/Academy/presentation/pages/academyScreen.dart'; +import 'package:tanami_app/features/MainScreens/Invest/presentation/pages/investScreen.dart'; +import 'package:tanami_app/features/MainScreens/Portfolio/presentation/pages/portfolioScreen.dart'; +import 'package:tanami_app/features/MainScreens/Settings/presentation/pages/settingsScreen.dart'; +import 'package:tanami_app/features/MainScreens/Wallet/presentation/pages/walletScreen.dart'; +import 'package:tanami_app/shared/components/common_bottom_navigation.dart'; + +var currentTab = [ + const WalletScreen(), + const PortfolioScreen(), + const InvestScreen(), + const AcademyScreen(), + const SettingsScreen(), +]; + +var selectedIndex = 1; + +void updateTab(int index) { + selectedIndex = index; +} + +class MainScreen extends StatelessWidget { + const MainScreen({super.key}); + @override + Widget build(BuildContext context) { + return Scaffold( + body: currentTab[selectedIndex], + bottomNavigationBar: bottomnavigationbar(selectedIndex), + ); + } +} diff --git a/lib/features/MainScreens/Portfolio/presentation/pages/portfolioScreen.dart b/lib/features/MainScreens/Portfolio/presentation/pages/portfolioScreen.dart new file mode 100644 index 0000000..c46f5dc --- /dev/null +++ b/lib/features/MainScreens/Portfolio/presentation/pages/portfolioScreen.dart @@ -0,0 +1,15 @@ +import 'package:flutter/material.dart'; + +class PortfolioScreen extends StatefulWidget { + const PortfolioScreen({super.key}); + + @override + State createState() => _PortfolioScreenState(); +} + +class _PortfolioScreenState extends State { + @override + Widget build(BuildContext context) { + return Scaffold(body: Text('Portfolio'),); + } +} \ No newline at end of file diff --git a/lib/features/MainScreens/Settings/presentation/pages/settingsScreen.dart b/lib/features/MainScreens/Settings/presentation/pages/settingsScreen.dart new file mode 100644 index 0000000..ec3e19c --- /dev/null +++ b/lib/features/MainScreens/Settings/presentation/pages/settingsScreen.dart @@ -0,0 +1,17 @@ +import 'package:flutter/material.dart'; + +class SettingsScreen extends StatefulWidget { + const SettingsScreen({super.key}); + + @override + State createState() => _SettingsScreenState(); +} + +class _SettingsScreenState extends State { + @override + Widget build(BuildContext context) { + return Scaffold( + body: Text('Settings'), + ); + } +} diff --git a/lib/features/MainScreens/Wallet/presentation/pages/walletScreen.dart b/lib/features/MainScreens/Wallet/presentation/pages/walletScreen.dart new file mode 100644 index 0000000..dec5122 --- /dev/null +++ b/lib/features/MainScreens/Wallet/presentation/pages/walletScreen.dart @@ -0,0 +1,15 @@ +import 'package:flutter/material.dart'; + +class WalletScreen extends StatefulWidget { + const WalletScreen({super.key}); + + @override + State createState() => _WalletScreenState(); +} + +class _WalletScreenState extends State { + @override + Widget build(BuildContext context) { + return Scaffold(body: Text('Wallet'),); + } +} \ No newline at end of file diff --git a/lib/features/login/presentation/widgets/bottom_section.dart b/lib/features/login/presentation/widgets/bottom_section.dart index dbc49b8..8fc6017 100644 --- a/lib/features/login/presentation/widgets/bottom_section.dart +++ b/lib/features/login/presentation/widgets/bottom_section.dart @@ -41,6 +41,7 @@ class BottomSection extends StatelessWidget { if (state is LoginLoading) { Loader.loader(context); } else if (state is LoginSuccess) { + goRouter.goNamed('mainScreen'); successToastMessage(context, "login successful !"); goRouter.pop(); diff --git a/lib/features/welcome/presentation/widgets/build_onboarding_page_widget.dart b/lib/features/welcome/presentation/widgets/build_onboarding_page_widget.dart index 18149e6..af4c921 100644 --- a/lib/features/welcome/presentation/widgets/build_onboarding_page_widget.dart +++ b/lib/features/welcome/presentation/widgets/build_onboarding_page_widget.dart @@ -46,7 +46,7 @@ Widget buildOnboardingPage( clr: AppColor.darkGreyColor, ), ), - const Gap(40), + const Gap(30), welcomeIndicator(pageController), if (isLastPage) const LoginSignUpButton(), ], diff --git a/lib/shared/components/common_bottom_navigation.dart b/lib/shared/components/common_bottom_navigation.dart new file mode 100644 index 0000000..2e6d7f0 --- /dev/null +++ b/lib/shared/components/common_bottom_navigation.dart @@ -0,0 +1,97 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; +import 'package:tanami_app/features/MainScreens/MainScreen.dart'; + +Widget bottomnavigationbar(selectedIndex) { + return BottomNavigationBar( + type: BottomNavigationBarType.fixed, + showUnselectedLabels: true, + selectedItemColor: Color(0xFF0B8933), + unselectedItemColor: const Color(0xFF676767), + unselectedLabelStyle: TextStyle( + fontSize: 10.sp, + color: const Color(0xFF676767), + fontWeight: FontWeight.w400, + fontFamily: 'hiragino', + ), + selectedLabelStyle: TextStyle( + fontSize: 10.sp, + color: const Color(0xFF0B8933), + fontWeight: FontWeight.w400, + fontFamily: 'hiragino', + ), + currentIndex: selectedIndex, + onTap: (index) { + updateTab(index); + }, + items: [ + BottomNavigationBarItem( + icon: Image.asset( + 'assets/images/bottom_bar/inactive/wallet.png', + height: 26.h, + width: 26.w, + ), + activeIcon: Image.asset( + 'assets/images/bottom_bar/active/wallet.png', + height: 30.h, + width: 30.w, + ), + label: 'Wallet', + ), + BottomNavigationBarItem( + icon: Image.asset( + 'assets/images/bottom_bar/inactive/portfolio.png', + height: 26.h, + width: 26.w, + ), + activeIcon: Image.asset( + 'assets/images/bottom_bar/active/portfolio.png', + height: 30.h, + width: 30.w, + ), + label: 'Portfolio', + ), + BottomNavigationBarItem( + icon: Image.asset( + 'assets/images/bottom_bar/inactive/invest.png', + height: 24.h, + width: 24.w, + ), + activeIcon: Image.asset( + 'assets/images/bottom_bar/active/invest.png', + height: 28.h, + width: 28.w, + ), + + // SvgPicture.asset('assets/image/svg/active_shortTrade.svg'), + label: 'Invest', + ), + BottomNavigationBarItem( + icon: Image.asset( + 'assets/images/bottom_bar/inactive/academy.png', + height: 26.h, + width: 26.w, + ), + activeIcon: Image.asset( + 'assets/images/bottom_bar/active/academy.png', + height: 30.h, + width: 30.w, + ), + label: 'Academy', + ), + BottomNavigationBarItem( + icon: Image.asset( + 'assets/images/bottom_bar/inactive/settings.png', + height: 26.h, + width: 26.w, + ), + activeIcon: Image.asset( + 'assets/images/bottom_bar/active/settings.png', + height: 30.h, + width: 30.w, + ), + label: 'Settings', + ), + ], + ); +} diff --git a/macos/Flutter/Flutter-Debug.xcconfig b/macos/Flutter/Flutter-Debug.xcconfig index c2efd0b..4b81f9b 100644 --- a/macos/Flutter/Flutter-Debug.xcconfig +++ b/macos/Flutter/Flutter-Debug.xcconfig @@ -1 +1,2 @@ +#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" #include "ephemeral/Flutter-Generated.xcconfig" diff --git a/macos/Flutter/Flutter-Release.xcconfig b/macos/Flutter/Flutter-Release.xcconfig index c2efd0b..5caa9d1 100644 --- a/macos/Flutter/Flutter-Release.xcconfig +++ b/macos/Flutter/Flutter-Release.xcconfig @@ -1 +1,2 @@ +#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" #include "ephemeral/Flutter-Generated.xcconfig" diff --git a/macos/Podfile b/macos/Podfile new file mode 100644 index 0000000..c795730 --- /dev/null +++ b/macos/Podfile @@ -0,0 +1,43 @@ +platform :osx, '10.14' + +# CocoaPods analytics sends network stats synchronously affecting flutter build latency. +ENV['COCOAPODS_DISABLE_STATS'] = 'true' + +project 'Runner', { + 'Debug' => :debug, + 'Profile' => :release, + 'Release' => :release, +} + +def flutter_root + generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'ephemeral', 'Flutter-Generated.xcconfig'), __FILE__) + unless File.exist?(generated_xcode_build_settings_path) + raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure \"flutter pub get\" is executed first" + end + + File.foreach(generated_xcode_build_settings_path) do |line| + matches = line.match(/FLUTTER_ROOT\=(.*)/) + return matches[1].strip if matches + end + raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Flutter-Generated.xcconfig, then run \"flutter pub get\"" +end + +require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root) + +flutter_macos_podfile_setup + +target 'Runner' do + use_frameworks! + use_modular_headers! + + flutter_install_all_macos_pods File.dirname(File.realpath(__FILE__)) + target 'RunnerTests' do + inherit! :search_paths + end +end + +post_install do |installer| + installer.pods_project.targets.each do |target| + flutter_additional_macos_build_settings(target) + end +end diff --git a/pubspec.yaml b/pubspec.yaml index 5f4b1ee..222c44e 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -96,6 +96,8 @@ flutter: - assets/images/auth_screen/png/ - assets/images/country_flag/ - assets/images/country_flag/png/ + - assets/images/bottom_bar/active/ + - assets/images/bottom_bar/inactive/ - assets/images/biometric_screen/ - assets/images/biometric_screen/png/ - assets/images/biometric_screen/svg/