import 'dart:io'; import 'package:dio/dio.dart'; import 'package:liftmanager/net/api_service.dart'; import 'package:liftmanager/net/dio_utils.dart'; import 'package:liftmanager/net/error_handle.dart'; import 'package:meta/meta.dart'; import 'mvps.dart'; class BasePagePresenter extends IPresenter { V view; CancelToken _cancelToken; BasePagePresenter(){ _cancelToken = CancelToken(); } @override void deactivate() {} @override void didChangeDependencies() {} @override void didUpdateWidgets(W oldWidget) {} @override void dispose() { /// 销毁时,将请求取消 if (!_cancelToken.isCancelled){ _cancelToken.cancel(); } } @override void initState() {} /// 返回Future 适用于刷新,加载更多 Future requestNetwork(Method method, {@required String url, bool isShow : true, bool isClose: true, Function(T t) onSuccess, Function(List list) onSuccessList, Function(int code, String msg) onError, dynamic params, Map queryParameters, CancelToken cancelToken, Options options, bool isList : false}) async { if (isShow) view.showProgress(); await DioUtils.instance.requestNetwork(method, url, params: params, queryParameters: queryParameters, options: options, cancelToken: cancelToken?? _cancelToken, onSuccess: (data){ if (isClose) view.closeProgress(); if (onSuccess != null) { onSuccess(data); } }, onSuccessList: (data){ if (isClose) view.closeProgress(); if (onSuccessList != null) { onSuccessList(data); } }, onError: (code, msg){ _onError(code, msg, onError); } ); } void asyncRequestNetwork(Method method, {@required String url, bool isShow : true, bool isClose: true, Function(T t) onSuccess, Function(List list) onSuccessList, Function(int code, String msg) onError, dynamic params, Map queryParameters, CancelToken cancelToken, Options options, bool isList : false}){ if (isShow) view.showProgress(); DioUtils.instance.asyncRequestNetwork(method, url, params: params, queryParameters: queryParameters, options: options, cancelToken: cancelToken?? _cancelToken, isList: isList, onSuccess: (data){ if (isClose) view.closeProgress(); if (onSuccess != null) { onSuccess(data); } }, onSuccessList: (data){ if (isClose) view.closeProgress(); if (onSuccessList != null) { onSuccessList(data); } }, onError: (code, msg){ _onError(code, msg, onError); } ); } /// 上传图片实现 Future uploadImg(File image) async{ String imgPath = ""; try{ String path = image.path; var name = path.substring(path.lastIndexOf("/") + 1); FormData formData = FormData.fromMap({ "uploadIcon": await MultipartFile.fromFile(path, filename: name) }); await requestNetwork(Method.post, url: ApiUrl.account_smscode, params: formData, onSuccess: (data){ imgPath = data; } ); }catch(e){ view.showToast("图片上传失败!"); } return imgPath; } _onError(int code, String msg, Function(int code, String msg) onError){ /// 异常时直接关闭加载圈,不受isClose影响 view.closeProgress(); if (code != ExceptionHandle.cancel_error){ view.showToast(msg); } /// 页面如果dispose,则不回调onError if (onError != null && view.getContext() != null) { onError(code, msg); } } }