"lib/shared/widgets/measure_size.dart" did not exist on "560b49dde31ba5dc11890509ccb13b3ae5dd2c08"
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 'package:mypoint_flutter_app/directional/directional_screen.dart'; import 'package:mypoint_flutter_app/shared/navigation/directional_screen.dart';
import '../../../app/routing/directional_action_type.dart';
import '../../../directional/directional_action_type.dart';
part 'affiliate_product_top_sale_model.g.dart'; part 'affiliate_product_top_sale_model.g.dart';
@JsonSerializable() @JsonSerializable()
......
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/extensions/string_extension.dart'; import 'package:mypoint_flutter_app/core/utils/extensions/string_extension.dart';
import '../../../resources/base_color.dart'; import '../../../core/theme/base_color.dart';
import '../../../shared/router_gage.dart'; import '../../../shared/router_gage.dart';
import '../../../widgets/image_loader.dart'; import '../../../shared/widgets/image_loader.dart';
import '../model/affiliate_brand_model.dart'; import '../model/affiliate_brand_model.dart';
class AffiliateBrand extends StatelessWidget { class AffiliateBrand extends StatelessWidget {
...@@ -65,7 +65,7 @@ class AffiliateBrand extends StatelessWidget { ...@@ -65,7 +65,7 @@ class AffiliateBrand extends StatelessWidget {
Widget buildAffiliateBrandItem(AffiliateBrandModel brand) { Widget buildAffiliateBrandItem(AffiliateBrandModel brand) {
return LayoutBuilder( return LayoutBuilder(
builder: (context, constraints) { builder: (context, constraints) {
final double imageWidth = constraints.maxWidth / 2; final double imageWidth = constraints.maxWidth / 1.9;
return GestureDetector( return GestureDetector(
onTap: () { onTap: () {
Get.toNamed(affiliateBrandDetailScreen, arguments: {"brandId": brand.brandId}); Get.toNamed(affiliateBrandDetailScreen, arguments: {"brandId": brand.brandId});
...@@ -80,22 +80,18 @@ Widget buildAffiliateBrandItem(AffiliateBrandModel brand) { ...@@ -80,22 +80,18 @@ Widget buildAffiliateBrandItem(AffiliateBrandModel brand) {
child: Column( child: Column(
mainAxisAlignment: MainAxisAlignment.center, mainAxisAlignment: MainAxisAlignment.center,
children: [ children: [
// SizedBox( SizedBox(
// width: imageWidth,
// height: imageWidth, // ✅ 1:1 tỉ lệ
// child: ClipOval(
// child: Image.network(
// brand.logo ?? '',
// fit: BoxFit.contain,
// errorBuilder: (_, __, ___) => const Icon(Icons.broken_image),
// ),
// ),
// ),
loadNetworkImage(
url: brand.logo ?? '',
width: imageWidth, width: imageWidth,
height: imageWidth, height: imageWidth,
fit: BoxFit.contain, child: ClipRRect(
borderRadius: BorderRadius.circular(imageWidth),
child: loadNetworkImage(
url: brand.logo ?? '',
width: imageWidth,
height: imageWidth,
fit: BoxFit.cover,
),
),
), ),
const SizedBox(height: 4), const SizedBox(height: 4),
Text( Text(
......
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import '../../../resources/base_color.dart'; import '../../../core/theme/base_color.dart';
import '../model/affiliate_category_model.dart'; import '../model/affiliate_category_model.dart';
class AffiliateCategory extends StatelessWidget { class AffiliateCategory extends StatelessWidget {
...@@ -54,7 +54,7 @@ class AffiliateCategory extends StatelessWidget { ...@@ -54,7 +54,7 @@ class AffiliateCategory extends StatelessWidget {
Image.asset('assets/images/cashback/${category.icon}.png', width: imageWidth, height: imageWidth,), Image.asset('assets/images/cashback/${category.icon}.png', width: imageWidth, height: imageWidth,),
const SizedBox(height: 4), const SizedBox(height: 4),
Text( Text(
category.name ?? '', category.name,
textAlign: TextAlign.center, textAlign: TextAlign.center,
maxLines: 2, maxLines: 2,
overflow: TextOverflow.ellipsis, overflow: TextOverflow.ellipsis,
......
import 'package:flutter/material.dart'; import 'package:flutter/material.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 'package:mypoint_flutter_app/extensions/string_extension.dart'; import 'package:mypoint_flutter_app/core/utils/extensions/string_extension.dart';
import '../model/affiliate_product_top_sale_model.dart'; import '../model/affiliate_product_top_sale_model.dart';
class AffiliateProductTopSale extends StatelessWidget { class AffiliateProductTopSale extends StatelessWidget {
...@@ -72,7 +72,7 @@ class AffiliateProductTopSale extends StatelessWidget { ...@@ -72,7 +72,7 @@ class AffiliateProductTopSale extends StatelessWidget {
child: Image.network( child: Image.network(
imageUrl, imageUrl,
fit: BoxFit.cover, fit: BoxFit.cover,
errorBuilder: (_, __, ___) => Image.asset('assets/images/ic_logo.png'), errorBuilder: (_, _, _) => Image.asset('assets/images/bg_default_11.png'),
), ),
), ),
), ),
...@@ -93,7 +93,7 @@ class AffiliateProductTopSale extends StatelessWidget { ...@@ -93,7 +93,7 @@ class AffiliateProductTopSale extends StatelessWidget {
children: [ children: [
const TextSpan(text: "Hoàn đến: "), const TextSpan(text: "Hoàn đến: "),
TextSpan( TextSpan(
text: "${(commission ?? '').toNum()?.toString() ?? ''}%", text: "${(commission).toNum()?.toString() ?? ''}%",
style: const TextStyle(color: Colors.orange, fontWeight: FontWeight.bold, fontSize: 14), style: const TextStyle(color: Colors.orange, fontWeight: FontWeight.bold, fontSize: 14),
), ),
], ],
......
import 'dart:math'; import 'dart:math';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:mypoint_flutter_app/extensions/num_extension.dart'; import 'package:mypoint_flutter_app/core/utils/extensions/num_extension.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 '../../resources/base_color.dart'; import '../../core/theme/base_color.dart';
import '../../widgets/back_button.dart'; import '../../shared/widgets/back_button.dart';
import '../../widgets/image_loader.dart'; import '../../shared/widgets/image_loader.dart';
import '../../widgets/measure_size.dart'; import '../../shared/widgets/measure_size.dart';
import 'affiliate_brand_detail_tip_box.dart'; import 'affiliate_brand_detail_tip_box.dart';
import 'affiliate_brand_detail_viewmodel.dart'; import 'affiliate_brand_detail_viewmodel.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
...@@ -250,7 +250,7 @@ class _AffiliateBrandDetailScreenState extends BaseState<AffiliateBrandDetailScr ...@@ -250,7 +250,7 @@ class _AffiliateBrandDetailScreenState extends BaseState<AffiliateBrandDetailScr
style: const TextStyle(color: Colors.black, fontSize: 13), style: const TextStyle(color: Colors.black, fontSize: 13),
children: [ children: [
TextSpan( TextSpan(
text: detail.showCommision ?? '', text: detail.showCommision,
style: const TextStyle(color: Colors.deepOrangeAccent, fontWeight: FontWeight.bold), style: const TextStyle(color: Colors.deepOrangeAccent, fontWeight: FontWeight.bold),
), ),
], ],
...@@ -262,7 +262,7 @@ class _AffiliateBrandDetailScreenState extends BaseState<AffiliateBrandDetailScr ...@@ -262,7 +262,7 @@ class _AffiliateBrandDetailScreenState extends BaseState<AffiliateBrandDetailScr
const Icon(Icons.check_circle, color: Colors.green, size: 16), const Icon(Icons.check_circle, color: Colors.green, size: 16),
const SizedBox(width: 2), const SizedBox(width: 2),
Text( Text(
'${detail?.quantitySold?.money(CurrencyUnit.noneSpace) ?? '1'} đơn hàng', '${detail.quantitySold?.money(CurrencyUnit.noneSpace) ?? '1'} đơn hàng',
style: TextStyle(color: Colors.green, fontSize: 13), style: TextStyle(color: Colors.green, fontSize: 13),
), ),
], ],
......
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'models/affiliate_brand_detail_model.dart'; import 'models/affiliate_brand_detail_model.dart';
class AffiliateTagListScrollable extends StatelessWidget { class AffiliateTagListScrollable extends StatelessWidget {
...@@ -81,65 +80,3 @@ class AffiliateTagListScrollable extends StatelessWidget { ...@@ -81,65 +80,3 @@ class AffiliateTagListScrollable extends StatelessWidget {
); );
} }
} }
// import 'package:flutter/material.dart';
//
// import 'models/affiliate_brand_detail_model.dart';
//
// class AffiliateTagList extends StatelessWidget {
// final List<AffiliateBrandCategoryModel> items;
//
// const AffiliateTagList({super.key, required this.items});
//
// @override
// Widget build(BuildContext context) {
// int maxLines = 2;
// if (items.length > 20) {
// maxLines = 3;
// } else if (items.length < 10) {
// maxLines = 1;
// }
//
// return Column(
// crossAxisAlignment: CrossAxisAlignment.start,
// children: [
// const Padding(
// padding: EdgeInsets.all(8.0),
// child: Text(
// "Tỉ lệ hoàn điểm",
// style: TextStyle(fontWeight: FontWeight.bold),
// ),
// ),
// Wrap(
// spacing: 8,
// runSpacing: 8,
// children: items
// .take(maxLines * 3) // optional: limit total number if needed
// .map(
// (item) => Container(
// padding: const EdgeInsets.symmetric(horizontal: 8, vertical: 4),
// decoration: BoxDecoration(
// color: Colors.grey.shade100,
// borderRadius: BorderRadius.circular(16),
// ),
// child: RichText(
// text: TextSpan(
// text: '${item.categoryName}: ',
// style: const TextStyle(color: Colors.black87, fontSize: 14),
// children: [
// TextSpan(
// text: item.commision ?? '',
// style: const TextStyle(color: Colors.orange, fontSize: 14),
// ),
// ],
// ),
// ),
// ),
// )
// .toList(),
// ),
// ],
// );
// }
// }
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:mypoint_flutter_app/configs/constants.dart'; import 'package:mypoint_flutter_app/app/config/constants.dart';
import 'package:mypoint_flutter_app/networking/api/affiliate_api.dart' import 'package:mypoint_flutter_app/core/network/api/affiliate_api.dart' deferred as affiliate_api;
deferred as affiliate_api; import '../../core/network/restful_api_viewmodel.dart';
import 'package:mypoint_flutter_app/networking/restful_api_client_all_request.dart';
import '../../networking/restful_api_viewmodel.dart';
import 'models/affiliate_brand_detail_model.dart'; import 'models/affiliate_brand_detail_model.dart';
class AffiliateBrandDetailViewModel extends RestfulApiViewModel { class AffiliateBrandDetailViewModel extends RestfulApiViewModel {
...@@ -13,8 +10,7 @@ class AffiliateBrandDetailViewModel extends RestfulApiViewModel { ...@@ -13,8 +10,7 @@ class AffiliateBrandDetailViewModel extends RestfulApiViewModel {
AffiliateBrandDetailViewModel(this.brandId); AffiliateBrandDetailViewModel(this.brandId);
void Function(String message)? onShowAlertError; void Function(String message)? onShowAlertError;
final Rxn<AffiliateBrandDetailModel> brandDetailData = final Rxn<AffiliateBrandDetailModel> brandDetailData = Rxn<AffiliateBrandDetailModel>();
Rxn<AffiliateBrandDetailModel>();
bool _affiliateLibLoaded = false; bool _affiliateLibLoaded = false;
......
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import '../../widgets/custom_navigation_bar.dart'; import '../../shared/widgets/custom_navigation_bar.dart';
import '../affiliate/model/affiliate_brand_model.dart'; import '../affiliate/model/affiliate_brand_model.dart';
import '../affiliate/sub_widget/build_affiliate_brand.dart'; import '../affiliate/sub_widget/build_affiliate_brand.dart';
......
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import '../../resources/base_color.dart'; import '../../core/theme/base_color.dart';
import '../../widgets/custom_navigation_bar.dart'; import '../../shared/widgets/custom_navigation_bar.dart';
import '../affiliate/affiliate_popup_brands.dart'; import '../affiliate/affiliate_popup_brands.dart';
import '../affiliate/model/affiliate_category_model.dart'; import '../affiliate/model/affiliate_category_model.dart';
import 'affiliate_category_grid_viewmodel.dart'; import 'affiliate_category_grid_viewmodel.dart';
...@@ -67,7 +67,7 @@ class _AffiliateCategoryGridScreenState extends State<AffiliateCategoryGridScree ...@@ -67,7 +67,7 @@ class _AffiliateCategoryGridScreenState extends State<AffiliateCategoryGridScree
Image.asset('assets/images/cashback/${category.icon}.png', width: imageWidth, height: imageWidth), Image.asset('assets/images/cashback/${category.icon}.png', width: imageWidth, height: imageWidth),
const SizedBox(height: 4), const SizedBox(height: 4),
Text( Text(
category.name ?? '', category.name,
textAlign: TextAlign.center, textAlign: TextAlign.center,
maxLines: 2, maxLines: 2,
overflow: TextOverflow.ellipsis, overflow: TextOverflow.ellipsis,
......
import 'package:get/get_rx/src/rx_types/rx_types.dart'; import 'package:mypoint_flutter_app/core/network/api/affiliate_api.dart' deferred as affiliate_api;
import 'package:mypoint_flutter_app/configs/constants.dart'; import '../../core/network/restful_api_viewmodel.dart';
import 'package:mypoint_flutter_app/networking/api/affiliate_api.dart'
deferred as affiliate_api;
import 'package:mypoint_flutter_app/networking/restful_api_client_all_request.dart';
import '../../networking/restful_api_viewmodel.dart';
import '../affiliate/model/affiliate_brand_model.dart'; import '../affiliate/model/affiliate_brand_model.dart';
import '../affiliate/model/affiliate_category_model.dart'; import '../affiliate/model/affiliate_category_model.dart';
class AffiliateCategoryGridViewModel extends RestfulApiViewModel { class AffiliateCategoryGridViewModel extends RestfulApiViewModel {
void Function((List<AffiliateBrandModel>, String) data)? void Function((List<AffiliateBrandModel>, String) data)? onShowAffiliateBrandPopup;
onShowAffiliateBrandPopup;
void Function(String message)? onShowAlertError; void Function(String message)? onShowAlertError;
bool _affiliateLibLoaded = false; bool _affiliateLibLoaded = false;
...@@ -20,20 +15,16 @@ class AffiliateCategoryGridViewModel extends RestfulApiViewModel { ...@@ -20,20 +15,16 @@ class AffiliateCategoryGridViewModel extends RestfulApiViewModel {
_affiliateLibLoaded = true; _affiliateLibLoaded = true;
} }
Future<void> affiliateBrandGetListBuyCategory( Future<void> affiliateBrandGetListBuyCategory(AffiliateCategoryModel category) async {
AffiliateCategoryModel category,
) async {
await callApi<List<AffiliateBrandModel>>( await callApi<List<AffiliateBrandModel>>(
request: () async { request: () async {
await _ensureAffiliateLibraryLoaded(); await _ensureAffiliateLibraryLoaded();
final api = affiliate_api.AffiliateApi(client); final api = affiliate_api.AffiliateApi(client);
return api.affiliateBrandGetList( return api.affiliateBrandGetList(categoryCode: AffiliateCategoryModel.codeToJson(category.code));
categoryCode: AffiliateCategoryModel.codeToJson(category.code),
);
}, },
onSuccess: (data, _) { onSuccess: (data, _) {
if (data.isNotEmpty) { if (data.isNotEmpty) {
onShowAffiliateBrandPopup?.call((data, category.name ?? '')); onShowAffiliateBrandPopup?.call((data, category.name));
} }
}, },
onFailure: (msg, _, _) async { onFailure: (msg, _, _) async {
......
import 'package:mypoint_flutter_app/directional/directional_action_type.dart'; import 'package:mypoint_flutter_app/app/routing/directional_action_type.dart';
import '../../../configs/constants.dart'; import '../../../app/config/constants.dart';
import '../../../directional/directional_screen.dart'; import '../../../shared/navigation/directional_screen.dart';
class AffiliateBrandDetailModel { class AffiliateBrandDetailModel {
final String? commision; final String? commision;
......
import 'package:json_annotation/json_annotation.dart'; import 'package:json_annotation/json_annotation.dart';
part 'brand_category_model.g.dart'; // Nếu dùng build_runner part 'brand_category_model.g.dart'; // Nếu dùng build_runner
@JsonSerializable() @JsonSerializable()
class BrandCategoryModel { class BrandCategoryModel {
final String? id; final String? id;
......
// GENERATED CODE - DO NOT MODIFY BY HAND // GENERATED CODE - DO NOT MODIFY BY HAND
part of 'brand_category_model.dart'; part of '../../affiliate_brand_detail/models/brand_category_model.dart';
// ************************************************************************** // **************************************************************************
// JsonSerializableGenerator // JsonSerializableGenerator
......
import 'package:json_annotation/json_annotation.dart'; import 'package:json_annotation/json_annotation.dart';
import 'brand_category_model.dart'; import 'brand_category_model.dart';
import 'image_model.dart'; import '../../home/models/image_model.dart';
part 'brand_model.g.dart'; part 'brand_model.g.dart';
@JsonSerializable() @JsonSerializable()
......
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