Flutter数据模型管理插件angel3_model的使用

Flutter数据模型管理插件angel3_model的使用

Pub Version (包括预发布版本) 空安全 Discord 许可协议

angel3_model 是用于 Angel3 框架的基本数据模型库。

import 'package:angel3_model/angel3_model.dart';

可用的数据模型有:

  • Model
    • 基本数据模型
  • AuditableModel
    • 具有审计日志功能的基本数据模型

示例代码

以下是一个简单的示例代码,展示如何使用 Model 类来创建和操作数据模型。

import 'package:angel3_model/angel3_model.dart';

void main() {
  // 创建一个 Todo 实例
  var todo = Todo(
    id: '34',
    isComplete: false,
  );

  // 打印 id 的整数值
  print(todo.idAsInt == 34); // 输出 true
}

// 定义一个 Todo 类继承自 Model
class Todo extends Model {
  // 定义文本字段
  String? text;

  // 定义是否完成字段
  bool isComplete;

  // 构造函数
  Todo({
    required String super.id, // 必须传递的 id 参数
    this.text, // 可选的 text 参数
    this.isComplete = false, // 默认值为 false
    super.createdAt, // 创建时间,默认为空
    super.updatedAt, // 更新时间,默认为空
  });
}

更多关于Flutter数据模型管理插件angel3_model的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter数据模型管理插件angel3_model的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是一个关于如何在Flutter项目中使用angel3_model进行数据模型管理的代码示例。angel3_model是一个数据模型管理插件,可以帮助你更方便地管理应用程序中的数据模型。

首先,你需要在你的pubspec.yaml文件中添加angel3_model依赖:

dependencies:
  flutter:
    sdk: flutter
  angel3_model: ^最新版本号  # 请确保使用最新版本

然后,运行flutter pub get来安装依赖。

接下来,我们创建一个简单的数据模型并使用angel3_model来管理它。

1. 定义数据模型

首先,我们定义一个简单的用户数据模型。

// models/user_model.dart
import 'package:angel3_model/angel3_model.dart';

class UserModel extends Model<int> {
  int? id;
  String name;
  String email;

  UserModel({required this.name, required this.email, this.id});

  // 实现fromJson和toJson方法
  factory UserModel.fromJson(Map<String, dynamic> json) => UserModel(
    name: json['name'] as String,
    email: json['email'] as String,
    id: json['id'] as int?,
  );

  Map<String, dynamic> toJson() => {
    'id': id,
    'name': name,
    'email': email,
  };
}

2. 管理数据模型

然后,我们可以创建一个服务来管理这些数据模型。在这个例子中,我们将使用一个简单的内存数据源来存储用户数据。

// services/user_service.dart
import 'package:angel3_framework/angel3_framework.dart';
import 'package:angel3_model/angel3_model.dart';
import 'package:collection/collection.dart';
import 'models/user_model.dart';

class UserService extends Service {
  final List<UserModel> users = [];

  UserService() {
    // 注册模型
    this.model = UserModel;
  }

  @override
  FutureOr<UserModel?> read(id) async {
    return users.firstWhereOrNull((user) => user.id == id);
  }

  @override
  FutureOr<UserModel> create(data) {
    final user = UserModel.fromJson(data as Map<String, dynamic>);
    user.id = users.length + 1; // 简单的主键生成策略
    users.add(user);
    return user;
  }

  @override
  FutureOr<List<UserModel>> index() {
    return [...users];
  }

  @override
  FutureOr<UserModel?> update(id, data) async {
    final index = users.indexWhere((user) => user.id == id);
    if (index != -1) {
      final user = users[index];
      user.name = (data as Map<String, dynamic>)['name'] as String;
      user.email = (data as Map<String, dynamic>)['email'] as String;
      return user;
    }
    return null;
  }

  @override
  FutureOr<bool> delete(id) {
    return users.removeWhere((user) => user.id == id);
  }
}

3. 使用服务

最后,我们在Flutter应用程序中使用这个服务。

// main.dart
import 'package:flutter/material.dart';
import 'package:angel3_framework/angel3_framework.dart';
import 'services/user_service.dart';

void main() {
  final userService = UserService();

  runApp(MyApp(userService));
}

class MyApp extends StatelessWidget {
  final UserService userService;

  MyApp(this.userService);

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: UserListScreen(userService),
    );
  }
}

class UserListScreen extends StatefulWidget {
  final UserService userService;

  UserListScreen(this.userService);

  @override
  _UserListScreenState createState() => _UserListScreenState();
}

class _UserListScreenState extends State<UserListScreen> {
  List<UserModel> users = [];

  @override
  void initState() {
    super.initState();
    widget.userService.index().then((userModels) {
      setState(() {
        users = userModels;
      });
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('User List'),
      ),
      body: ListView.builder(
        itemCount: users.length,
        itemBuilder: (context, index) {
          return ListTile(
            title: Text(users[index].name),
            subtitle: Text(users[index].email),
          );
        },
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: () {
          Navigator.push(
            context,
            MaterialPageRoute(builder: (context) => UserFormScreen(widget.userService)),
          );
        },
        tooltip: 'Add User',
        child: Icon(Icons.add),
      ),
    );
  }
}

class UserFormScreen extends StatefulWidget {
  final UserService userService;

  UserFormScreen(this.userService);

  @override
  _UserFormScreenState createState() => _UserFormScreenState();
}

class _UserFormScreenState extends State<UserFormScreen> {
  final _formKey = GlobalKey<FormState>();
  String name = '';
  String email = '';

  void _submit() {
    if (_formKey.currentState!.validate()) {
      _formKey.currentState!.save();
      widget.userService.create({
        'name': name,
        'email': email,
      }).then((user) {
        Navigator.popAndPushNamed(context, '/');
      });
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Add User'),
      ),
      body: Padding(
        padding: const EdgeInsets.all(8.0),
        child: Form(
          key: _formKey,
          child: Column(
            crossAxisAlignment: CrossAxisAlignment.start,
            children: <Widget>[
              TextFormField(
                decoration: InputDecoration(labelText: 'Name'),
                validator: (value) {
                  if (value == null || value.isEmpty) {
                    return 'Name is required';
                  }
                  return null;
                },
                onSaved: (value) {
                  name = value as String;
                },
              ),
              TextFormField(
                decoration: InputDecoration(labelText: 'Email'),
                validator: (value) {
                  if (value == null || value.isEmpty || !value.contains('@')) {
                    return 'Email is required and must be valid';
                  }
                  return null;
                },
                onSaved: (value) {
                  email = value as String;
                },
              ),
              Padding(
                padding: const EdgeInsets.symmetric(vertical: 16.0),
                child: ElevatedButton(
                  onPressed: _submit,
                  child: Text('Submit'),
                ),
              ),
            ],
          ),
        ),
      ),
    );
  }
}

在这个示例中,我们定义了一个简单的用户数据模型,创建了一个服务来管理用户数据,并在Flutter应用程序中使用这些服务来显示和添加用户。

请注意,这只是一个简单的示例,实际应用中可能需要更复杂的逻辑和错误处理。

回到顶部