Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,7 @@
# Changelog
## [4.1.0] - 2021-02-22
### Added
- Support for generatic generics fromJsonT()

## [4.0.0] - 2021-02-09
### Added
Expand Down
17 changes: 17 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,23 @@ model_generator:
use_fvm: true
```

##Generics support support
If you want your models to generate code that can be used in combination with generics. use this:
```
model_generator:
generate_for_generics: true
```
or to override the default generate_for_generics value in the pubspec.yaml
```
UserModel:
path: webservice/user
generate_for_generics: true
converters:
- DateTimeConverter
properties:
id:
type: int
```
## Default setup
Example of the `model_generator/config.yaml` file
```
Expand Down
21 changes: 21 additions & 0 deletions example/lib/model/user/project/project.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
import 'package:json_annotation/json_annotation.dart';

part 'project.g.dart';

@JsonSerializable()
class Project {
@JsonKey(name: 'name', required: true)
final String name;
@JsonKey(name: 'cost')
final double? cost;

Project({
required this.name,
this.cost,
});

factory Project.fromJson(Object? json) =>
_$ProjectFromJson(json as Map<String, dynamic>); // ignore: avoid_as

Map<String, dynamic> toJson() => _$ProjectToJson(this);
}
20 changes: 20 additions & 0 deletions example/lib/model/user/project/project.g.dart

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

10 changes: 10 additions & 0 deletions example/model_generator/config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -140,6 +140,16 @@ DateTimeConverter:
type: json_converter
path: converter/

Project:
path: user/project/
type: object
generate_for_generics: true
properties:
name:
required: true
type: string
cost:
type: double



Expand Down
3 changes: 3 additions & 0 deletions lib/config/pubspec_config.dart
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ class PubspecConfig {
late String projectName;
late String baseDirectory;
late bool useFvm;
late bool generateForGenerics;
late String configPath;

PubspecConfig(String pubspecContent) {
Expand All @@ -28,13 +29,15 @@ class PubspecConfig {
final config = doc['model_generator'];
if (config == null) {
baseDirectory = _DEFAULT_BASE_DIRECTORY;
generateForGenerics = false;
useFvm = false;
configPath = _DEFAULT_CONFIG_PATH;
return;
}

baseDirectory = config['base_directory'] ?? _DEFAULT_BASE_DIRECTORY;
useFvm = config['use_fvm'] == true;
generateForGenerics = (config['generate_for_generics'] ?? false) == true;
configPath = config['config_path'] ?? _DEFAULT_CONFIG_PATH;
}
}
3 changes: 3 additions & 0 deletions lib/config/yml_generator_config.dart
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,8 @@ class YmlGeneratorConfig {
final String baseDirectory =
value['base_directory'] ?? pubspecConfig.baseDirectory;
final String? path = value['path'];
final bool generateForGenerics =
value['generate_for_generics'] ?? pubspecConfig.generateForGenerics;
final dynamic properties = value['properties'];
final YamlList? converters = value['converters'];
final String? type = value['type'];
Expand Down Expand Up @@ -83,6 +85,7 @@ class YmlGeneratorConfig {
name: key,
path: path,
baseDirectory: baseDirectory,
generateForGenerics: generateForGenerics,
fields: fields,
converters: mappedConverters ?? [],
));
Expand Down
2 changes: 2 additions & 0 deletions lib/model/model/object_model.dart
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,15 @@ import 'package:model_generator/model/field.dart';
import 'package:model_generator/model/model/model.dart';

class ObjectModel extends Model {
final bool generateForGenerics;
final List<Field> fields;
final List<String> converters;

ObjectModel({
required String name,
required String? path,
required String? baseDirectory,
required this.generateForGenerics,
required this.fields,
required this.converters,
}) : super(name: name, path: path, baseDirectory: baseDirectory);
Expand Down
12 changes: 8 additions & 4 deletions lib/writer/object_model_writer.dart
Original file line number Diff line number Diff line change
Expand Up @@ -95,11 +95,15 @@ class ObjectModelWriter {
sb.writeln(' this.${key.name},');
}
});
sb..writeln(' });')..writeln();
if (jsonModel.generateForGenerics) {
sb.writeln(
' factory ${jsonModel.name}.fromJson(Object? json) => _\$${jsonModel.name}FromJson(json as Map<String, dynamic>); // ignore: avoid_as');
} else {
sb.writeln(
' factory ${jsonModel.name}.fromJson(Map<String, dynamic> json) => _\$${jsonModel.name}FromJson(json);');
}
sb
..writeln(' });')
..writeln()
..writeln(
' factory ${jsonModel.name}.fromJson(Map<String, dynamic> json) => _\$${jsonModel.name}FromJson(json);')
..writeln()
..writeln(
' Map<String, dynamic> toJson() => _\$${jsonModel.name}ToJson(this);')
Expand Down
5 changes: 2 additions & 3 deletions pubspec.yaml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
name: model_generator
description: Dart tool to automaticly generate models from a yml file to speed up your development flow.
version: 4.0.0
version: 4.1.0
homepage: https://github.com/icapps/flutter-model-generator

environment:
Expand All @@ -14,5 +14,4 @@ dependencies:

dev_dependencies:
flutter_test:
sdk: flutter
test: ^1.16.5
sdk: flutter
2 changes: 1 addition & 1 deletion test/config/pubspec_config_test.dart
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import 'dart:io';

import 'package:flutter_test/flutter_test.dart';
import 'package:model_generator/config/pubspec_config.dart';
import 'package:test/test.dart';

import 'config_test_helper.dart';

Expand Down
2 changes: 1 addition & 1 deletion test/config/yml_generator_config_test.dart
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
import 'package:flutter_test/flutter_test.dart';
import 'package:model_generator/config/pubspec_config.dart';
import 'package:model_generator/config/yml_generator_config.dart';
import 'package:model_generator/model/item_type/object_type.dart';
import 'package:model_generator/model/model/custom_model.dart';
import 'package:model_generator/model/model/enum_model.dart';
import 'package:model_generator/model/model/object_model.dart';
import 'package:test/test.dart';

import 'config_test_helper.dart';

Expand Down
2 changes: 1 addition & 1 deletion test/model/field_test.dart
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import 'package:model_generator/model/field.dart';
import 'package:model_generator/model/item_type/string_type.dart';
import 'package:test/test.dart';
import 'package:flutter_test/flutter_test.dart';

void main() {
group('Default', () {
Expand Down
2 changes: 1 addition & 1 deletion test/model/item_type/array_type_test.dart
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import 'package:model_generator/model/item_type/array_type.dart';
import 'package:test/test.dart';
import 'package:flutter_test/flutter_test.dart';

void main() {
group('Array Type', () {
Expand Down
2 changes: 1 addition & 1 deletion test/model/item_type/bool_type_test.dart
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import 'package:model_generator/model/item_type/boolean_type.dart';
import 'package:test/test.dart';
import 'package:flutter_test/flutter_test.dart';

void main() {
group('BooleanType', () {
Expand Down
2 changes: 1 addition & 1 deletion test/model/item_type/date_time_type_test.dart
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import 'package:model_generator/model/item_type/date_time_type.dart';
import 'package:test/test.dart';
import 'package:flutter_test/flutter_test.dart';

void main() {
group('DateTimeType', () {
Expand Down
2 changes: 1 addition & 1 deletion test/model/item_type/double_type_test.dart
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import 'package:model_generator/model/item_type/double_type.dart';
import 'package:test/test.dart';
import 'package:flutter_test/flutter_test.dart';

void main() {
group('DoubleType', () {
Expand Down
2 changes: 1 addition & 1 deletion test/model/item_type/dynamic_type_test.dart
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import 'package:model_generator/model/item_type/dynamic_type.dart';
import 'package:test/test.dart';
import 'package:flutter_test/flutter_test.dart';

void main() {
group('DynamicType', () {
Expand Down
2 changes: 1 addition & 1 deletion test/model/item_type/integer_type_test.dart
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import 'package:model_generator/model/item_type/integer_type.dart';
import 'package:test/test.dart';
import 'package:flutter_test/flutter_test.dart';

void main() {
group('IntegerType', () {
Expand Down
2 changes: 1 addition & 1 deletion test/model/item_type/object_type_test.dart
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import 'package:model_generator/model/item_type/object_type.dart';
import 'package:test/test.dart';
import 'package:flutter_test/flutter_test.dart';

void main() {
group('ObjectType', () {
Expand Down
2 changes: 1 addition & 1 deletion test/model/item_type/string_type_test.dart
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import 'package:model_generator/model/item_type/string_type.dart';
import 'package:test/test.dart';
import 'package:flutter_test/flutter_test.dart';

void main() {
group('String Type', () {
Expand Down
2 changes: 1 addition & 1 deletion test/model/model/custom_from_to_json_model_test.dart
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import 'package:model_generator/model/model/custom_from_to_json_model.dart';
import 'package:test/test.dart';
import 'package:flutter_test/flutter_test.dart';

void main() {
group('Default', () {
Expand Down
2 changes: 1 addition & 1 deletion test/model/model/custom_model_test.dart
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import 'package:model_generator/model/model/custom_model.dart';
import 'package:test/test.dart';
import 'package:flutter_test/flutter_test.dart';

void main() {
group('Default', () {
Expand Down
2 changes: 1 addition & 1 deletion test/model/model/enum_model_test.dart
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import 'package:model_generator/model/model/enum_model.dart';
import 'package:test/test.dart';
import 'package:flutter_test/flutter_test.dart';

void main() {
group('EnumModel', () {
Expand Down
2 changes: 1 addition & 1 deletion test/model/model/json_converter_model_test.dart
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import 'package:model_generator/model/model/json_converter_model.dart';
import 'package:test/test.dart';
import 'package:flutter_test/flutter_test.dart';

void main() {
group('Default', () {
Expand Down
8 changes: 7 additions & 1 deletion test/model/model/model_test.dart
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import 'package:model_generator/model/model/object_model.dart';
import 'package:test/test.dart';
import 'package:flutter_test/flutter_test.dart';

void main() {
group('Default', () {
Expand All @@ -8,12 +8,14 @@ void main() {
name: 'MyModel',
path: 'path_to_my_model',
baseDirectory: 'base_dir',
generateForGenerics: true,
fields: [],
converters: [],
);
expect(model.name, 'MyModel');
expect(model.path, 'path_to_my_model');
expect(model.baseDirectory, 'base_dir');
expect(model.generateForGenerics, true);
expect(model.fields.isEmpty, true);
expect(model.converters.isEmpty, true);
});
Expand All @@ -24,12 +26,14 @@ void main() {
name: 'MyModel',
path: 'path_to_my_model/',
baseDirectory: 'base_dir',
generateForGenerics: true,
fields: [],
converters: [],
);
expect(model.name, 'MyModel');
expect(model.path, 'path_to_my_model');
expect(model.baseDirectory, 'base_dir');
expect(model.generateForGenerics, true);
expect(model.fields.isEmpty, true);
expect(model.converters.isEmpty, true);
});
Expand All @@ -39,12 +43,14 @@ void main() {
name: 'MyModel',
path: 'path_to_my_model',
baseDirectory: 'base_dir/',
generateForGenerics: true,
fields: [],
converters: [],
);
expect(model.name, 'MyModel');
expect(model.path, 'path_to_my_model');
expect(model.baseDirectory, 'base_dir');
expect(model.generateForGenerics, true);
expect(model.fields.isEmpty, true);
expect(model.converters.isEmpty, true);
});
Expand Down
2 changes: 1 addition & 1 deletion test/util/case_util_test.dart
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import 'package:model_generator/util/case_util.dart';
import 'package:test/test.dart';
import 'package:flutter_test/flutter_test.dart';

void main() {
group('Default', () {
Expand Down
2 changes: 1 addition & 1 deletion test/util/keyword_helper_test.dart
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import 'package:model_generator/util/keyword_helper.dart';
import 'package:test/test.dart';
import 'package:flutter_test/flutter_test.dart';

void main() {
group('Default', () {
Expand Down
2 changes: 1 addition & 1 deletion test/util/type_checker_test.dart
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import 'package:model_generator/util/type_checker.dart';
import 'package:test/test.dart';
import 'package:flutter_test/flutter_test.dart';

void main() {
group('String', () {
Expand Down
2 changes: 1 addition & 1 deletion test/writer/enum_model_writer_test.dart
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import 'package:model_generator/model/model/enum_model.dart';
import 'package:test/test.dart';
import 'package:flutter_test/flutter_test.dart';

import 'writer_test_helper.dart';

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
Person:
path: user/person/
type: object
generate_for_generics: false
properties:
firstName:
required: true
type: string
Loading