面试题答案
一键面试实现思路
- 使用
http
库来发起网络请求,因为Flutter没有内置的网络请求库,http
是常用的选择。 - 使用
Future
和async/await
语法来处理异步操作。async
标记一个异步函数,await
用于暂停异步函数的执行,直到Future
完成。 - 处理可能出现的网络错误,例如请求超时、连接失败等,可以通过
try-catch
块捕获异常。 - 处理解析错误,当从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);
}
}