上传图像后,图像网络没有改变(颤动)



因此,我制作了一个更改配置文件图片的功能。上传成功,然后我尝试获取新的图片,但图片为空,因为当我打印图片时,它显示的是旧的图片,而不是新的。图像网络似乎没有自动更新。有人能解释为什么会发生这种情况以及如何解决吗?

上传的代码

Future upload(File imageFile) async {
var stream = http.ByteStream(imageFile.openRead());
stream.cast();
var length = await imageFile.length();
String uuid = await UserPreference().getUuid();
var uri = Uri.parse("$baseUrl/customer/$uuid");
var request = http.MultipartRequest("POST", uri);
var multipartFile = http.MultipartFile('profile_picture', stream, length,
filename: basename(imageFile.path));
String getToken = await UserPreference().getToken();
request.headers.addAll({
'Content-Type': 'application/json',
HttpHeaders.authorizationHeader: "Bearer $getToken"
});
request.files.add(multipartFile);
var response = await request.send();
print(getToken);
if (response.statusCode == 200) {
print('uploaded');
} else {
print('failed');
}
response.stream.transform(utf8.decoder).listen((value) {
print(value);
});
}

我称图片为

CircleAvatar(
radius: 50,
child: Image.network(
user.profile_picture!,
fit: BoxFit.cover,
),
),

在响应后添加setState一次。

void uploadImage() async {
// Show loader
// open a byteStream
var stream = new
http.ByteStream(DelegatingStream.typed(file.openRead()));
// get file length
var length = await file.length();
Map<String, String> headers = {
"Accept": "application/json",
"Authorization": token
}; // ignore this headers if there is no authentication

// string to uri
var uri = Uri.parse(Constants.BASE_URL);

// create multipart request
var request = new http.MultipartRequest("POST", uri);

// if you need more parameters to parse, add those like this 
// to the API request
request.fields["orderId"] = orderID.toString();

// multipart that takes file.. here this "file" is a key of the 
// API request
var multipartFile = new http.MultipartFile('file', stream,
length,
filename: basename(file.path));

//add headers
request.headers.addAll(headers);

// add file to multipart
request.files.add(multipartFile);

// send request to upload image
await request.send().then((response) async {
// listen for response
response.stream.transform(utf8.decoder).listen((value) {
print(value);
setState(() {
if (response.statusCode == 200) {
print('uploaded');
} else {
print('failed');
}
});

// Hide loader

});
}).catchError((e) {
print(e);
// Hide loader
});

这将刷新UI。

最新更新