google / google/built_value.dart
non-instantiable Builders can't be used as Builder attributes
- Dominant language
- Dart
- Stars
- 886
- Forks
- 195
- Avg merge
- 1d 11h
- Merged PRs (30d)
- 4
Description
The following fails due to the `NamedBuilder named` attribute on the builder, probably because non-instantiable builders aren't really `Builders`:
```
[SEVERE] built_value_generator:built_value on lib/graphql/temp.dart:
Error in BuiltValueGenerator for abstract class Container implements Built.
Please make the following changes to use BuiltValue:
1. Make builder have exactly these fields: named
```
Source:
```dart
import 'package:meta/meta.dart';
import 'package:built_collection/built_collection.dart';
import 'package:built_value/built_value.dart';
part 'temp.g.dart';
@BuiltValue(instantiable: false)
abstract class Named {
@nullable
String get name;
Named rebuild(void Function(NamedBuilder) updates);
NamedBuilder toBuilder();
}
/// Exposes the name attribute of [Named]
abstract class Container implements Built {
Container._();
factory Container([void Function(ContainerBuilder) updates]) = _$Container;
Named get named;
}
abstract class ContainerBuilder
implements Builder {
factory ContainerBuilder() = _$ContainerBuilder;
ContainerBuilder._();
NamedBuilder named;
// Named named; // works just fine
}
```
relevant pubspec:
```yaml
dependencies:
built_collection: ^4.3.2
built_value: ^7.0.9
built_value_generator: ^7.0.9
build: ^1.2.2
dev_dependencies:
build_runner: ^1.7.4
build_test:
```
Contributor guide
Assessment
This issue has not been assessed yet.