MST

星途 面试题库

面试题:Flutter异步操作中的错误重试机制设计

假设在Flutter应用中,有一个异步上传文件到服务器的功能,由于网络不稳定等原因可能会上传失败。请设计一个错误重试机制,要求可以指定最大重试次数,每次重试间隔时间递增,并在重试失败后给出合理的用户提示。请详细说明设计思路及关键代码实现。
22.4万 热度难度
前端开发Flutter

知识考点

AI 面试

面试题答案

一键面试

设计思路

  1. 定义重试参数:包括最大重试次数和初始重试间隔时间。
  2. 执行上传操作:使用Future来处理异步上传文件操作。
  3. 错误处理与重试:捕获上传过程中的错误,判断是否达到最大重试次数,若未达到则按照递增的间隔时间进行重试。
  4. 用户提示:在最终重试失败后,给出用户友好的提示信息。

关键代码实现

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秒
}