如何运行`source_gen`?

时间:2017-05-15 12:58:53

标签: dart flutter

我目前正在尝试在我的Flutter项目中使用built_value,但我对我需要做的事感到困惑......

我在我的pubspec.yaml中添加了以下行(从示例项目中复制):

dev_dependencies:
  build: ^0.7.0
  build_runner: ^0.3.0
  built_value_generator: ^1.0.0

但是,到目前为止,没有任何事情发生......在this video demonstration中,您可以看到生成的代码在运行时更新/重新生成,而开发人员正在更改其代码。

我是否需要做任何其他事情来使代码生成工作?启动某种监视更改并触发代码生成的服务器?注册source_gen以便在某个时刻运行?

编辑:好的,现在我在tool文件夹旁边有一个lib文件夹。 tool文件夹同时包含build.dartwatch.dart,两者均已更改为与name:中的包pubspec.yaml匹配。 lib文件夹包含我从this tutorial复制的文件user.dart

library user;

import 'package:built_value/built_value.dart';

part 'user.g.dart';

abstract class User implements Built<User, UserBuilder> {
  String get name;

  @nullable
  String get nickname;

  User._();

  factory User([updates(UserBuilder b)]) = _$User;
}

我现在不应该在user.g.dart中看到包含生成代码的lib文件吗? glob模式没有问题,是吗?

编辑2:这是flutter --version的输出:

dmta@elite:~/flutter$ flutter --version
Flutter • channel master • https://github.com/flutter/flutter.git
Framework • revision e65d47d4ba (11 hours ago) • 2017-05-15 12:40:20 -0700
Engine • revision 7dd359e165
Tools • Dart 1.23.0-dev.11.11

1 个答案:

答案 0 :(得分:3)

您需要一个文件tool/build.dart来生成模型类

// Copyright (c) 2016, Google Inc. Please see the AUTHORS file for details.
// All rights reserved. Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

import 'dart:async';

import 'package:build_runner/build_runner.dart';
import 'package:built_value_generator/built_value_generator.dart';
import 'package:source_gen/source_gen.dart';

/// Build the generated files in the built_value chat example.
Future main(List<String> args) async {
  await build(
      new PhaseGroup.singleAction(
          new GeneratorBuilder([
            new BuiltValueGenerator(),
          ]),
          new InputSet('chat_example', const ['lib/**/*.dart'])),
      deleteFilesByDefault: true);
}

watch.dart文件也显示在https://github.com/google/built_value.dart/tree/master/chat_example/tool中,用于监视源文件中的更改,并在修改其中一个源文件时重新生成built_value模型类。