Dio3.0上传文件具体使用如下:
void uploadPhoto(File file) async{
String path = file.path;
var name = path.substring(path.lastIndexOf("/") + 1, path.length);
String imageType = name.substring(name.lastIndexOf(".") + 1, name.length);
var image = await MultipartFile.fromFile(
path,
filename: name,
);
print("文件路径="+path);
print("文件名="+name);
print("文件image=$image");
FormData formData = FormData.fromMap({
"image": image
});
asyncRequestNetwork<Map>(
Method.post,
url: HttpConstants.UPDATE_USER_PHOTO,
params: formData,
isList: false,
isShow: true,
onSuccess: (data){
if(data != null) {
String url = data["URL"];
view.provider.setUserPhoto(url);
UserInfoBean userInfoBean = Provider.of<UserProvider>(view.context).user;
print("provider==="+userInfoBean.phone);
userInfoBean.photoURI = url;
Provider.of<UserProvider>(view.context).saveUser(userInfoBean);
}
},
);
}
封装dio请求dio_utils.dart
class DioUtils {
static final DioUtils _singleton = DioUtils._internal();
static DioUtils get instance => DioUtils();
factory DioUtils() {
return _singleton;
}
static Dio _dio;
Dio getDio(){
return _dio;
}
DioUtils._internal(){
var options = BaseOptions(
connectTimeout: 15000,
receiveTimeout: 15000,
responseType: ResponseType.plain,
validateStatus: (status){
return true;
},
);
_dio = Dio(options);
_dio.interceptors.add(AuthInterceptor());
if (!Constant.inProduction){
_dio.interceptors.add(LoggingInterceptor());
}
_dio.interceptors.add(AdapterInterceptor());
_dio.interceptors.add(CookieManager(
PersistCookieJar(dir:StorageManager.cookieDirectory.path+"/.cookies/")));
}
Future<BaseEntity<T>> _request<T>(String method, String url, {
dynamic data, Map<String, dynamic> queryParameters,
CancelToken cancelToken, Options options
}) async {
var response = await _dio.