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

Flutter自定义注解+build_runner无法生成user_dao.g.dart问题求助

问题解决:自定义注解+build_runner无法生成user_dao.g.dart

核心问题分析

从命令输出的警告Configuring database_generator:database_generator in target tao_bao:tao_bao but this is not a known Builder可以明确,自定义Builder未被正确注册,同时还有两个次要问题阻碍代码生成:

  • UserDao文件未声明part指令,无法关联生成的.g.dart文件
  • Generator中Query方法未处理参数,会导致生成代码逻辑错误

分步解决方案

1. 修正build.yaml配置

你的build.yaml缺少正确的Builder注册配置,替换为以下内容:

targets:
  $default:
    builders:
      tao_bao|database_generator:
        enabled: true

builders:
  database_generator:
    import: "package:tao_bao/db/database_generator.dart"
    builder_factories: ["databaseBuilder"]
    build_extensions: { ".dart": [".g.dart"] }
    auto_apply: dependents
    build_to: source
  • import指定Generator所在文件路径
  • builder_factories对应你定义的databaseBuilder工厂方法
  • build_extensions声明输入输出文件的后缀映射

2. 给UserDao添加part关联指令

在user_dao.dart开头添加part语句,让生成文件能和原文件建立关联:

import 'package:tao_bao/db/user_model.dart';
import 'database_annotations.dart';

// 添加这行代码
part 'user_dao.g.dart';

@Table('users')
class UserDao {
  // ... 原有方法代码
}

3. 修复Generator中Query方法的参数处理逻辑

原Generator生成的Query方法未处理入参,会导致findByUsername这类带参数的方法生成错误,修改generateQueryMethod方法:

String generateQueryMethod(MethodElement element, String sql) {
  final returnType = element.returnType;
  final params = element.parameters.map((p) => '${p.type} ${p.name}').join(', ');
  final paramList = element.parameters.map((p) => p.name).join(', ');

  return '''
  Future<$returnType> ${element.name}($params) async {
    final db = await dbHelper.database;
    final result = await db.rawQuery('$sql', [$paramList]);
    if (result.isNotEmpty) {
      return $returnType.fromMap(result.first);
    }
    return null;
  }
  ''';
}

4. 重新执行构建命令

先清理缓存再执行构建,避免遗留问题:

dart run build_runner clean
dart run build_runner build --delete-conflicting-outputs

验证结果

执行完命令后,lib/db目录下会生成user_dao.g.dart文件,包含自动生成的DAO实现代码。

内容的提问来源于stack exchange,提问作者vincent weng unknownparticles

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 01:40:59