flutter 实际开发中 实体类 怎么用

147 阅读2分钟

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_preferencessqflite 等库将实体类数据存储到本地。

例如,使用 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 进行交互,并将数据存储在本地。