在我的應用程式中,我有一些免費資料,用戶第一次打開它時會加載這些資料。我有一個螢屏,我需要從服務器加載一些其他資料,可以購買,我想處理互聯網連接是否可用,如果用戶從網路加載資料超過 5 秒,則向他們發出下一個狀態和顯示用戶已經加載的資料。
這就是我現在所擁有的,如果用戶沒有互聯網連接,CheckListTemplateError 會向他們發出,但我想發出 CheckListTemplateLoaded 與來自loadedPaidTemplates 的資料
在代碼注釋中,我將解釋從服務器加載代碼的哪一部分
如果互聯網連接可用并且用戶從服務器加載資料超過 5 秒,我該如何處理,向他們發送帶有本地加載資料的狀態?
Future<void> _loadCheckListTemplates(OnCheckListTemplateLoad event, Emitter emit) async {
emit(CheckListTemplateLoading());
try {
// this is what I load from local data
final List<CheckListTemplate> loadedTemplates = await _checkListRepository.getLocalCheckListTempaltes();
// this is loading from server
final List<CheckListTemplate> loadedPaidTemplates = await _checkListRepository.getPaidCheckListTempaltes();
for (int i = 0; i < loadedPaidTemplates.length; i ) {
loadedTemplates.add(loadedPaidTemplates[i]);
}
final List<String> loadedPaidCheckListIds = await _checkListRepository.getPaidCheckListTemplateData();
emit(CheckListTemplateLoaded(loadedTemplates: loadedTemplates, paidCheckListsIds: loadedPaidCheckListIds));
} catch (e) {
emit(CheckListTemplateError());
}
}
uj5u.com熱心網友回復:
我找到了檢查互聯網連接的代碼,但我不確定它是否 100% 正確,所以你應該謹慎使用它,但你可以嘗試這樣的事情:
Future<void> _loadCheckListTemplates( OnCheckListTemplateLoad event, Emitter emit) async {
emit(CheckListTemplateLoading());
try {
// this is what i load from local data
final List<CheckListTemplate> loadedTemplates =
await _checkListRepository.getLocalCheckListTempaltes();
bool _isConnectionSuccessful = false;
// check for internet connection
final response = await InternetAddress.lookup('www.google.com');
_isConnectionSuccessful = response.isNotEmpty;
if (!_isConnectionSuccessful) {
// do something if there is no internet connection or in your catch block
}
// initializing your 5 second timer before your next request
final timer = Timer(Duration(seconds: 5), () {
// do something if your request takes more then 5 seconds
});
// this is loading from server
final List<CheckListTemplate> loadedPaidTemplates =
await _checkListRepository.getPaidCheckListTempaltes();
//stop the timer if previous request finished in less then 5 seconds
if (timer.isActive) timer.cancel();
for (int i = 0; i < loadedPaidTemplates.length; i ) {
loadedTemplates.add(loadedPaidTemplates[i]);
}
final List<String> loadedPaidCheckListIds =
await _checkListRepository.getPaidCheckListTemplateData();
emit(CheckListTemplateLoaded(
loadedTemplates: loadedTemplates,
paidCheckListsIds: loadedPaidCheckListIds));
} catch (e) {
emit(CheckListTemplateError());
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/439520.html
上一篇:Elm:呼叫Http.post時,如何從“expect”向Msg發送額外的引數?
下一篇:HTTPCLIENT上傳檔案C#
