Skip to content

Commit 22b1c40

Browse files
authored
Merge pull request #40 from Onix-Systems/dev
Dev
2 parents 6a8df96 + dfd9903 commit 22b1c40

File tree

98 files changed

+5015
-170
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

98 files changed

+5015
-170
lines changed

installers/README.md

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
2+
3+
# Onix Flutter Project Generator
4+
5+
6+
## Creating DMG installer
7+
8+
Use following command:
9+
10+
`rm ‘release/Onix Flutter Project Generator.dmg’ && flutter clean && flutter build macos --release && appdmg installers/dmg_creator/config.json ‘release/Onix Flutter Project Generator.dmg’`
11+

lib/app/bloc/app_models.freezed.dart

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
//ignore: one_member_abstracts
2+
abstract class Mapper<T, E> {
3+
E map(T from);
4+
}
5+
6+
abstract class MapperIterable<T, E> extends Mapper<T, E> {
7+
Iterable<E> mapIterable(Iterable<T> from) {
8+
return from.map(map);
9+
}
10+
}

lib/core/di/repository.dart

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
import 'package:get_it/get_it.dart';
2+
import 'package:onix_flutter_bricks/data/repository/figma_repository_impl.dart';
3+
import 'package:onix_flutter_bricks/data/source/remote/figma/figma_remote_data_source.dart';
24
import 'package:onix_flutter_bricks/domain/repository/data_component_repository.dart';
35
import 'package:onix_flutter_bricks/data/repository/data_component_repository_impl.dart';
6+
import 'package:onix_flutter_bricks/domain/repository/figma_repository.dart';
47
import 'package:onix_flutter_bricks/domain/repository/screen_repository.dart';
58
import 'package:onix_flutter_bricks/data/repository/screen_repository_impl.dart';
69
import 'package:onix_flutter_bricks/domain/repository/source_repository.dart';
@@ -18,6 +21,11 @@ void registerRepositories(GetIt getIt) {
1821
)
1922
..registerSingleton<SourceRepository>(
2023
SourceRepositoryImpl(),
24+
)
25+
..registerLazySingleton<FigmaRepository>(
26+
() => FigmaRepositoryImpl(
27+
figmaRemoteDataSource: GetIt.I.get<FigmaRemoteDataSource>(),
28+
),
2129
); //{repositories end}
2230
}
2331

lib/core/di/services.dart

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import 'package:get_it/get_it.dart';
2+
import 'package:onix_flutter_bricks/domain/repository/figma_repository.dart';
23
import 'package:onix_flutter_bricks/domain/service/figma_service/figma_service.dart';
34
import 'package:onix_flutter_bricks/domain/service/file_generator_service/file_generator_service.dart';
45
import 'package:onix_flutter_bricks/domain/service/output_service/output_service.dart';
@@ -7,7 +8,11 @@ void registerServices(GetIt getIt) {
78
getIt
89
..registerSingleton<OutputService>(OutputService())
910
..registerSingleton<FileGeneratorService>(FileGeneratorService())
10-
..registerSingleton<FigmaService>(FigmaService());
11+
..registerLazySingleton<FigmaService>(
12+
() => FigmaService(
13+
figmaRepository: GetIt.I.get<FigmaRepository>(),
14+
),
15+
);
1116
}
1217

1318
OutputService get outputService => GetIt.I.get<OutputService>();

lib/core/di/source.dart

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,18 @@ import 'package:get_it/get_it.dart';
22

33
import 'package:onix_flutter_bricks/data/source/local/config_source/config_source.dart';
44
import 'package:onix_flutter_bricks/data/source/local/config_source/config_source_impl.dart';
5+
import 'package:onix_flutter_bricks/data/source/remote/figma/figma_remote_data_source.dart';
6+
import 'package:onix_flutter_bricks/data/source/remote/figma/figma_remote_source_impl.dart';
57

68
//{imports end}
79

810
void registerSources(GetIt getIt) {
9-
getIt.registerSingleton<ConfigSource>(ConfigSourceImpl()); //{sources end}
11+
getIt
12+
..registerSingleton<ConfigSource>(ConfigSourceImpl())
13+
..registerLazySingleton<FigmaRemoteDataSource>(
14+
() => const FigmaRemoteDataSourceImpl(),
15+
);
16+
//{sources end}
1017
}
1118

1219
ConfigSource get configSource => GetIt.I.get<ConfigSource>();
Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
import 'package:json_annotation/json_annotation.dart';
2+
import 'package:onix_flutter_bricks/data/model/figma/nodes/connector/connector_node_data_model.dart';
3+
import 'package:onix_flutter_bricks/data/model/figma/nodes/document/document_node_data_model.dart';
4+
import 'package:onix_flutter_bricks/data/model/figma/nodes/frame/frame_node_data_model.dart';
5+
import 'package:onix_flutter_bricks/data/model/figma/nodes/node/node_data_model.dart';
6+
import 'package:onix_flutter_bricks/data/model/figma/nodes/section/section_node_data_model.dart';
7+
import 'package:onix_flutter_bricks/data/model/figma/nodes/shape_with_text/shape_with_text_node_data_model.dart';
8+
import 'package:onix_flutter_bricks/data/model/figma/nodes/sticky/sticky_node_data_model.dart';
9+
import 'package:onix_flutter_bricks/data/model/figma/nodes/table_cell/table_cell_node_data_model.dart';
10+
import 'package:onix_flutter_bricks/data/model/figma/nodes/text/text_node_data_model.dart';
11+
import 'package:onix_flutter_bricks/data/model/figma/nodes/vector/vector_node_data_model.dart';
12+
13+
class FigmaNodeTypeConverter
14+
extends JsonConverter<NodeDataModel, Map<String, dynamic>> {
15+
const FigmaNodeTypeConverter();
16+
17+
@override
18+
NodeDataModel fromJson(Map<String, dynamic> json) {
19+
final type = json['type'];
20+
21+
switch (type) {
22+
case 'DOCUMENT':
23+
return DocumentNodeDataModel.fromJson(json);
24+
case 'FRAME':
25+
case 'COMPONENT':
26+
case 'COMPONENT_SET':
27+
case 'INSTANCE':
28+
case 'GROUP':
29+
return FrameNodeDataModel.fromJson(json);
30+
case 'SECTION':
31+
return SectionNodeDataModel.fromJson(json);
32+
case 'VECTOR':
33+
case 'BOOLEAN_OPERATION':
34+
case 'STAR':
35+
case 'LINE':
36+
case 'ELLIPSE':
37+
case 'REGULAR_POLYGON':
38+
case 'WASHI_TAPE':
39+
case 'RECTANGLE':
40+
return VectorNodeDataModel.fromJson(json);
41+
case 'TEXT':
42+
return TextNodeDataModel.fromJson(json);
43+
case 'TABLE_CELL':
44+
return TableCellNodeDataModel.fromJson(json);
45+
case 'STICKY':
46+
return StickyNodeDataModel.fromJson(json);
47+
case 'SHAPE_WITH_TEXT':
48+
return ShapeWithTextNodeDataModel.fromJson(json);
49+
case 'CONNECTOR':
50+
return ConnectorNodeDataModel.fromJson(json);
51+
default:
52+
return NodeDataModel.fromJson(json);
53+
}
54+
}
55+
56+
@override
57+
Map<String, dynamic> toJson(NodeDataModel object) {
58+
// TODO(Ivan Modlo): Implement it if necessary
59+
throw UnimplementedError();
60+
}
61+
}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
import 'package:json_annotation/json_annotation.dart';
2+
import 'package:onix_flutter_bricks/data/converter/figma/figma_node_type_converter.dart';
3+
import 'package:onix_flutter_bricks/data/model/figma/nodes/node/node_data_model.dart';
4+
5+
class FigmaNodesConverter
6+
extends JsonConverter<List<NodeDataModel>, Map<String, dynamic>> {
7+
const FigmaNodesConverter();
8+
9+
@override
10+
List<NodeDataModel> fromJson(Map<String, dynamic> json) {
11+
final list = json.values
12+
.map(
13+
(e) => const FigmaNodeTypeConverter().fromJson(
14+
(e as Map<String, dynamic>)['document'],
15+
),
16+
)
17+
.toList();
18+
19+
return list;
20+
}
21+
22+
@override
23+
Map<String, dynamic> toJson(List<NodeDataModel> object) {
24+
// TODO(Ivan Modlo): Implement it if necessary
25+
throw UnimplementedError();
26+
}
27+
}
Lines changed: 144 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,144 @@
1+
import 'package:onix_flutter_bricks/core/arch/domain/common/converter/mapper.dart';
2+
import 'package:onix_flutter_bricks/data/mapper/figma/properties_mapper.dart';
3+
import 'package:onix_flutter_bricks/data/model/figma/nodes/connector/connector_node_data_model.dart';
4+
import 'package:onix_flutter_bricks/data/model/figma/nodes/document/document_node_data_model.dart';
5+
import 'package:onix_flutter_bricks/data/model/figma/nodes/frame/frame_node_data_model.dart';
6+
import 'package:onix_flutter_bricks/data/model/figma/nodes/node/node_data_model.dart';
7+
import 'package:onix_flutter_bricks/data/model/figma/nodes/section/section_node_data_model.dart';
8+
import 'package:onix_flutter_bricks/data/model/figma/nodes/shape_with_text/shape_with_text_node_data_model.dart';
9+
import 'package:onix_flutter_bricks/data/model/figma/nodes/sticky/sticky_node_data_model.dart';
10+
import 'package:onix_flutter_bricks/data/model/figma/nodes/table_cell/table_cell_node_data_model.dart';
11+
import 'package:onix_flutter_bricks/data/model/figma/nodes/text/text_node_data_model.dart';
12+
import 'package:onix_flutter_bricks/data/model/figma/nodes/vector/vector_node_data_model.dart';
13+
import 'package:onix_flutter_bricks/data/model/figma/properties/paint/paint_property_data_model.dart';
14+
import 'package:onix_flutter_bricks/data/model/figma/properties/type_style/figma_type_style.dart';
15+
import 'package:onix_flutter_bricks/domain/entity/figma/nodes/connector_node/connector_node_entity.dart';
16+
import 'package:onix_flutter_bricks/domain/entity/figma/nodes/document_node/document_node_entity.dart';
17+
import 'package:onix_flutter_bricks/domain/entity/figma/nodes/frame_node/frame_node_entity.dart';
18+
import 'package:onix_flutter_bricks/domain/entity/figma/nodes/node/base_node.dart';
19+
import 'package:onix_flutter_bricks/domain/entity/figma/nodes/node/base_node_entity.dart';
20+
import 'package:onix_flutter_bricks/domain/entity/figma/nodes/section_node/section_node_entity.dart';
21+
import 'package:onix_flutter_bricks/domain/entity/figma/nodes/shape_with_text_node/shape_with_text_node_entity.dart';
22+
import 'package:onix_flutter_bricks/domain/entity/figma/nodes/sticky_node/sticky_node_entity.dart';
23+
import 'package:onix_flutter_bricks/domain/entity/figma/nodes/table_cell_node/table_cell_node_entity.dart';
24+
import 'package:onix_flutter_bricks/domain/entity/figma/nodes/text_node/text_node_entity.dart';
25+
import 'package:onix_flutter_bricks/domain/entity/figma/nodes/vector_node/vector_node_entity.dart';
26+
import 'package:onix_flutter_bricks/domain/entity/figma/properties/paint_property/paint_property.dart';
27+
28+
class FigmaNodesMapper {
29+
List<BaseNode> mapNodesDataModelToEntity(List<NodeDataModel> from) =>
30+
_MapNodeDataModelToEntity().mapIterable(from).toList();
31+
}
32+
33+
class _MapNodeDataModelToEntity
34+
extends MapperIterable<NodeDataModel, BaseNode> {
35+
@override
36+
BaseNode map(NodeDataModel from) {
37+
switch (from) {
38+
case (DocumentNodeDataModel _):
39+
return DocumentNodeEntity(
40+
id: from.id ?? '',
41+
key: from.key ?? '',
42+
name: from.name ?? '',
43+
type: from.type ?? '',
44+
// (Ivan Modlo): Maybe we should call the map method recursively
45+
children: from.children
46+
?.map(
47+
(e) => BaseNodeEntity(
48+
id: e?.id ?? '',
49+
key: e?.key ?? '',
50+
name: e?.name ?? '',
51+
type: e?.type ?? '',
52+
),
53+
)
54+
.toList() ??
55+
[],
56+
);
57+
case TextNodeDataModel _:
58+
return TextNodeEntity(
59+
id: from.id ?? '',
60+
key: from.key ?? '',
61+
name: from.name ?? '',
62+
type: from.type ?? '',
63+
fills: _mapPaintProperty(from.fills),
64+
style: PropertyMapper().mapFigmaTypeStyleDataModelToEntity(
65+
from.style ??
66+
const FigmaTypeStyle(
67+
fontFamily: '',
68+
fontWeight: 0,
69+
fontSize: 0,
70+
letterSpacing: 0,
71+
),
72+
),
73+
);
74+
case FrameNodeDataModel _:
75+
return FrameNodeEntity(
76+
id: from.id ?? '',
77+
key: from.key ?? '',
78+
name: from.name ?? '',
79+
type: from.type ?? '',
80+
fills: _mapPaintProperty(from.fills),
81+
);
82+
case SectionNodeDataModel _:
83+
return SectionNodeEntity(
84+
id: from.id ?? '',
85+
key: from.key ?? '',
86+
name: from.name ?? '',
87+
type: from.type ?? '',
88+
fills: _mapPaintProperty(from.fills),
89+
);
90+
case VectorNodeDataModel _:
91+
return VectorNodeEntity(
92+
id: from.id ?? '',
93+
key: from.key ?? '',
94+
name: from.name ?? '',
95+
type: from.type ?? '',
96+
fills: _mapPaintProperty(from.fills),
97+
);
98+
case TableCellNodeDataModel _:
99+
return TableCellNodeEntity(
100+
id: from.id ?? '',
101+
key: from.key ?? '',
102+
name: from.name ?? '',
103+
type: from.type ?? '',
104+
fills: _mapPaintProperty(from.fills),
105+
);
106+
107+
case StickyNodeDataModel _:
108+
return StickyNodeEntity(
109+
id: from.id ?? '',
110+
key: from.key ?? '',
111+
name: from.name ?? '',
112+
type: from.type ?? '',
113+
fills: _mapPaintProperty(from.fills),
114+
);
115+
116+
case ShapeWithTextNodeDataModel _:
117+
return ShapeWithTextNodeEntity(
118+
id: from.id ?? '',
119+
key: from.key ?? '',
120+
name: from.name ?? '',
121+
type: from.type ?? '',
122+
fills: _mapPaintProperty(from.fills),
123+
);
124+
case ConnectorNodeDataModel _:
125+
return ConnectorNodeEntity(
126+
id: from.id ?? '',
127+
key: from.key ?? '',
128+
name: from.name ?? '',
129+
type: from.type ?? '',
130+
fills: _mapPaintProperty(from.fills),
131+
);
132+
default:
133+
return BaseNodeEntity(
134+
id: from.id ?? '',
135+
key: from.key ?? '',
136+
name: from.name ?? '',
137+
type: from.type ?? '',
138+
);
139+
}
140+
}
141+
142+
List<PaintProperty> _mapPaintProperty(List<PaintPropertyDataModel>? from) =>
143+
PropertyMapper().mapPaintPropertyDataModelToEntity(from ?? []).toList();
144+
}

0 commit comments

Comments
 (0)