Flutter语言 - 在.then执行之前,函数返回值,然后读取.then



我在下面的代码中遇到了两个问题,我认为这两个问题是相关的。

  1. createFunction显示错误-这个函数的返回类型是FutureOr',但不以返回语句结束。尝试添加一个返回语句,或者将返回类型更改为'void'。-我需要返回true或false,所以我必须使用返回类型bool。
  2. 当函数被执行时,它会平稳运行,直到问题区域(在代码中标记)。这里它返回null,然后返回执行。then。我需要在http之后运行。then。Post被执行。在代码的最后,它应该返回true/false。

如有任何帮助,我将不胜感激。

Future<bool> createFunction(image) async {
var request = new http.MultipartRequest("POST", Uri.parse(_urlImage));
request.files.add(
await http.MultipartFile.fromPath('imagefile', image));
var response = await request.send().catchError((error) {
throw error;
});
response.stream.transform(utf8.decoder).listen((value) async {
return await http
.post(
_url,
headers: {
'content-type': 'application/json',
'authorization': 'auth'
},
body: json.encode({data}),
)
///// PROBLEM AREA //////
.then((value) async {
final _extractedData = await jsonDecode(value.body);
if (value.statusCode == 201) {
return true;
} else {
return false;
}
}).catchError((error) {
throw error;
});
});
}

好的,对于下一个访问该页面的访问者,MultipartRequest类的正确用法应该是这样的:

var uri = Uri.parse('https://example.com/create');
var request = http.MultipartRequest('POST', uri)
..fields['user'] = 'nweiz@google.com'
..files.add(await http.MultipartFile.fromPath(
'package', 'build/package.tar.gz',
contentType: MediaType('application', 'x-tar')));
var response = await request.send();
if (response.statusCode == 200) print('Uploaded!');

最新更新