Flutter对象关系映射插件orm_flutter的使用
Flutter对象关系映射插件orm_flutter的使用
Flutter Integration
Prisma ORM for Dart 允许你在Flutter项目中集成它。
Platform Support
Platform | Support | Notes |
---|---|---|
iOS | ✅ | |
Android | ✅ | |
macOS | ❌ | Prisma C-ABI not support |
Linux | ❌ | Prisma C-ABI not support |
Windows | ❌ | Prisma C-ABI not support |
Web | ❌ | No plans at the moment |
Database Support
Database | Support | Notes |
---|---|---|
Sqlite | ✅ | |
MySQL/MariaDB | ❌ | Prisma C-ABI not support |
PostgreSQL | ❌ | Prisma C-ABI not support |
MongoDB | ❌ | Prisma C-ABI not support |
Microsoft SQL Server | ❌ | Prisma C-ABI not support |
CockroachDB | ❌ | Prisma C-ABI not support |
Installation
你应该首先阅读安装文档,并按照orm
包的设置Prisma ORM进行操作。
现在,让我们安装orm_flutter
包,你可以使用命令行:
flutter pub add orm_flutter
或者编辑你的Flutter项目的pubspec.yaml
文件:
dependencies:
orm_flutter: latest
Integration
在你的Prisma模式(schema.prisma
)中将你的生成器引擎类型设置为flutter
:
generator client {
provider = "dart run orm"
output = "../lib/_generated_prisma_client"
engineType = "flutter" // [!code focus]
}
Migrations
与服务器端不同,在Flutter中,数据库通常不由你通过Prisma CLI在构建前处理。
Create Migration File
创建迁移文件可以使用以下命令之一:
::: code-group
bun prisma migrate dev
npx prisma migrate dev
pnpx prisma migrate dev
:::
默认情况下,它会创建在
prisma/migrations/
文件夹中。
Set Migration Files to Flutter Assets
现在,让我们编辑你的pubspec.yaml
:
flutter:
assets:
- prisma/migrations/ # Migrations root dir
- prisma/migrations/<dir>/ # Set first migration files dir
# ... More assets
每个使用
prisma migrate dev
命令生成的迁移文件夹都需要添加。
Run Migration
final engine = prisma.$engine as LibraryEngine;
await engine.applyMigrations(
path: 'prisma/migrations/', // You define in `flutter.assets` migrations root dir
);
除了使用
flutter.assets
,你可以自定义AssetBundle
来实现:await engine.applyMigrations( path: '<Your migration dir prefix>', bundle: <You custon bundle>, );
此外,
engine.applyMigrations
可能会抛出异常。这通常是由于你对迁移文件进行了破坏性更改,你应该自己处理这个问题。最常用的方法是在抛出异常后删除数据库文件,然后重新运行迁移。如果你是添加新的迁移,则几乎不会有问题。
Complete Integration Example
在这个示例中,我们将安装以下包:
我们将在<Application Support Directory>/database.sqlite
位置安装数据库,然后使用flutter.assets
来运行迁移
::: code-group
import 'package:flutter/widgets.dart';
import 'package:orm_flutter/orm_flutter.dart';
import 'package:path/path.dart';
import 'package:path_provider/path_provider.dart';
import '_generated_prisma_client/client.dart';
late final PrismaClient prisma;
Future<void> initPrismaClient() async {
WidgetsFlutterBinding.ensureInitialized();
final supportDir = await getApplicationSupportDirectory();
final database = join(supportDir.path, 'database.sqlite.db');
prisma = PrismaClient(datasourceUrl: 'file:$database');
final engine = switch (prisma.$engine) {
LibraryEngine engine => engine,
_ => null,
};
await prisma.$connect();
await engine?.applyMigrations(path: 'prisma/migrations');
}
import 'prisma.dart';
Future<void> main() async {
await initPrismaClient();
// ...
}
:::
Example App
我们为你提供了一个集成了Prisma ORM的Flutter demo App 👉 Flutter with ORM
FAQ
Error (Xcode): Undefined symbol: prisma_*
这是由于库编译失败引起的,即使你下载了新的修复版本,问题仍然存在。 解决方案:运行以下命令:
flutter clean
Other Unknown Error Solutions:
大多数问题可以通过以下命令组合解决:
flutter clean # 清理flutter缓存文件
flutter pub get # 重新安装依赖
<bun/npx/pnpx/yarn> prisma generate # 重新生成prisma客户端
更多关于Flutter对象关系映射插件orm_flutter的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter对象关系映射插件orm_flutter的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是一个关于如何使用Flutter对象关系映射插件 orm_flutter
的代码示例。这个示例展示了如何定义模型、配置数据库以及执行基本的CRUD(创建、读取、更新、删除)操作。
1. 添加依赖
首先,在你的 pubspec.yaml
文件中添加 orm_flutter
依赖:
dependencies:
flutter:
sdk: flutter
orm_flutter: ^最新版本号 # 请替换为最新版本号
2. 创建模型类
接下来,定义一个模型类。假设我们要创建一个 User
模型。
import 'package:orm_flutter/orm_flutter.dart';
@Entity()
class User extends Model {
@Column(primaryKey: true, autoGenerate: true)
int id;
@Column()
String name;
@Column()
int age;
User({this.name, this.age});
@override
String toString() {
return 'User{id: $id, name: $name, age: $age}';
}
}
3. 配置数据库
在你的应用入口(例如 main.dart
)中配置数据库。
import 'package:flutter/material.dart';
import 'package:orm_flutter/orm_flutter.dart';
import 'user_model.dart'; // 假设你的模型类文件名为 user_model.dart
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
// 配置数据库
DatabaseConfig dbConfig = DatabaseConfig(
databaseName: 'my_database.db',
version: 1,
);
// 注册模型
ORMFlutter.registerModel(User());
// 初始化数据库
ORMFlutter.initialize(dbConfig).then((database) {
// 数据库初始化完成后,你可以在这里启动你的应用
runZonedGuarded(() {
runApp(MaterialApp(
home: MyHomePage(),
));
}, (error, stackTrace) {
// 错误处理
print('Error: $error');
print('Stack Trace: $stackTrace');
});
});
return Container(); // 在数据库初始化完成前显示一个空的容器
}
}
class MyHomePage extends StatefulWidget {
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('ORM Flutter Demo'),
),
body: Center(
child: Text('Check the console for CRUD operations results'),
),
floatingActionButton: FloatingActionButton(
onPressed: () async {
// 示例:执行CRUD操作
await performCRUDOperations();
},
tooltip: 'Perform CRUD',
child: Icon(Icons.add),
),
);
}
Future<void> performCRUDOperations() async {
// 创建
User user = User(name: 'Alice', age: 30);
await user.save();
print('Created: $user');
// 读取
List<User> users = await User.findAll();
print('Read all: $users');
// 更新
User firstUser = users.first;
firstUser.age = 31;
await firstUser.save();
print('Updated: $firstUser');
// 删除
await firstUser.delete();
print('Deleted: ${firstUser.id}');
// 再次读取以验证删除
users = await User.findAll();
print('Read all after delete: $users');
}
}
4. 运行应用
确保你的开发环境已经配置好,然后运行你的Flutter应用。点击浮动操作按钮(FAB)来执行CRUD操作,并在控制台中查看结果。
这个示例展示了如何使用 orm_flutter
插件进行基本的数据库操作。根据你的具体需求,你可以进一步扩展这个示例,例如添加更多的模型、处理复杂的关系、执行更复杂的查询等。