Commit 6b980613 authored by DatHV's avatar DatHV
Browse files

update project structure

parent bfff9e47
......@@ -2,24 +2,24 @@ import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:in_app_review/in_app_review.dart';
import 'package:mypoint_flutter_app/extensions/string_extension.dart';
import 'package:mypoint_flutter_app/networking/restful_api_client_all_request.dart';
import 'package:mypoint_flutter_app/preference/data_preference.dart';
import 'package:mypoint_flutter_app/widgets/alert/popup_data_model.dart';
import 'package:mypoint_flutter_app/core/utils/extensions/string_extension.dart';
import 'package:mypoint_flutter_app/core/network/restful_api_client_all_request.dart';
import 'package:mypoint_flutter_app/shared/preferences/data_preference.dart';
import 'package:mypoint_flutter_app/shared/widgets/alert/popup_data_model.dart';
import 'package:permission_handler/permission_handler.dart';
import 'package:url_launcher/url_launcher.dart';
import 'package:uuid/uuid.dart';
import '../configs/constants.dart';
import '../base/app_navigator.dart';
import '../networking/restful_api_viewmodel.dart';
import '../resources/base_color.dart';
import '../screen/pageDetail/model/detail_page_rule_type.dart';
import '../screen/pipi/pipi_detail_screen.dart';
import '../screen/webview/web_view_screen.dart';
import '../services/logout_service.dart';
import '../shared/router_gage.dart';
import '../../app/config/constants.dart';
import '../../app/routing/app_navigator.dart';
import '../../core/network/restful_api_viewmodel.dart';
import '../../core/theme/base_color.dart';
import '../../features/pageDetail/model/detail_page_rule_type.dart';
import '../../features/pipi/pipi_detail_screen.dart';
import '../../features/webview/web_view_screen.dart';
import '../../core/services/logout_service.dart';
import '../router_gage.dart';
import '../widgets/alert/data_alert_model.dart';
import 'directional_action_type.dart';
import '../../app/routing/directional_action_type.dart';
class Defines {
static const String actionType = 'click_action_type';
......
import 'dart:convert';
import 'package:flutter/foundation.dart';
import 'package:shared_preferences/shared_preferences.dart';
import '../model/auth/login_token_response_model.dart';
import '../model/auth/profile_response_model.dart';
import '../screen/popup_manager/popup_manager_viewmodel.dart';
import '../web/web_helper.dart';
import '../../features/login/model/login_token_response_model.dart';
import '../../features/personal/model/profile_response_model.dart';
import '../../features/popup_manager/popup_manager_viewmodel.dart';
import '../../core/services/web/web_helper.dart';
class DataPreference {
static final DataPreference _instance = DataPreference._internal();
......
import 'package:json_annotation/json_annotation.dart';
part 'customer_balance_model.g.dart';
@JsonSerializable()
class CustomerBalanceModel {
@JsonKey(name: 'amount_active')
......
import 'package:get/get.dart';
import '../../screen/home/header_home_viewmodel.dart';
import '../../../features/home/header_home_viewmodel.dart';
class UserPointManager {
UserPointManager._();
......
const module = 'assets/images';
const String icClose = '$module/ic_close.svg';
const String icLogo = '$module/ic_logo.png';
const String bgAlertHeader = '$module/bg_alert_header.svg';
\ No newline at end of file
import 'package:get/get.dart';
import '../deferred/deferred_routes.dart';
import '../screen/game/game_cards/game_card_screen.dart';
import '../screen/game/game_tab_screen.dart';
import '../screen/login/login_screen.dart';
import '../screen/main_tab_screen/main_tab_screen.dart';
import '../screen/notification/notification_detail_screen.dart';
import '../screen/notification/notification_screen.dart';
import '../screen/onboarding/onboarding_screen.dart';
import '../screen/pageDetail/campaign_detail_screen.dart';
import '../screen/personal/personal_edit_screen.dart';
import '../screen/register_campaign/register_form_input_screen.dart';
import '../screen/setting/setting_screen.dart';
import '../screen/splash/splash_screen.dart';
import '../screen/voucher/voucher_list/voucher_list_screen.dart';
import '../screen/webview/web_view_screen.dart';
import '../app/routing/deferred_routes.dart';
import '../features/game/game_cards/game_card_screen.dart';
import '../features/game/game_tab_screen.dart';
import '../features/login/login_screen.dart';
import '../features/main_tab_screen/main_tab_screen.dart';
import '../features/notification/notification_detail_screen.dart';
import '../features/notification/notification_screen.dart';
import '../features/onboarding/onboarding_screen.dart';
import '../features/pageDetail/campaign_detail_screen.dart';
import '../features/personal/personal_edit_screen.dart';
import '../features/register_campaign/register_form_input_screen.dart';
import '../features/setting/setting_screen.dart';
import '../features/splash/splash_screen.dart';
import '../features/voucher/voucher_list/voucher_list_screen.dart';
import '../features/webview/web_view_screen.dart';
const splashScreen = '/splash';
const onboardingScreen = '/onboarding';
const loginScreen = '/login';
......
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:json_annotation/json_annotation.dart';
import 'package:mypoint_flutter_app/directional/directional_action_type.dart';
import 'package:mypoint_flutter_app/extensions/color_extension.dart';
import 'package:mypoint_flutter_app/extensions/string_extension.dart';
import '../../directional/directional_screen.dart';
import 'package:mypoint_flutter_app/core/utils/extensions/color_extension.dart';
import 'package:mypoint_flutter_app/core/utils/extensions/string_extension.dart';
import '../../navigation/directional_screen.dart';
import 'data_alert_model.dart';
part 'button_config_model.g.dart';
@JsonSerializable()
class ButtonConfigModel {
final String? text;
......
import 'package:flutter/material.dart';
import 'package:flutter_widget_from_html_core/flutter_widget_from_html_core.dart';
import 'package:get/get.dart';
import '../../resources/base_color.dart';
import '../../../core/theme/base_color.dart';
import '../image_loader.dart';
import 'data_alert_model.dart';
......@@ -88,13 +88,13 @@ class CustomAlertDialog extends StatelessWidget {
child: loadNetworkImage(
url: alertData.urlHeaderImage,
fit: BoxFit.fill,
placeholderAsset: "assets/images/ic_pipi_06.png",
placeholderAsset: "assets/images/ic_pipi_03.png",
),
),
);
}
final localHeaderImage = (alertData.localHeaderImage ?? "");
final localImage = localHeaderImage.isNotEmpty ? localHeaderImage : "assets/images/ic_pipi_06.png";
final localImage = localHeaderImage.isNotEmpty ? localHeaderImage : "assets/images/ic_pipi_03.png";
return ClipRRect(borderRadius: BorderRadius.circular(12), child: Image.asset(localImage));
}
......@@ -109,14 +109,14 @@ class CustomAlertDialog extends StatelessWidget {
padding: const EdgeInsets.symmetric(vertical: 4),
child: ElevatedButton(
style: ElevatedButton.styleFrom(
backgroundColor: btn?.bgColor,
backgroundColor: btn.bgColor,
shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(24)),
minimumSize: const Size(double.infinity, 48),
),
onPressed: btn?.onPressed,
onPressed: btn.onPressed,
child: Text(
btn?.text ?? "",
style: TextStyle(color: btn?.textColor, fontSize: 14, fontWeight: FontWeight.bold),
btn.text,
style: TextStyle(color: btn.textColor, fontSize: 14, fontWeight: FontWeight.bold),
),
),
),
......@@ -135,14 +135,14 @@ class CustomAlertDialog extends StatelessWidget {
padding: const EdgeInsets.symmetric(horizontal: 4),
child: ElevatedButton(
style: ElevatedButton.styleFrom(
backgroundColor: btn?.bgColor,
backgroundColor: btn.bgColor,
shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(24)),
minimumSize: const Size(100, 48),
),
onPressed: btn?.onPressed,
onPressed: btn.onPressed,
child: Text(
btn?.text ?? "",
style: TextStyle(color: btn?.textColor, fontSize: 14, fontWeight: FontWeight.bold),
btn.text,
style: TextStyle(color: btn.textColor, fontSize: 14, fontWeight: FontWeight.bold),
),
),
),
......
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:get/get_core/src/get_main.dart';
import 'package:mypoint_flutter_app/preference/data_preference.dart';
import 'package:mypoint_flutter_app/shared/preferences/data_preference.dart';
import 'package:mypoint_flutter_app/shared/router_gage.dart';
import '../resources/base_color.dart';
import '../../core/theme/base_color.dart';
class CustomBackButton extends StatelessWidget {
final VoidCallback? onPressed;
......
import 'package:json_annotation/json_annotation.dart';
part 'base_response_model.g.dart';
part 'base_response_model.g.dart';
@JsonSerializable(genericArgumentFactories: true)
class BaseResponseModel<T> {
final int? code;
......
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:mypoint_flutter_app/base/app_navigator.dart';
import 'package:mypoint_flutter_app/app/routing/app_navigator.dart';
import 'package:mypoint_flutter_app/main.dart' show routeObserver;
import '../widgets/alert/custom_alert_dialog.dart';
import '../widgets/alert/data_alert_model.dart';
import '../widgets/alert/popup_data_model.dart';
import '../alert/custom_alert_dialog.dart';
import '../alert/data_alert_model.dart';
import '../alert/popup_data_model.dart';
abstract class BaseScreen extends StatefulWidget {
const BaseScreen({super.key});
}
abstract class BaseState<Screen extends BaseScreen> extends State<Screen>
with WidgetsBindingObserver, RouteAware {
abstract class BaseState<Screen extends BaseScreen> extends State<Screen> with RouteAware {
ModalRoute<dynamic>? _route;
@override
void initState() {
super.initState();
WidgetsBinding.instance.addObserver(this);
WidgetsBinding.instance.addPostFrameCallback((_) => onInit());
}
@override
void dispose() {
WidgetsBinding.instance.removeObserver(this);
if (_route != null) {
routeObserver.unsubscribe(this);
}
......@@ -31,21 +27,6 @@ abstract class BaseState<Screen extends BaseScreen> extends State<Screen>
super.dispose();
}
@override
void didChangeAppLifecycleState(AppLifecycleState state) {
super.didChangeAppLifecycleState(state);
switch (state) {
case AppLifecycleState.resumed:
onAppResumed();
break;
case AppLifecycleState.paused:
onAppPaused();
break;
default:
break;
}
}
@override
void didChangeDependencies() {
super.didChangeDependencies();
......@@ -61,7 +42,6 @@ abstract class BaseState<Screen extends BaseScreen> extends State<Screen>
}
// MARK: - Core Lifecycle Methods
/// Called when the widget is first inserted into the tree.
/// Use this to initialize data, setup listeners, etc.
void onInit() {
......@@ -75,13 +55,6 @@ abstract class BaseState<Screen extends BaseScreen> extends State<Screen>
}
// MARK: - Route Visibility Methods
/// Called when the route is about to become visible (push or uncovered).
/// Use this to prepare data, start animations, etc.
void onRouteWillAppear() {
debugPrint("onRouteWillAppear: $runtimeType");
}
/// Called when the route has become visible.
/// Use this to start timers, refresh data, etc.
void onRouteDidAppear() {
......@@ -94,26 +67,6 @@ abstract class BaseState<Screen extends BaseScreen> extends State<Screen>
debugPrint("onRouteWillDisappear: $runtimeType");
}
/// Called when the route has been covered or popped.
/// Use this to stop timers, cleanup temporary resources, etc.
void onRouteDidDisappear() {
debugPrint("onRouteDidDisappear: $runtimeType");
}
// MARK: - App Lifecycle Methods
/// Called when the app becomes active (foreground).
/// Use this to resume operations, refresh data, etc.
void onAppResumed() {
debugPrint("onAppResumed: $runtimeType");
}
/// Called when the app becomes inactive (background).
/// Use this to pause operations, save state, etc.
void onAppPaused() {
debugPrint("onAppPaused: $runtimeType");
}
// MARK: - UI Helper Methods
/// Shows a popup dialog with custom data
void showPopup({
......@@ -141,7 +94,7 @@ abstract class BaseState<Screen extends BaseScreen> extends State<Screen>
data: data,
barrierDismissible: barrierDismissible,
showCloseButton: showCloseButton,
direction: direction
direction: direction,
);
}
......@@ -170,11 +123,11 @@ abstract class BaseState<Screen extends BaseScreen> extends State<Screen>
// MARK: - RouteAware Implementation
@override
void didPush() {
_handleRouteAppear();
WidgetsBinding.instance.addPostFrameCallback((_) => onRouteDidAppear());
}
@override
void didPopNext() => _handleRouteAppear();
void didPopNext() => WidgetsBinding.instance.addPostFrameCallback((_) => onRouteDidAppear());
@override
void didPushNext() => _handleRouteDisappear();
......@@ -182,13 +135,7 @@ abstract class BaseState<Screen extends BaseScreen> extends State<Screen>
@override
void didPop() => _handleRouteDisappear();
void _handleRouteAppear() {
onRouteWillAppear();
WidgetsBinding.instance.addPostFrameCallback((_) => onRouteDidAppear());
}
void _handleRouteDisappear() {
onRouteWillDisappear();
WidgetsBinding.instance.addPostFrameCallback((_) => onRouteDidDisappear());
}
}
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment