You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Drift包多文件编写表与查询遇报错的解决方案咨询

问题解决方案

1. 关于Drift文件分离表与查询的可行性

完全可以将表定义和SQL查询都放在drift文件中,不需要必须在Dart代码里编写查询。你的问题出在drift文件的导入方式和循环依赖上。

修复查询文件的表找不到问题

你的local_queries.drift(注意你代码里AuthDao引用的是local_auth_queries.drift,请确保文件名完全一致)错误导入了Dart文件,drift文件之间需要通过相对路径导入其他drift文件来共享表定义:

-- local_auth_queries.drift
-- 用相对路径导入定义表的drift文件,示例为同一目录下的情况
import 'create_tables.drift';

saveUser: INSERT INTO Users (id, created_at, first_name, last_name, user_name, email_address) VALUES (:id, :created_at, :first_name, :last_name, :user_name, :email_address);

2. 修复AuthDao的表读取错误

解决循环导入问题

你的local_database.dart导入了auth_queries.dart,而auth_queries.dart又导入了local_database.dart,这会形成循环依赖,导致Drift生成器无法正确处理表与DAO的关联。删掉local_database.dart中的以下导入语句:

import 'package:myapp/global/services/auth_queries.dart';

@DriftDatabase的daos参数仅需DAO类名,无需提前导入,生成器会自动定位到对应的DAO类。

确保表类可访问

Drift会根据create_tables.drift在local_database.g.dart中生成Users表类,你在auth_queries.dart中导入local_database.dart后,就能直接使用Users类——因为part 'local_database.g.dart'会将生成的表类纳入主数据库文件的作用域。

检查文件名一致性

确认AuthDao的@DriftAccessor中include的文件名与实际查询文件名完全匹配,比如你代码里写的是{'local_auth_queries.drift'},但提供的查询文件是local_queries.drift,需统一为同一个文件名。

最后步骤

修改完成后,重新运行Drift生成命令(如dart run build_runner build),生成最新的.g.dart文件,相关错误即可解决。

内容的提问来源于stack exchange,提问作者MKJ

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 21:57:04