Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions android/.gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -9,3 +9,4 @@ GeneratedPluginRegistrant.java
# Remember to never publicly share your keystore.
# See https://flutter.dev/docs/deployment/android#reference-the-keystore-from-the-app
key.properties
app/google-services.json
10 changes: 6 additions & 4 deletions android/app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -23,20 +23,20 @@ if (flutterVersionName == null) {

apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'com.google.gms.google-services'
apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"

android {
compileSdkVersion 30
compileSdkVersion 31

sourceSets {
main.java.srcDirs += 'src/main/kotlin'
}

defaultConfig {
// TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
applicationId "com.example.gow_mobile"
minSdkVersion 16
targetSdkVersion 30
minSdkVersion 21
targetSdkVersion 31
versionCode flutterVersionCode.toInteger()
versionName flutterVersionName
}
Expand All @@ -56,4 +56,6 @@ flutter {

dependencies {
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
implementation platform('com.google.firebase:firebase-bom:29.1.0')
implementation 'com.google.firebase:firebase-analytics'
}
3 changes: 2 additions & 1 deletion android/build.gradle
Original file line number Diff line number Diff line change
@@ -1,12 +1,13 @@
buildscript {
ext.kotlin_version = '1.3.50'
ext.kotlin_version = '1.5.0'
repositories {
google()
jcenter()
}

dependencies {
classpath 'com.android.tools.build:gradle:4.1.0'
classpath 'com.google.gms:google-services:4.3.10'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
}
}
Expand Down
28 changes: 12 additions & 16 deletions lib/main.dart
Original file line number Diff line number Diff line change
@@ -1,43 +1,39 @@
import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:sizer/sizer.dart';

import 'core/init/constants/app_constants.dart';
import 'core/init/constants/language_constants.dart';
import 'product/init/app/app_init.dart';
import 'product/init/navigation/navigation_manager.dart';
import 'product/init/navigation/navigation_route.dart';
import 'product/init/router/app_router.dart';
import 'product/init/theme/app_theme.dart';
import 'view/shop/tab/shop_tab_view.dart';

Future<void> main() async {
await AppInitiliaze().initBeforeAppStart();
runApp(
MultiProvider(
providers: [Provider(create: (context) => NavigationService())],
child: EasyLocalization(
supportedLocales: LanguageConstants.instance.supportedLocales,
path: AppConstants.ASSETS_LANG_PATH,
child: MyApp()),
),
EasyLocalization(
supportedLocales: LanguageConstants.instance.supportedLocales,
path: AppConstants.ASSETS_LANG_PATH,
child: MyApp()),
);
}

// ignore: use_key_in_widget_constructors
class MyApp extends StatelessWidget {
MyApp({Key? key}) : super(key: key);

final appRouter = AppRouter();

@override
Widget build(BuildContext context) {
return Sizer(
builder: (BuildContext context, Orientation orientation, DeviceType deviceType) {
return MaterialApp(
return MaterialApp.router(
localizationsDelegates: context.localizationDelegates,
supportedLocales: context.supportedLocales,
locale: context.locale,
home: ShopTabView(),
onGenerateRoute: NavigationRoute().generateRoute,
navigatorKey: context.read<NavigationService>().navigatorKey,
theme: ThemeManager.craeteTheme(AppThemeLight()),
routerDelegate: appRouter.delegate(),
routeInformationParser: appRouter.defaultRouteParser(),
);
},
// child:,
Expand Down
12 changes: 7 additions & 5 deletions lib/product/init/navigation/navigation_route.dart
Original file line number Diff line number Diff line change
Expand Up @@ -10,21 +10,23 @@ class NavigationRoute {
Route<dynamic> generateRoute(RouteSettings args) {
switch (NavigationEnums.deafult.normalValue(args.name)) {
case NavigationEnums.deafult:
return _normalNavigate(const SplashView());
return _normalNavigate(const SplashPage());

case NavigationEnums.home:
return _normalNavigate(ShopTabView());
return _normalNavigate(ShopTabPage());

case NavigationEnums.login:
return _fadeRouteNavigate(AuthenticationTabView());
return _fadeRouteNavigate(AuthenticationTabPage());

default:
throw Exception('$this not found');
}
}

MaterialPageRoute _normalNavigate(Widget widget, {RouteSettings? settings, bool isFullScreen = false}) {
return MaterialPageRoute(builder: (context) => widget, settings: settings, fullscreenDialog: isFullScreen);
MaterialPageRoute _normalNavigate(Widget widget,
{RouteSettings? settings, bool isFullScreen = false}) {
return MaterialPageRoute(
builder: (context) => widget, settings: settings, fullscreenDialog: isFullScreen);
}

PageRoute _fadeRouteNavigate(Widget widget, {RouteSettings? settings}) {
Expand Down
5 changes: 4 additions & 1 deletion lib/product/init/network/network_config.dart
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,10 @@ class NetworkConfig {

NetworkConfig() {
if (Platform.isAndroid) {
baseUrl = 'http://10.0.2.2:3000/';
// for Genymotion emulator
baseUrl = 'http://10.0.3.2:3000/';
// for default AVD emulator
// baseUrl = 'http://10.0.2.2:3000/';
} else {
baseUrl = 'http://localhost:3000/';
}
Expand Down
2 changes: 1 addition & 1 deletion lib/product/init/network/network_route_paths.dart
Original file line number Diff line number Diff line change
Expand Up @@ -9,5 +9,5 @@ class NetworkRoutePath {

final String login = "login";
final String forgot = "forgot";
final String signUp = "signup";
final String signUp = "register";
}
18 changes: 18 additions & 0 deletions lib/product/init/router/app_router.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
import 'package:auto_route/auto_route.dart';
import 'package:flutter/material.dart';

import '../../../view/authentication/tab/authentication_tab_view.dart';
import '../../../view/common/splash/view/splash_view.dart';
import '../../../view/shop/tab/shop_tab_view.dart';

part 'app_router.gr.dart';

@MaterialAutoRouter(
replaceInRouteName: 'Page,Route',
routes: <AutoRoute>[
AutoRoute(page: SplashPage, initial: true),
AutoRoute(page: AuthenticationTabPage),
AutoRoute(page: ShopTabPage),
],
)
class AppRouter extends _$AppRouter {}
96 changes: 96 additions & 0 deletions lib/product/init/router/app_router.gr.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,96 @@
// **************************************************************************
// AutoRouteGenerator
// **************************************************************************

// GENERATED CODE - DO NOT MODIFY BY HAND

// **************************************************************************
// AutoRouteGenerator
// **************************************************************************
//
// ignore_for_file: type=lint

part of 'app_router.dart';

class _$AppRouter extends RootStackRouter {
_$AppRouter([GlobalKey<NavigatorState>? navigatorKey]) : super(navigatorKey);

@override
final Map<String, PageFactory> pagesMap = {
SplashRoute.name: (routeData) {
return MaterialPageX<dynamic>(
routeData: routeData, child: const SplashPage());
},
AuthenticationTabRoute.name: (routeData) {
final args = routeData.argsAs<AuthenticationTabRouteArgs>(
orElse: () => const AuthenticationTabRouteArgs());
return MaterialPageX<dynamic>(
routeData: routeData, child: AuthenticationTabPage(key: args.key));
},
ShopTabRoute.name: (routeData) {
final args = routeData.argsAs<ShopTabRouteArgs>(
orElse: () => const ShopTabRouteArgs());
return MaterialPageX<dynamic>(
routeData: routeData, child: ShopTabPage(key: args.key));
}
};

@override
List<RouteConfig> get routes => [
RouteConfig(SplashRoute.name, path: '/'),
RouteConfig(AuthenticationTabRoute.name,
path: '/authentication-tab-page'),
RouteConfig(ShopTabRoute.name, path: '/shop-tab-page')
];
}

/// generated route for
/// [SplashPage]
class SplashRoute extends PageRouteInfo<void> {
const SplashRoute() : super(SplashRoute.name, path: '/');

static const String name = 'SplashRoute';
}

/// generated route for
/// [AuthenticationTabPage]
class AuthenticationTabRoute extends PageRouteInfo<AuthenticationTabRouteArgs> {
AuthenticationTabRoute({Key? key})
: super(AuthenticationTabRoute.name,
path: '/authentication-tab-page',
args: AuthenticationTabRouteArgs(key: key));

static const String name = 'AuthenticationTabRoute';
}

class AuthenticationTabRouteArgs {
const AuthenticationTabRouteArgs({this.key});

final Key? key;

@override
String toString() {
return 'AuthenticationTabRouteArgs{key: $key}';
}
}

/// generated route for
/// [ShopTabPage]
class ShopTabRoute extends PageRouteInfo<ShopTabRouteArgs> {
ShopTabRoute({Key? key})
: super(ShopTabRoute.name,
path: '/shop-tab-page', args: ShopTabRouteArgs(key: key));

static const String name = 'ShopTabRoute';
}

class ShopTabRouteArgs {
const ShopTabRouteArgs({this.key});

final Key? key;

@override
String toString() {
return 'ShopTabRouteArgs{key: $key}';
}
}
3 changes: 1 addition & 2 deletions lib/product/init/state/project_global_states.dart
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
import 'package:flutter/cupertino.dart';
import '../navigation/navigation_manager.dart';
import 'package:provider/provider.dart';
import 'package:provider/single_child_widget.dart';

Expand All @@ -15,6 +14,6 @@ class ProjectGlobalStates {

final List<SingleChildWidget> _independentServices = [
Provider(create: (context) => ProductContext(context)),
Provider(create: (_) => NavigationService()),
// Provider(create: (_) => NavigationService()),
];
}
55 changes: 40 additions & 15 deletions lib/product/service/auth/authentication_service.dart
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
import 'dart:developer' as developer;

import 'package:vexana/vexana.dart';

import '../../../view/authentication/login/model/login_model.dart';
import '../../../view/authentication/signup/model/sign_up_model.dart';
import '../../model/email/email_model.dart';
import '../../model/response/normal_response.dart';
import '../../model/user/user_auth_model.dart';
Expand All @@ -25,8 +28,7 @@ abstract class IAuthenticationService {
IAuthenticationService(this.networkManager);

Future<UserAuthModel?> loginUserRequest(LoginModel model);
Future<UserAuthModel?> createUser(LoginModel model);

Future<UserAuthModel?> createUser(SignUpModel model);
Future<NormalResponseModel?> forgotPassword(EmailModel model);
}

Expand All @@ -35,28 +37,51 @@ class AuthenticationService extends IAuthenticationService {

@override
Future<UserAuthModel?> loginUserRequest(LoginModel model) async {
final response = await networkManager.send<UserAuthModel, UserAuthModel>(_AuthtenicationPathEnum.login.rawValue,
parseModel: UserAuthModel(), method: RequestType.POST, data: model);
try {
final response = await networkManager.send<UserAuthModel, UserAuthModel>(
_AuthtenicationPathEnum.login.rawValue,
parseModel: UserAuthModel(),
method: RequestType.POST,
data: model,
);

return response.data;
return response.data;
} catch (e) {
developer.log('loginUserRequest error: $e');
return null;
}
}

@override
Future<UserAuthModel?> createUser(LoginModel model) async {
final response = await networkManager.send<UserAuthModel, UserAuthModel>(_AuthtenicationPathEnum.register.rawValue,
parseModel: UserAuthModel(), method: RequestType.POST, data: model);
Future<UserAuthModel?> createUser(SignUpModel model) async {
try {
final response = await networkManager.send<UserAuthModel, UserAuthModel>(
_AuthtenicationPathEnum.register.rawValue,
parseModel: UserAuthModel(),
method: RequestType.POST,
data: model,
);

return response.data;
return response.data;
} catch (e) {
developer.log('createUser error: $e');
return null;
}
}

@override
Future<NormalResponseModel?> forgotPassword(EmailModel model) async {
final response = await networkManager.send<NormalResponseModel, NormalResponseModel>(
_AuthtenicationPathEnum.forgot.rawValue,
parseModel: NormalResponseModel(),
method: RequestType.POST,
data: model);
try {
final response = await networkManager.send<NormalResponseModel, NormalResponseModel>(
_AuthtenicationPathEnum.forgot.rawValue,
parseModel: NormalResponseModel(),
method: RequestType.POST,
data: model);

return response.data;
return response.data;
} catch (e) {
developer.log('forgotPassword error: $e');
return null;
}
}
}
19 changes: 12 additions & 7 deletions lib/product/widget/button/login_button.dart
Original file line number Diff line number Diff line change
Expand Up @@ -24,14 +24,19 @@ class _LoginButtonState extends State<LoginButton> {
return Padding(
padding: context.paddingLow,
child: ElevatedButton(
style: ElevatedButton.styleFrom(primary: context.colorScheme.onError, padding: context.paddingLow),
onPressed: () async {
_changeLoading();
await widget.onCompleted();
_changeLoading();
},
style: ElevatedButton.styleFrom(
primary: context.colorScheme.onError, padding: context.paddingLow),
onPressed: _isLoading
? () {}
: () async {
_changeLoading();
await widget.onCompleted();
_changeLoading();
},
child: Center(
child: _isLoading ? CircularProgressIndicator(color: context.colorScheme.onSecondary) : Text(widget.title),
child: _isLoading
? CircularProgressIndicator(color: context.colorScheme.onSecondary)
: Text(widget.title),
),
),
);
Expand Down
Loading