flutter 实际开发中 实体类 怎么用
ChatGPT
在 Flutter 实际开发中,实体类(model class)用于表示数据模型,通常用于网络请求、数据存储和展示等场景。以下是一些使用实体类的步骤和最佳实践:
1. 定义实体类
实体类定义了应用程序中使用的数据模型。通常情况下,你会使用 Dart 类来定义这些模型。
示例:
dart
复制代码
class User {
final String id;
final String name;
final String email;
User({required this.id, required this.name, required this.email});
// 从 JSON 创建一个 User 实例
factory User.fromJson(Map<String, dynamic> json) {
return User(
id: json['id'],
name: json['name'],
email: json['email'],
);
}
// 将 User 实例转换成 JSON
Map<String, dynamic> toJson() {
return {
'id': id,
'name': name,
'email': email,
};
}
}
2. JSON 序列化和反序列化
在实际开发中,通常需要将 JSON 数据转换为实体类实例,或者将实体类实例转换为 JSON。
例如,使用 User 实体类:
dart
复制代码
void main() {
// 从 JSON 创建 User 实例
Map<String, dynamic> userJson = {
'id': '123',
'name': 'John Doe',
'email': 'john.doe@example.com'
};
User user = User.fromJson(userJson);
print('User name: ${user.name}');
// 将 User 实例转换成 JSON
Map<String, dynamic> json = user.toJson();
print('User JSON: $json');
}
3. 使用实体类与 API 交互
在实际开发中,通常需要从网络获取数据并转换为实体类,或者将实体类数据发送到服务器。
例如,使用 http 库与 API 交互:
dart
复制代码
import 'dart:convert';
import 'package:http/http.dart' as http;
Future<User> fetchUser(String userId) async {
final response = await http.get(Uri.parse('https://api.example.com/users/$userId'));
if (response.statusCode == 200) {
return User.fromJson(json.decode(response.body));
} else {
throw Exception('Failed to load user');
}
}
Future<void> main() async {
User user = await fetchUser('123');
print('Fetched user: ${user.name}');
}
4. 使用实体类进行本地存储
可以使用 shared_preferences 或 sqflite 等库将实体类数据存储到本地。
例如,使用 shared_preferences 存储和读取 User 数据:
dart
复制代码
import 'dart:convert';
import 'package:shared_preferences/shared_preferences.dart';
Future<void> saveUser(User user) async {
final prefs = await SharedPreferences.getInstance();
prefs.setString('user', json.encode(user.toJson()));
}
Future<User?> getUser() async {
final prefs = await SharedPreferences.getInstance();
String? userString = prefs.getString('user');
if (userString != null) {
return User.fromJson(json.decode(userString));
} else {
return null;
}
}
void main() async {
User user = User(id: '123', name: 'John Doe', email: 'john.doe@example.com');
await saveUser(user);
User? savedUser = await getUser();
if (savedUser != null) {
print('Saved user: ${savedUser.name}');
} else {
print('No user saved');
}
}
总结
在 Flutter 中,实体类的主要作用是表示数据模型,并在网络请求、本地存储和数据展示等场景中使用。通过定义实体类,并实现 JSON 序列化和反序列化,可以轻松地与 API 进行交互,并将数据存储在本地。