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

update project structure

parent bfff9e47
import 'package:flutter/gestures.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:mypoint_flutter_app/screen/pageDetail/campaign_detail_screen.dart'; import 'package:mypoint_flutter_app/shared/widgets/custom_toast_message.dart';
import 'package:mypoint_flutter_app/widgets/back_button.dart'; import '../../shared/widgets/base_view/base_screen.dart';
import 'package:mypoint_flutter_app/widgets/custom_toast_message.dart'; import '../../shared/widgets/base_view/basic_state.dart';
import '../../base/base_screen.dart'; import '../../app/config/constants.dart';
import '../../base/basic_state.dart'; import '../../core/theme/base_color.dart';
import '../../configs/constants.dart';
import '../../resources/base_color.dart';
import '../../shared/router_gage.dart'; import '../../shared/router_gage.dart';
import '../../widgets/custom_navigation_bar.dart'; import '../../shared/widgets/custom_navigation_bar.dart';
import 'faqs_viewmodel.dart'; import 'faqs_viewmodel.dart';
class FAQScreen extends BaseScreen { class FAQScreen extends BaseScreen {
......
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:mypoint_flutter_app/networking/api/website_api.dart' deferred as website_api; import 'package:mypoint_flutter_app/core/network/api/website_api.dart' deferred as website_api;
import '../../networking/restful_api_viewmodel.dart'; import '../../core/network/restful_api_viewmodel.dart';
import 'faqs_model.dart'; import 'faqs_model.dart';
class FAQViewModel extends RestfulApiViewModel { class FAQViewModel extends RestfulApiViewModel {
......
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:mypoint_flutter_app/base/base_screen.dart'; import 'package:mypoint_flutter_app/shared/widgets/base_view/base_screen.dart';
import 'package:mypoint_flutter_app/base/basic_state.dart'; import 'package:mypoint_flutter_app/shared/widgets/base_view/basic_state.dart';
import 'package:mypoint_flutter_app/extensions/num_extension.dart'; import 'package:mypoint_flutter_app/core/utils/extensions/num_extension.dart';
import 'package:mypoint_flutter_app/screen/flash_sale/flash_sale_viewmodel.dart'; import 'package:mypoint_flutter_app/features/flash_sale/flash_sale_viewmodel.dart';
import 'package:mypoint_flutter_app/screen/flash_sale/models/flash_sale_category_model.dart'; import 'package:mypoint_flutter_app/features/flash_sale/models/flash_sale_category_model.dart';
import 'package:mypoint_flutter_app/screen/voucher/models/product_model.dart'; import 'package:mypoint_flutter_app/features/voucher/models/product_model.dart';
import 'package:mypoint_flutter_app/widgets/custom_empty_widget.dart'; import 'package:mypoint_flutter_app/shared/widgets/custom_empty_widget.dart';
import 'package:mypoint_flutter_app/widgets/image_loader.dart'; import 'package:mypoint_flutter_app/shared/widgets/image_loader.dart';
import '../../shared/router_gage.dart'; import '../../shared/router_gage.dart';
import '../../widgets/custom_navigation_bar.dart'; import '../../shared/widgets/custom_navigation_bar.dart';
class FlashSaleScreen extends BaseScreen { class FlashSaleScreen extends BaseScreen {
const FlashSaleScreen({super.key}); const FlashSaleScreen({super.key});
...@@ -143,7 +143,10 @@ class _FlashSaleScreenState extends BaseState<FlashSaleScreen> with BasicState { ...@@ -143,7 +143,10 @@ class _FlashSaleScreenState extends BaseState<FlashSaleScreen> with BasicState {
Widget _buildProductSliver() { Widget _buildProductSliver() {
final products = _viewModel.products; final products = _viewModel.products;
if (products.isEmpty) { if (products.isEmpty) {
return const SliverFillRemaining(hasScrollBody: false, child: EmptyWidget()); return SliverFillRemaining(
hasScrollBody: false,
child: EmptyWidget(isLoading: _viewModel.isLoading.value),
);
} }
final double screenWidth = MediaQuery.of(context).size.width; final double screenWidth = MediaQuery.of(context).size.width;
final double itemWidth = (screenWidth - 36) / 2; final double itemWidth = (screenWidth - 36) / 2;
......
import 'dart:async'; import 'dart:async';
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:mypoint_flutter_app/networking/restful_api_client_all_request.dart'; import 'package:mypoint_flutter_app/core/network/restful_api_client_all_request.dart';
import 'package:mypoint_flutter_app/networking/restful_api_viewmodel.dart'; import 'package:mypoint_flutter_app/core/network/restful_api_viewmodel.dart';
import 'package:mypoint_flutter_app/screen/flash_sale/models/flash_sale_category_model.dart'; import 'package:mypoint_flutter_app/features/flash_sale/models/flash_sale_category_model.dart';
import 'package:mypoint_flutter_app/screen/flash_sale/models/flash_sale_detail_response.dart'; import 'package:mypoint_flutter_app/features/flash_sale/models/flash_sale_detail_response.dart';
import 'package:mypoint_flutter_app/screen/voucher/models/product_model.dart'; import 'package:mypoint_flutter_app/features/voucher/models/product_model.dart';
class FlashSaleViewModel extends RestfulApiViewModel { class FlashSaleViewModel extends RestfulApiViewModel {
final String groupId; final String groupId;
......
import 'package:json_annotation/json_annotation.dart'; import 'package:json_annotation/json_annotation.dart';
part 'flash_sale_category_model.g.dart'; part 'flash_sale_category_model.g.dart';
@JsonSerializable() @JsonSerializable()
class FlashSaleCategoryModel { class FlashSaleCategoryModel {
@JsonKey(name: '_id') @JsonKey(name: '_id')
......
import 'package:json_annotation/json_annotation.dart'; import 'package:json_annotation/json_annotation.dart';
import 'package:mypoint_flutter_app/screen/flash_sale/models/preview_flash_sale_model.dart'; import 'package:mypoint_flutter_app/features/flash_sale/models/preview_flash_sale_model.dart';
import 'package:mypoint_flutter_app/screen/voucher/models/product_model.dart'; import 'package:mypoint_flutter_app/features/voucher/models/product_model.dart';
part 'flash_sale_detail_response.g.dart'; part 'flash_sale_detail_response.g.dart';
@JsonSerializable() @JsonSerializable()
class FlashSaleDetailResponse { class FlashSaleDetailResponse {
final int? id; final int? id;
......
import 'package:json_annotation/json_annotation.dart'; import 'package:json_annotation/json_annotation.dart';
import '../../flash_sale/models/preview_flash_sale_model.dart'; import 'preview_flash_sale_model.dart';
import '../../voucher/models/product_model.dart'; import '../../voucher/models/product_model.dart';
part 'flash_sale_model.g.dart'; part 'flash_sale_model.g.dart';
@JsonSerializable() @JsonSerializable()
class FlashSaleModel { class FlashSaleModel {
final int id; final int id;
...@@ -33,7 +32,7 @@ class FlashSaleModel { ...@@ -33,7 +32,7 @@ class FlashSaleModel {
PreviewFlashSale get info { PreviewFlashSale get info {
final info = final info =
products?.first?.previewFlashSale ?? products?.firstOrNull?.previewFlashSale ??
PreviewFlashSale( PreviewFlashSale(
id: id, id: id,
countdownSecond: countdownSecond, countdownSecond: countdownSecond,
......
...@@ -2,7 +2,6 @@ import 'package:json_annotation/json_annotation.dart'; ...@@ -2,7 +2,6 @@ import 'package:json_annotation/json_annotation.dart';
import 'package:intl/intl.dart'; import 'package:intl/intl.dart';
part 'preview_flash_sale_model.g.dart'; part 'preview_flash_sale_model.g.dart';
@JsonSerializable() @JsonSerializable()
class PreviewFlashSale { class PreviewFlashSale {
final int? id; final int? id;
......
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:get/get_core/src/get_main.dart'; import '../../../shared/widgets/base_view/base_screen.dart';
import '../../../base/base_screen.dart'; import '../../../shared/widgets/base_view/basic_state.dart';
import '../../../base/basic_state.dart';
import '../../../main.dart'; import '../../../main.dart';
import '../../../widgets/back_button.dart'; import '../../../shared/widgets/back_button.dart';
import '../models/game_bundle_item_model.dart'; import '../models/game_bundle_item_model.dart';
import '../models/game_card_item_model.dart'; import '../models/game_card_item_model.dart';
import 'game_card_viewmodel.dart'; import 'game_card_viewmodel.dart';
...@@ -55,7 +54,7 @@ class _GameCardScreenState extends BaseState<GameCardScreen> with BasicState, Ro ...@@ -55,7 +54,7 @@ class _GameCardScreenState extends BaseState<GameCardScreen> with BasicState, Ro
}; };
_viewModel.getGameDetailSuccess = () { _viewModel.getGameDetailSuccess = () {
WidgetsBinding.instance.addPostFrameCallback((_) { WidgetsBinding.instance.addPostFrameCallback((_) {
final popup = _viewModel.data?.value?.popup; final popup = _viewModel.data.value?.popup;
if (popup == null) return; if (popup == null) return;
showPopup(data: popup); showPopup(data: popup);
}); });
...@@ -94,7 +93,7 @@ class _GameCardScreenState extends BaseState<GameCardScreen> with BasicState, Ro ...@@ -94,7 +93,7 @@ class _GameCardScreenState extends BaseState<GameCardScreen> with BasicState, Ro
if (data == null) { if (data == null) {
return const SizedBox(); return const SizedBox();
} }
final cards = data?.options ?? []; final cards = data.options ?? [];
final screenHeight = MediaQuery.of(context).size.height; final screenHeight = MediaQuery.of(context).size.height;
final startTop = screenHeight * 560 / 1920; final startTop = screenHeight * 560 / 1920;
...@@ -103,8 +102,8 @@ class _GameCardScreenState extends BaseState<GameCardScreen> with BasicState, Ro ...@@ -103,8 +102,8 @@ class _GameCardScreenState extends BaseState<GameCardScreen> with BasicState, Ro
Container( Container(
decoration: BoxDecoration( decoration: BoxDecoration(
image: image:
data?.background != null data.background != null
? DecorationImage(image: NetworkImage(data?.background ?? ''), fit: BoxFit.cover) ? DecorationImage(image: NetworkImage(data.background ?? ''), fit: BoxFit.cover)
: null, : null,
color: Colors.green[100], color: Colors.green[100],
), ),
...@@ -128,7 +127,7 @@ class _GameCardScreenState extends BaseState<GameCardScreen> with BasicState, Ro ...@@ -128,7 +127,7 @@ class _GameCardScreenState extends BaseState<GameCardScreen> with BasicState, Ro
itemBuilder: (context, index) { itemBuilder: (context, index) {
final card = cards[index]; final card = cards[index];
return GameCardItem(card: card, onTapCard: () { return GameCardItem(card: card, onTapCard: () {
_viewModel.submitGameCard(data?.id ?? "", card.id ?? 0); _viewModel.submitGameCard(data.id ?? "", card.id ?? 0);
}); });
}, },
), ),
......
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:mypoint_flutter_app/networking/api/game_api.dart' deferred as game_api; import 'package:mypoint_flutter_app/core/network/api/game_api.dart' deferred as game_api;
import '../../../configs/constants.dart'; import '../../../app/config/constants.dart';
import '../../../networking/restful_api_viewmodel.dart'; import '../../../core/network/restful_api_viewmodel.dart';
import '../../../widgets/alert/popup_data_model.dart'; import '../../../shared/widgets/alert/popup_data_model.dart';
import '../models/game_bundle_item_model.dart'; import '../models/game_bundle_item_model.dart';
class GameCardViewModel extends RestfulApiViewModel { class GameCardViewModel extends RestfulApiViewModel {
...@@ -27,7 +27,7 @@ class GameCardViewModel extends RestfulApiViewModel { ...@@ -27,7 +27,7 @@ class GameCardViewModel extends RestfulApiViewModel {
return api.submitGameCard(gameId, itemId.toString()); return api.submitGameCard(gameId, itemId.toString());
}, },
onSuccess: (data, _) { onSuccess: (data, _) {
final popupData = data?.popup; final popupData = data.popup;
if (popupData != null) { if (popupData != null) {
submitGameCardSuccess?.call(popupData); submitGameCardSuccess?.call(popupData);
} else { } else {
...@@ -51,7 +51,7 @@ class GameCardViewModel extends RestfulApiViewModel { ...@@ -51,7 +51,7 @@ class GameCardViewModel extends RestfulApiViewModel {
this.data.value = data; this.data.value = data;
getGameDetailSuccess?.call(); getGameDetailSuccess?.call();
}, },
onFailure: (msg, _, __) async { onFailure: (msg, _, _) async {
onShowAlertError?.call(msg, true); onShowAlertError?.call(msg, true);
}, },
); );
......
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter/foundation.dart'; import 'package:flutter/foundation.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:mypoint_flutter_app/widgets/image_loader.dart'; import 'package:mypoint_flutter_app/shared/widgets/image_loader.dart';
import '../../base/base_screen.dart'; import '../../shared/widgets/base_view/base_screen.dart';
import '../../base/basic_state.dart'; import '../../shared/widgets/base_view/basic_state.dart';
import '../../directional/directional_action_type.dart'; import '../../app/routing/directional_action_type.dart';
import '../../shared/router_gage.dart'; import '../../shared/router_gage.dart';
import '../../widgets/back_button.dart'; import '../../shared/widgets/back_button.dart';
import '../../widgets/custom_empty_widget.dart'; import '../../shared/widgets/custom_empty_widget.dart';
import '../../widgets/custom_navigation_bar.dart'; import '../../shared/widgets/custom_navigation_bar.dart';
import '../popup_manager/popup_runner_helper.dart'; import '../popup_manager/popup_runner_helper.dart';
import 'game_tab_viewmodel.dart'; import 'game_tab_viewmodel.dart';
...@@ -87,7 +87,7 @@ class _GameTabScreenState extends BaseState<GameTabScreen> with BasicState, Popu ...@@ -87,7 +87,7 @@ class _GameTabScreenState extends BaseState<GameTabScreen> with BasicState, Popu
if (games.isEmpty) { if (games.isEmpty) {
return SizedBox( return SizedBox(
height: MediaQuery.of(context).size.height * 0.8, height: MediaQuery.of(context).size.height * 0.8,
child: const Center(child: EmptyWidget()), child: Center(child: EmptyWidget(isLoading: _viewModel.isLoading.value)),
); );
} }
if (index == 0) { if (index == 0) {
......
import 'package:get/get_rx/src/rx_types/rx_types.dart'; import 'package:get/get_rx/src/rx_types/rx_types.dart';
import 'package:mypoint_flutter_app/networking/api/game_api.dart' deferred as game_api; import 'package:mypoint_flutter_app/core/network/api/game_api.dart' deferred as game_api;
import 'package:mypoint_flutter_app/screen/game/models/game_bundle_item_model.dart'; import 'package:mypoint_flutter_app/features/game/models/game_bundle_item_model.dart';
import '../../networking/restful_api_viewmodel.dart'; import '../../core/network/restful_api_viewmodel.dart';
import 'models/game_bundle_response.dart'; import 'models/game_bundle_response.dart';
class GameTabViewModel extends RestfulApiViewModel { class GameTabViewModel extends RestfulApiViewModel {
......
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