MST

星途 面试题库

面试题:Flutter中如何使用Future和async/await进行异步数据加载并处理可能出现的错误

假设你要从一个网络API获取用户信息列表,使用Flutter的Future和async/await语法来实现这个异步数据加载过程,并处理在请求过程中可能出现的网络错误、解析错误等,简要描述实现思路并给出关键代码片段。
45.6万 热度难度
前端开发Flutter

知识考点

AI 面试

面试题答案

一键面试

实现思路

  1. 使用http库来发起网络请求,因为Flutter没有内置的网络请求库,http是常用的选择。
  2. 使用Futureasync/await语法来处理异步操作。async标记一个异步函数,await用于暂停异步函数的执行,直到Future完成。
  3. 处理可能出现的网络错误,例如请求超时、连接失败等,可以通过try-catch块捕获异常。
  4. 处理解析错误,当从API返回的数据格式不符合预期时,解析会失败,同样可以在try-catch块中处理。

关键代码片段

import 'package:http/http.dart' as http;
import 'dart:convert';

// 定义用户信息模型
class User {
  final String name;
  final int age;

  User({required this.name, required this.age});

  factory User.fromJson(Map<String, dynamic> json) {
    return User(
      name: json['name'],
      age: json['age'],
    );
  }
}

Future<List<User>> fetchUserList() async {
  try {
    // 发起网络请求
    final response = await http.get(Uri.parse('YOUR_API_URL'));

    // 检查响应状态码
    if (response.statusCode == 200) {
      // 解析JSON数据
      List<dynamic> jsonList = jsonDecode(response.body);
      List<User> userList = jsonList.map((json) => User.fromJson(json)).toList();
      return userList;
    } else {
      throw Exception('Failed to load user list, status code: ${response.statusCode}');
    }
  } catch (e) {
    // 捕获网络错误或解析错误
    throw Exception('Error fetching user list: $e');
  }
}

在使用这个函数时,可以这样调用:

void main() async {
  try {
    List<User> users = await fetchUserList();
    print(users);
  } catch (e) {
    print(e);
  }
}