import 'package:cs_resources/generated/assets.dart'; import 'package:domain/entity/garage_sale_rent_entity.dart'; import 'package:domain/entity/newsfeed_detail_entity.dart'; import 'package:flutter/cupertino.dart'; import 'package:plugin_platform/engine/toast/toast_engine.dart'; import 'package:riverpod_annotation/riverpod_annotation.dart'; import 'package:router/ext/auto_router_extensions.dart'; import 'package:shared/utils/log_utils.dart'; import 'package:widgets/load_state_layout.dart'; import 'package:widgets/widget_export.dart'; import '../../../respository/services_respository.dart'; import '../../../router/page/services_page_router.dart'; import '../clean_order_detail/clean_order_detail_page.dart'; import 'in_progress_state.dart'; part 'in_progress_vm.g.dart'; @riverpod class InProgressVm extends _$InProgressVm { late ServicesRespository servicesRespositoryInstance; bool _needShowPlaceholder = false; //是否展示LoadingView int _page = 1; // 当前页 int _limit = 10; // 每页数量 int _count = 0; // 总条数 Map _queryParams = { 'category_id': null, 'keyword': null, 'is_liked': null, }; // Refresh 控制器 final EasyRefreshController refreshController = EasyRefreshController( controlFinishRefresh: true, //允许刷新 controlFinishLoad: true, //允许加载 ); InProgressState initState() { return InProgressState( list: [] ); } @override InProgressState build(){ // 引入数据仓库 // servicesRespositoryInstance = ref.read(commonGarageRespositoryProvider); final state = initState(); Log.d("--------------------------build---------------------"); return state; } //刷新页面状态 void changeLoadingState(LoadState loadState, String? errorMsg) { state = state.copyWith( loadingState: loadState, errorMessage: errorMsg ); } // 初始化页面数据 initPageData() { Log.d("----home_service_vm-----initPageData ${state.loadingState}"); onRefresh(); } // 上拉加载 更多 Future loadMore() async { Log.d("----home_service_vm-----loadMore"); _page++; getListData(); } // 下拉刷新 Future onRefresh() async { // 当前pageView 页面正处于显示状态 Log.d("----forsale_vm-----onRefresh "); // await Future.delayed(const Duration(seconds: 2)); _page = 1; getListData(); } // 手动进行刷新 Future triggerRefresh() async { Log.d("trggerRefresh"); refreshController.callRefresh(); } // 手动进行刷新 Future directRefresh() async { state = state.copyWith(list:[]); // 注意:由于 nestedscrollview 嵌套easyfresh 组件 refreshController.callRefresh() 自动刷新只能滚动顶部但是不会触发下拉刷新,这里调用是 用到了将其滚动到顶部的作用,进而刷新操作主动掉接口 // https://github.com/xuelongqy/flutter_easy_refresh/issues/692 refreshController.callRefresh(); refreshController.resetFooter(); _page = 1; _needShowPlaceholder = true; getListData(); } // 重试请求 Future retryRequest() async { _page = 1; _needShowPlaceholder = true; getListData(); } // 获取list 列表数据 Future getListData({bool? isLoadMore}) async { if (_needShowPlaceholder) { changeLoadingState(LoadState.State_Loading, null); } List> list = [ { 'id':1, 'service_type': 0, // 0 房屋保洁 1 空调保洁 2 维修 'cover_img': 'https://img2.baidu.com/it/u=3489233687,2364672159&fm=253&fmt=auto&app=120&f=JPEG?w=507&h=500', 'resources': ['https://img2.baidu.com/it/u=3489233687,2364672159&fm=253&fmt=auto&app=120&f=JPEG?w=507&h=500'], 'title': 'House Cleaning Services', 'duration': 'Daily cleaning for 2 hours', 'totalPrice': 66, 'visit_time': '14 0ct 2024 15:00', 'order_time': '13 0ct 2024 12:00', 'status_text': 'In Progress', 'status_code': 0, 'company_name': 'HONG YE GROUP PTE LTD', }, { 'id':2, 'service_type': 0, // 0 房屋保洁 1 空调保洁 2 维修 'cover_img': 'https://img2.baidu.com/it/u=3489233687,2364672159&fm=253&fmt=auto&app=120&f=JPEG?w=507&h=500', 'resources': ['https://img2.baidu.com/it/u=3489233687,2364672159&fm=253&fmt=auto&app=120&f=JPEG?w=507&h=500'], 'title': 'House Cleaning Services', 'duration': 'Daily cleaning for 2 hours', 'totalPrice': 66, 'visit_time': '14 0ct 2024 15:00', 'order_time': '13 0ct 2024 12:00', 'status_text': 'In Progress', 'status_code': 1, 'company_name': 'HONG YE GROUP PTE LTD', }, { 'id':3, 'service_type': 0, // 0 房屋保洁 1 空调保洁 2 维修 'cover_img': 'https://img2.baidu.com/it/u=3489233687,2364672159&fm=253&fmt=auto&app=120&f=JPEG?w=507&h=500', 'resources': ['https://img2.baidu.com/it/u=3489233687,2364672159&fm=253&fmt=auto&app=120&f=JPEG?w=507&h=500'], 'title': 'House Cleaning Services', 'duration': 'Daily cleaning for 2 hours', 'totalPrice': 66, 'visit_time': '14 0ct 2024 15:00', 'order_time': '13 0ct 2024 12:00', 'status_text': 'In Progress', 'status_code': 1, 'company_name': 'HONG YE GROUP PTE LTD', }, ]; handlerResultData(true, list:list); // try { // //请求网络 // Map params = { // "type": 1, // 类型(1=Sale,2=Rent) // "category_id": _queryParams['category_id'], // "keyword": _queryParams['keyword'], // "page": _page, // "limit": _limit, // }; // Log.d("请求参数------$params"); // final result = await servicesRespositoryInstance.fetchGarageDataList(params); // //校验成功失败 // if (result.isSuccess) { // // handlerResultList((result.data as GarageSaleRentEntity).list as List, isLoadMore ?? false); // } else { // String errorMessage = result.errorMsg!; // changeLoadingState(LoadState.State_Error, errorMessage); // ToastEngine.show(result.errorMsg ?? "Network Load Error"); // } // } catch (e) { // ToastEngine.show("Error: $e"); // } // 最后赋值 _needShowPlaceholder = false; } handlerResultData(bool isList, {List>? list, dynamic? data}){ Future.delayed(const Duration(seconds: 1)).then((value) { if(isList){ // list 数据模式 if(list != null && list.isNotEmpty){ if(_page == 1){ state.list.clear(); state.list!.addAll(list); refreshController.finishRefresh(); changeLoadingState(LoadState.State_Success, null); }else { final allList = state.list; allList!.addAll(list); state = state.copyWith(list: allList); refreshController.finishLoad(); } }else { if(_page == 1){ state.list.clear(); changeLoadingState(LoadState.State_Empty, null); refreshController.finishRefresh(); }else { refreshController.finishLoad(IndicatorResult.noMore); } } }else { // 单个数据模式 if(data!=null){ if(_page == 1){ refreshController.finishRefresh(); }else{ refreshController.finishLoad(); } changeLoadingState(LoadState.State_Success, null); }else { if(_page == 1){ refreshController.finishRefresh(); }else{ refreshController.finishLoad(); } changeLoadingState(LoadState.State_Empty, null); } } }); } void handlerResultList(List? list, bool isLoadMore) { if (list != null && list.isNotEmpty) { //有数据,判断是刷新还是加载更多的数据 if (_page == 1) { //刷新的方式 state.list!.clear(); state.list!.addAll(list.map((item) => item.toJson()).toList()); refreshController.finishRefresh(); //更新展示的状态 changeLoadingState(LoadState.State_Success, null); } else { //加载更多 final allList = state.list; allList!.addAll(list.map((item) => item.toJson()).toList()); state = state.copyWith(list: allList); refreshController.finishLoad(); } } else { if (_page == 1) { //展示无数据的布局 state.list!.clear(); changeLoadingState(LoadState.State_Empty, null); refreshController.finishRefresh(); } else { //展示加载完成,没有更多数据了 if (_page == 1) { //展示无数据的布局 state.list!.clear(); changeLoadingState(LoadState.State_Empty, null); refreshController.finishRefresh(); } else { //展示加载完成,没有更多数据了 if(state.list!.length == 0){ changeLoadingState(LoadState.State_Empty, null); refreshController.finishLoad(); }else { if(_needShowPlaceholder){ changeLoadingState(LoadState.State_Success, null); } } //更新展示的状态 refreshController.finishLoad(IndicatorResult.noMore); } } } } // 设置当前的 _queryParams setCurrentQueryParams(Map params){ _queryParams.addAll(params); } // 获取当前的 _queryParams Map getCurrentQueryParams(String? key){ if(key!=null && key!.isNotEmpty){ return _queryParams[key]; } return _queryParams; } // 去详情页面 gotoCleanOrderDetailPage(BuildContext context, int id, int serviceTypeCode, int serviesStatusCode){ CleanOrderDetailPage.startInstance(id: id, serviceTypeCode: serviceTypeCode, serviesStatusCode: serviesStatusCode); } }