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

update project structure

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