1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106
| class UnfinishPageApiManager { static Map<String, dynamic> unfinishPageApiMaps = {}; static Map<String, dynamic> unfinishPageApiMaps = { "ContentHomePage": [ { apiUrl: api1, apiStart: apiStart, apiEnd: apiEnd, }, { apiUrl: api2, apiStart: apiStart, apiEnd: apiEnd, } ], "ContentDetailPage": [ { apiUrl: api1, apiStart: apiStart, apiEnd: apiEnd, }, { apiUrl: api2, apiStart: apiStart, apiEnd: apiEnd, } ], }; static void startApi({required String api, required String pageKey}) { List<Map<String, dynamic>> pageRequestingApiMaps = unfinishPageApiMaps[pageKey] ?? []; Map<String, dynamic> newApiInfoMap = { apiUrl: api, apiStart: apiStart, }; pageRequestingApiMaps.add(newApiInfoMap); } static void finishApi({required String api, required String pageKey}) { List<Map<String, dynamic>> pageRequestingApiMaps = unfinishPageApiMaps[pageKey] ?? []; for (Map<String, dynamic> item in pageRequestingApiMaps) { item.addAll({"apiEnd": apiEnd}); } int hasFinishCount = pageRequestingApiMaps.length; List<Map<String, dynamic>> pageNeedApiMaps = PageApiManager.allNeedPageApiMaps[pageKey] ?? []; int needCount = pageNeedApiMaps.length; if (hasFinishCount >= needCount) { _notifyToPage(pageRequestingApiMaps); } } static _notifyToPage(List<Map<String, dynamic>> pageRequestingApiMaps) { int minStart; int maxEnd; for (Map<String, dynamic> item in pageRequestingApiMaps) { int itemStart = item["apiStart"]; int itemEnd = item["apiEnd"]; if (minStart == null) { minStart = itemStart; } else { minStart = min(minStart, itemStart); } if (maxEnd == null) { maxEnd = itemEnd; } else { maxEnd = max(maxEnd, itemEnd); } } if (minStart == null || maxEnd == null) { debugPrint("发生错误了"); return; } int pageApiTotalDuration = maxEnd - minStart; Map<String, dynamic> pageApiMap = { "page_duration": pageApiTotalDuration, "api": { "total_duration": { "start": 1000, "end": 5000, "duration": 4000, }, "apis": pageRequestingApiMaps } } eventBus.fire(PageFinishLoadRequest(pageApiMap: pageApiMap)); } }
|