面试题答案
一键面试设计思路
- 定义重试参数:包括最大重试次数和初始重试间隔时间。
- 执行上传操作:使用
Future
来处理异步上传文件操作。 - 错误处理与重试:捕获上传过程中的错误,判断是否达到最大重试次数,若未达到则按照递增的间隔时间进行重试。
- 用户提示:在最终重试失败后,给出用户友好的提示信息。
关键代码实现
import 'dart:async';
import 'package:http/http.dart' as http;
Future<void> uploadFile(String filePath, int maxRetries, int initialDelay) async {
int retryCount = 0;
int delay = initialDelay;
while (retryCount < maxRetries) {
try {
// 模拟文件上传
var response = await http.post(Uri.parse('your_upload_url'), body: {'file': filePath});
if (response.statusCode == 200) {
print('文件上传成功');
return;
} else {
throw Exception('上传失败,状态码:${response.statusCode}');
}
} catch (e) {
retryCount++;
if (retryCount >= maxRetries) {
print('达到最大重试次数,上传失败');
// 给用户提示
showUserError('文件上传失败,请检查网络或稍后重试');
} else {
print('上传失败,重试第 $retryCount 次,等待 $delay 毫秒');
await Future.delayed(Duration(milliseconds: delay));
delay = (delay * 1.5).toInt(); // 每次重试间隔时间递增1.5倍
}
}
}
}
void showUserError(String message) {
// 这里可以使用Flutter的弹窗等方式给用户提示
print(message);
}
调用示例:
void main() {
uploadFile('path/to/your/file', 3, 1000); // 最大重试3次,初始间隔1秒
}