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

update project structure

parent bfff9e47
import 'package:json_annotation/json_annotation.dart'; import 'package:json_annotation/json_annotation.dart';
import '../../../widgets/alert/popup_data_model.dart'; import '../../../shared/widgets/alert/popup_data_model.dart';
import 'game_card_item_model.dart'; import 'game_card_item_model.dart';
part 'game_bundle_item_model.g.dart'; part 'game_bundle_item_model.g.dart';
@JsonSerializable() @JsonSerializable()
class GameBundleItemModel { class GameBundleItemModel {
final String? id; final String? id;
......
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter/services.dart'; import 'package:flutter/services.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:mypoint_flutter_app/extensions/datetime_extensions.dart'; import 'package:mypoint_flutter_app/core/utils/extensions/datetime_extensions.dart';
import 'package:mypoint_flutter_app/extensions/string_extension.dart'; import 'package:mypoint_flutter_app/core/utils/extensions/string_extension.dart';
import 'package:mypoint_flutter_app/widgets/custom_empty_widget.dart'; import 'package:mypoint_flutter_app/shared/widgets/custom_empty_widget.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 '../../extensions/date_format.dart'; import '../../core/utils/extensions/date_format.dart';
import '../../widgets/custom_navigation_bar.dart'; import '../../shared/widgets/custom_navigation_bar.dart';
import '../../widgets/custom_toast_message.dart'; import '../../shared/widgets/custom_toast_message.dart';
import 'health_book_card_detail_viewmodel.dart'; import 'health_book_card_detail_viewmodel.dart';
import 'health_book_model.dart'; import 'health_book_model.dart';
...@@ -39,9 +39,9 @@ class _HealthBookCardDetailState extends BaseState<HealthBookCardDetail> with Ba ...@@ -39,9 +39,9 @@ class _HealthBookCardDetailState extends BaseState<HealthBookCardDetail> with Ba
return; return;
} }
if (data != null) { if (data != null) {
_viewModel?.card.value = data; _viewModel.card.value = data;
} else if (cardId.hasText) { } else if (cardId.hasText) {
_viewModel?.getHealthBookCardDetail(cardId!); _viewModel.getHealthBookCardDetail(cardId!);
} }
_viewModel.onShowAlertError = (message) { _viewModel.onShowAlertError = (message) {
WidgetsBinding.instance.addPostFrameCallback((_) { WidgetsBinding.instance.addPostFrameCallback((_) {
...@@ -57,8 +57,10 @@ class _HealthBookCardDetailState extends BaseState<HealthBookCardDetail> with Ba ...@@ -57,8 +57,10 @@ class _HealthBookCardDetailState extends BaseState<HealthBookCardDetail> with Ba
appBar: CustomNavigationBar(title: 'Chi tiết thẻ'), appBar: CustomNavigationBar(title: 'Chi tiết thẻ'),
body: SafeArea( body: SafeArea(
child: Obx(() { child: Obx(() {
final card = _viewModel?.card.value; final card = _viewModel.card.value;
if (card == null) return EmptyWidget(); if (card == null) {
return EmptyWidget(isLoading: _viewModel.isLoading.value);
}
final name = card.fullName.orIfBlank('--'); final name = card.fullName.orIfBlank('--');
final phone = card.phoneNumber.orIfBlank('--'); final phone = card.phoneNumber.orIfBlank('--');
final cardCode = card.cardCode.orIfBlank('--'); final cardCode = card.cardCode.orIfBlank('--');
......
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/restful_api_client_all_request.dart'; import 'package:mypoint_flutter_app/core/network/restful_api_client_all_request.dart';
import '../../configs/constants.dart'; import '../../core/network/restful_api_viewmodel.dart';
import '../../networking/restful_api_viewmodel.dart';
import 'health_book_model.dart'; import 'health_book_model.dart';
class HealthBookCardDetailViewModel extends RestfulApiViewModel { class HealthBookCardDetailViewModel 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/widgets/custom_empty_widget.dart'; import 'package:mypoint_flutter_app/shared/widgets/custom_empty_widget.dart';
import '../../resources/base_color.dart'; import '../../core/theme/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 '../traffic_service/traffic_service_model.dart'; import '../traffic_service/traffic_service_model.dart';
import 'health_book_viewmodel.dart'; import 'health_book_viewmodel.dart';
import 'widgets/health_book_item.dart'; import 'widgets/health_book_item.dart';
...@@ -38,7 +38,7 @@ class _HealthBookScreenState extends State<HealthBookScreen> { ...@@ -38,7 +38,7 @@ class _HealthBookScreenState extends State<HealthBookScreen> {
child: Obx(() { child: Obx(() {
final products = _viewModel.healthBookData.value?.products ?? []; final products = _viewModel.healthBookData.value?.products ?? [];
return products.isEmpty return products.isEmpty
? Center(child: EmptyWidget()) ? Center(child: EmptyWidget(isLoading: _viewModel.isLoading.value))
: ListView.builder( : ListView.builder(
itemCount: products.length, itemCount: products.length,
itemBuilder: (context, index) { itemBuilder: (context, index) {
...@@ -48,7 +48,7 @@ class _HealthBookScreenState extends State<HealthBookScreen> { ...@@ -48,7 +48,7 @@ class _HealthBookScreenState extends State<HealthBookScreen> {
child: HealthBookItem( child: HealthBookItem(
item: item, item: item,
onTap: () { onTap: () {
Get.toNamed(healthBookCardDetail, arguments: {'health_book_card': item, 'id': item.itemId.toString() ?? ''}); Get.toNamed(healthBookCardDetail, arguments: {'health_book_card': item, 'id': item.itemId.toString()});
}, },
), ),
); );
......
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/configs/constants.dart'; import 'package:mypoint_flutter_app/core/network/restful_api_client_all_request.dart';
import 'package:mypoint_flutter_app/networking/restful_api_client_all_request.dart'; import 'package:mypoint_flutter_app/features/traffic_service/traffic_service_model.dart';
import 'package:mypoint_flutter_app/screen/traffic_service/traffic_service_model.dart'; import '../../core/network/restful_api_viewmodel.dart';
import '../../networking/restful_api_viewmodel.dart';
import 'health_book_model.dart'; import 'health_book_model.dart';
class HealthBookViewModel extends RestfulApiViewModel { class HealthBookViewModel extends RestfulApiViewModel {
......
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:mypoint_flutter_app/extensions/datetime_extensions.dart'; import 'package:mypoint_flutter_app/core/utils/extensions/datetime_extensions.dart';
import 'package:mypoint_flutter_app/extensions/string_extension.dart'; import 'package:mypoint_flutter_app/core/utils/extensions/string_extension.dart';
import 'package:mypoint_flutter_app/widgets/image_loader.dart'; import 'package:mypoint_flutter_app/shared/widgets/image_loader.dart';
import '../../../extensions/date_format.dart'; import '../../../core/utils/extensions/date_format.dart';
import '../health_book_model.dart'; import '../health_book_model.dart';
class HealthBookItem extends StatelessWidget { class HealthBookItem extends StatelessWidget {
...@@ -127,3 +127,8 @@ class HealthBookItem extends StatelessWidget { ...@@ -127,3 +127,8 @@ class HealthBookItem extends StatelessWidget {
import 'dart:math'; import 'dart:math';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:fl_chart/fl_chart.dart'; import 'package:fl_chart/fl_chart.dart';
import 'package:intl/intl.dart'; import 'package:intl/intl.dart';
import 'package:mypoint_flutter_app/extensions/num_extension.dart'; import 'package:mypoint_flutter_app/core/utils/extensions/num_extension.dart';
import 'models/transaction_summary_by_date_model.dart'; import 'models/transaction_summary_by_date_model.dart';
class MonthlyPointsChart extends StatelessWidget { class MonthlyPointsChart extends StatelessWidget {
...@@ -229,8 +228,6 @@ class MonthlyPointsChart extends StatelessWidget { ...@@ -229,8 +228,6 @@ class MonthlyPointsChart extends StatelessWidget {
return double.tryParse(s) ?? 0; return double.tryParse(s) ?? 0;
} }
static String _formatInt(double v) => v.toStringAsFixed(0);
/// Format Y-axis label để hiển thị gọn gàng /// Format Y-axis label để hiển thị gọn gàng
String _formatYAxisLabel(int value) { String _formatYAxisLabel(int value) {
if (value >= 1000000) { if (value >= 1000000) {
......
...@@ -2,14 +2,13 @@ import 'package:flutter/material.dart'; ...@@ -2,14 +2,13 @@ import 'package:flutter/material.dart';
import 'package:flutter/services.dart'; import 'package:flutter/services.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:month_picker_dialog/month_picker_dialog.dart'; import 'package:month_picker_dialog/month_picker_dialog.dart';
import 'package:mypoint_flutter_app/extensions/datetime_extensions.dart'; import 'package:mypoint_flutter_app/core/utils/extensions/datetime_extensions.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/extensions/string_extension.dart'; import 'package:mypoint_flutter_app/core/utils/extensions/string_extension.dart';
import 'package:mypoint_flutter_app/resources/base_color.dart'; import 'package:mypoint_flutter_app/shared/widgets/custom_toast_message.dart';
import 'package:mypoint_flutter_app/widgets/custom_toast_message.dart'; import '../../shared/widgets/custom_empty_widget.dart';
import '../../../widgets/custom_empty_widget.dart'; import '../../shared/widgets/custom_navigation_bar.dart';
import '../../../widgets/custom_navigation_bar.dart'; import '../../core/utils/extensions/date_format.dart';
import '../../extensions/date_format.dart';
import 'history_point_chart.dart'; import 'history_point_chart.dart';
import 'history_point_viewmodel.dart'; import 'history_point_viewmodel.dart';
import 'models/cash_history_model.dart'; import 'models/cash_history_model.dart';
...@@ -121,7 +120,10 @@ class _HistoryPointScreenState extends State<HistoryPointScreen> { ...@@ -121,7 +120,10 @@ class _HistoryPointScreenState extends State<HistoryPointScreen> {
Widget _buildTransactionHistoryList(List<TransactionHistoryModel> transactionHistories) { Widget _buildTransactionHistoryList(List<TransactionHistoryModel> transactionHistories) {
if (transactionHistories.isEmpty) { if (transactionHistories.isEmpty) {
return SliverFillRemaining(hasScrollBody: false, child: Center(child: EmptyWidget())); return SliverFillRemaining(
hasScrollBody: false,
child: Center(child: EmptyWidget(isLoading: _viewModel.isLoading.value)),
);
} else { } else {
return SliverList( return SliverList(
delegate: SliverChildBuilderDelegate((context, index) { delegate: SliverChildBuilderDelegate((context, index) {
...@@ -133,7 +135,10 @@ class _HistoryPointScreenState extends State<HistoryPointScreen> { ...@@ -133,7 +135,10 @@ class _HistoryPointScreenState extends State<HistoryPointScreen> {
Widget _buildCashHistoryList(List<CashHistoryModel> cashHistories) { Widget _buildCashHistoryList(List<CashHistoryModel> cashHistories) {
if (cashHistories.isEmpty) { if (cashHistories.isEmpty) {
return SliverFillRemaining(hasScrollBody: false, child: Center(child: EmptyWidget())); return SliverFillRemaining(
hasScrollBody: false,
child: Center(child: EmptyWidget(isLoading: _viewModel.isLoading.value)),
);
} else { } else {
return SliverList( return SliverList(
delegate: SliverChildBuilderDelegate((context, index) { delegate: SliverChildBuilderDelegate((context, index) {
...@@ -230,7 +235,7 @@ class _HistoryPointScreenState extends State<HistoryPointScreen> { ...@@ -230,7 +235,7 @@ class _HistoryPointScreenState extends State<HistoryPointScreen> {
child: Image.network( child: Image.network(
item.brandLogo ?? '', item.brandLogo ?? '',
fit: BoxFit.contain, fit: BoxFit.contain,
errorBuilder: (_, __, ___) => Image.asset('assets/images/ic_logo.png'), errorBuilder: (_, _, _) => Image.asset('assets/images/ic_logo.png'),
), ),
), ),
), ),
......
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/restful_api_client_all_request.dart'; import 'package:mypoint_flutter_app/core/network/restful_api_client_all_request.dart';
import '../../networking/restful_api_viewmodel.dart'; import '../../core/network/restful_api_viewmodel.dart';
import 'models/history_point_models.dart'; import 'models/history_point_models.dart';
import 'models/transaction_summary_by_date_model.dart'; import 'models/transaction_summary_by_date_model.dart';
......
import 'dart:ui'; import 'dart:ui';
import 'cash_history_model.dart'; import 'cash_history_model.dart';
import 'package:mypoint_flutter_app/screen/history_point/models/transaction_history_model.dart'; import 'package:mypoint_flutter_app/features/history_point/models/transaction_history_model.dart';
class ListHistoryResponseModel { class ListHistoryResponseModel {
final List<TransactionHistoryModel>? historyTransaction; final List<TransactionHistoryModel>? historyTransaction;
......
import '../../../configs/callbacks.dart'; import '../../../app/config/callbacks.dart';
class TransactionHistoryModel { class TransactionHistoryModel {
final String? poolCode; final String? poolCode;
......
import '../../../configs/callbacks.dart'; import '../../../app/config/callbacks.dart';
class TransactionSummaryByDateModel { class TransactionSummaryByDateModel {
final MonthSummaryChartModel month; final MonthSummaryChartModel month;
......
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