chooseHouseCleanContent_vm.dart 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. import 'package:domain/entity/paid_service_detail_entity.dart';
  2. import 'package:flutter/cupertino.dart';
  3. import 'package:flutter/material.dart';
  4. import 'package:plugin_platform/engine/toast/toast_engine.dart';
  5. import 'package:riverpod_annotation/riverpod_annotation.dart';
  6. import 'package:router/ext/auto_router_extensions.dart';
  7. import 'package:shared/utils/log_utils.dart';
  8. import 'package:widgets/dialog/dialog_content_wrap.dart';
  9. import '../../../respository/services_respository.dart';
  10. import 'chooseHouseCleanContent_state.dart';
  11. part 'chooseHouseCleanContent_vm.g.dart';
  12. @riverpod
  13. class ChooseHouseCleanContentVm extends _$ChooseHouseCleanContentVm {
  14. late ServicesRespository serviceRespositoryInstance;
  15. List<PaidServiceDetailProducts> _products = [];
  16. List<Map<String, dynamic>> houseCleanList = [];
  17. ChooseHouseCleanContentState initState(){
  18. Log.d("--------------------------initState---------------------");
  19. if(houseCleanList.isNotEmpty){
  20. List<HouseCleanContentItem> houseCleanListNew = [];
  21. houseCleanList.forEach((item) {
  22. HouseCleanContentItem newItem = HouseCleanContentItem()
  23. ..id = item['id']
  24. ..price = item['price'] as double
  25. ..name = item['name']
  26. ..num = 1
  27. ..areaSizeRange = item['areaSizeRange']
  28. ..isChecked = item['isChecked']
  29. ..isDisable = item['isDisable'];
  30. houseCleanListNew.add(newItem);
  31. });
  32. return ChooseHouseCleanContentState(
  33. houseCleanList: houseCleanListNew,
  34. );
  35. }else {
  36. return ChooseHouseCleanContentState(
  37. houseCleanList: null,
  38. );
  39. }
  40. }
  41. @override
  42. ChooseHouseCleanContentState build(){
  43. // 引入数据仓库
  44. serviceRespositoryInstance = ref.read(servicesRespositoryProvider);
  45. ChooseHouseCleanContentState state = initState();
  46. Log.d("--------------------------build---------------------");
  47. return state;
  48. }
  49. setInitPageData(BuildContext context, Map<String, dynamic>? params){
  50. Log.d("--------------------------setInitPageData----------$params-----------");
  51. _products = params?['products']??[];
  52. // 渲染一帧后
  53. WidgetsBinding.instance.addPostFrameCallback((_){
  54. // 修改 state 中 HouseCleanList
  55. if(_products != null){
  56. if(_products != null && _products.isNotEmpty){
  57. List<PaidServiceDetailProducts> products = _products;
  58. List<HouseCleanContentItem> houseCleanListNew = [];
  59. products.forEach((item) {
  60. HouseCleanContentItem newItem = HouseCleanContentItem()
  61. ..id = item.id
  62. ..price = (item.price ?? 0.0).toDouble()
  63. ..name = item.name
  64. ..num = 1
  65. ..areaSizeRange = item.shortDescription
  66. ..isChecked = false
  67. ..isDisable = false;
  68. houseCleanListNew.add(newItem);
  69. });
  70. state = state.copyWith(
  71. houseCleanList: houseCleanListNew,
  72. );
  73. }
  74. }
  75. });
  76. }
  77. // 修改 item 的选中状态
  78. handlerChangeItemChecked(BuildContext context, int index){
  79. bool isMultileSelect = state.isMultileSelect?? false;
  80. if(isMultileSelect == true){
  81. // 允许多选
  82. List<HouseCleanContentItem> newHouseCleanList = state.houseCleanList!;
  83. bool isChecked = newHouseCleanList?[index]?.isChecked??false;
  84. newHouseCleanList?[index].isChecked = !isChecked;
  85. state = state.copyWith(
  86. houseCleanList: newHouseCleanList,
  87. );
  88. }else {
  89. // 只允许单选 需要重置其他item的选择状态
  90. List<HouseCleanContentItem> newHouseCleanList = List.from(state.houseCleanList!);
  91. bool isChecked = newHouseCleanList?[index]?.isChecked??false;
  92. for (int i = 0; i < newHouseCleanList.length; i++) {
  93. if(i == index){
  94. if(isChecked){
  95. newHouseCleanList[i].isChecked = false;
  96. }else{
  97. newHouseCleanList[i].isChecked = true;
  98. }
  99. }else {
  100. newHouseCleanList[i].isChecked = false;
  101. }
  102. }
  103. state = state.copyWith(
  104. houseCleanList: newHouseCleanList,
  105. );
  106. Log.d("3433: ${state.houseCleanList}");
  107. }
  108. }
  109. }