From 4facfb87f5484799c95959221822d02cc098c8e6 Mon Sep 17 00:00:00 2001 From: Bryan Figueroa Date: Mon, 1 Feb 2021 19:19:39 -0700 Subject: [PATCH 01/23] Fixed issue where SymbolMasters were detected as screens --- lib/input/helper/design_screen.dart | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/lib/input/helper/design_screen.dart b/lib/input/helper/design_screen.dart index 4ea460f2..6b75150f 100644 --- a/lib/input/helper/design_screen.dart +++ b/lib/input/helper/design_screen.dart @@ -16,13 +16,18 @@ class DesignScreen implements DesignNodeFactory { DesignNode designNode, this.id, this.name, + this.type, }) { this.designNode = designNode; } Map toPBDF() { var result = {}; - result['pbdfType'] = pbdfType; + if (this.type == 'symbolMaster') { + result['pbdfType'] = 'symbol_master'; + } else { + result['pbdfType'] = pbdfType; + } result['id'] = id; result['name'] = name; result['convert'] = convert; From 8d45077908f2c5c20809e5e763b8ad989f57b967 Mon Sep 17 00:00:00 2001 From: Bryan Figueroa Date: Mon, 1 Feb 2021 19:20:52 -0700 Subject: [PATCH 02/23] Same as above --- lib/input/sketch/helper/sketch_project.dart | 2 ++ lib/input/sketch/helper/sketch_screen.dart | 2 ++ 2 files changed, 4 insertions(+) diff --git a/lib/input/sketch/helper/sketch_project.dart b/lib/input/sketch/helper/sketch_project.dart index 0e8cef15..92152e35 100644 --- a/lib/input/sketch/helper/sketch_project.dart +++ b/lib/input/sketch/helper/sketch_project.dart @@ -79,6 +79,7 @@ class SketchProject extends DesignProject { layer.originalMaster, layer.UUID, '', + layer.originalMaster.type, )); } return pg; @@ -109,6 +110,7 @@ class SketchProject extends DesignProject { layer, layer.UUID, layer.name, + layer.type, )); } sketchPages.add(pg); diff --git a/lib/input/sketch/helper/sketch_screen.dart b/lib/input/sketch/helper/sketch_screen.dart index 8810592b..6ea044c1 100644 --- a/lib/input/sketch/helper/sketch_screen.dart +++ b/lib/input/sketch/helper/sketch_screen.dart @@ -6,9 +6,11 @@ class SketchScreen extends DesignScreen { DesignNode root, String id, String name, + String type, ) : super( designNode: root, id: id, name: name, + type: type, ); } From f9f44116e892376dd31d6d5561b3a8017b8a54a8 Mon Sep 17 00:00:00 2001 From: Bryan Figueroa Date: Mon, 1 Feb 2021 19:21:02 -0700 Subject: [PATCH 03/23] Added this. to needed fields --- lib/design_logic/boolean_operation.dart | 2 +- lib/design_logic/group_node.dart | 7 +- .../pb_shared_instance_design_node.dart | 6 +- lib/design_logic/pb_shared_master_node.dart | 90 ++++++++++--------- lib/design_logic/pb_style.dart | 15 +++- lib/design_logic/rectangle.dart | 14 +-- 6 files changed, 78 insertions(+), 56 deletions(-) diff --git a/lib/design_logic/boolean_operation.dart b/lib/design_logic/boolean_operation.dart index 26c364d4..f49d1787 100644 --- a/lib/design_logic/boolean_operation.dart +++ b/lib/design_logic/boolean_operation.dart @@ -24,7 +24,7 @@ class BooleanOperation implements DesignNodeFactory, DesignNode { type, Frame this.boundaryRectangle, String UUID, - String name, + String this.name, bool isVisible, pbdfType, }); diff --git a/lib/design_logic/group_node.dart b/lib/design_logic/group_node.dart index 6fa96109..31f9248c 100644 --- a/lib/design_logic/group_node.dart +++ b/lib/design_logic/group_node.dart @@ -77,8 +77,11 @@ class GroupNode implements DesignNodeFactory, DesignNode { ..type = json['type'] as String; if (json.containsKey('children')) { if (json['children'] != null) { - node.children - .add(DesignNode.fromPBDF(json['children'] as Map)); + var child = + DesignNode.fromPBDF(json['children'] as Map); + if (child != null) { + node.children.add(child); + } } } return node; diff --git a/lib/design_logic/pb_shared_instance_design_node.dart b/lib/design_logic/pb_shared_instance_design_node.dart index d858287d..3fa5ab60 100644 --- a/lib/design_logic/pb_shared_instance_design_node.dart +++ b/lib/design_logic/pb_shared_instance_design_node.dart @@ -44,9 +44,11 @@ class PBSharedInstanceDesignNode extends DesignNode String symbolID, num verticalSpacing, num horizontalSpacing, - pbdfType}) + this.pbdfType}) : super(UUID, name, isVisible, boundaryRectangle, type, style, - prototypeNode); + prototypeNode) { + pbdfType = 'symbol_instance'; + } @override String pbdfType = 'symbol_instance'; diff --git a/lib/design_logic/pb_shared_master_node.dart b/lib/design_logic/pb_shared_master_node.dart index cddd22ce..b550d3df 100644 --- a/lib/design_logic/pb_shared_master_node.dart +++ b/lib/design_logic/pb_shared_master_node.dart @@ -18,50 +18,52 @@ class PBSharedMasterDesignNode extends DesignNode var overrideProperties; - PBSharedMasterDesignNode( - {String UUID, - this.overrideProperties, - String name, - bool isVisible, - boundaryRectangle, - String type, - style, - prototypeNode, - bool hasClickThrough, - groupLayout, - booleanOperation, - exportOptions, - isFixedToViewport, - isFlippedHorizontal, - isFlippedVertical, - isLocked, - layerListExpandedType, - pbdfType, - presetDictionary, - bool allowsOverrides, - nameIsFixed, - resizingConstraint, - resizingType, - horizontalRulerData, - bool hasBackgroundColor, - rotation, - sharedStyleID, - shouldBreakMaskChain, - hasClippingMask, - clippingMaskMode, - userInfo, - maintainScrollPosition, - bool includeBackgroundColorInExport, - int changeIdentifier, - String symbolID, - bool includeBackgroundColorInInstance, - verticalRulerData, - bool resizesContent, - bool includeInCloudUpload, - bool isFlowHome, - List parameters}) - : super(UUID, name, isVisible, boundaryRectangle, type, style, - prototypeNode); + PBSharedMasterDesignNode({ + String UUID, + this.overrideProperties, + String name, + bool isVisible, + boundaryRectangle, + String type, + style, + prototypeNode, + bool hasClickThrough, + groupLayout, + booleanOperation, + exportOptions, + isFixedToViewport, + isFlippedHorizontal, + isFlippedVertical, + isLocked, + layerListExpandedType, + this.pbdfType, + presetDictionary, + bool allowsOverrides, + nameIsFixed, + resizingConstraint, + resizingType, + horizontalRulerData, + bool hasBackgroundColor, + rotation, + sharedStyleID, + shouldBreakMaskChain, + hasClippingMask, + clippingMaskMode, + userInfo, + maintainScrollPosition, + bool includeBackgroundColorInExport, + int changeIdentifier, + String this.symbolID, + bool includeBackgroundColorInInstance, + verticalRulerData, + bool resizesContent, + bool includeInCloudUpload, + bool isFlowHome, + List parameters, + }) : super(UUID, name, isVisible, boundaryRectangle, type, style, + prototypeNode) { + pbdfType = 'symbol_master'; + } @override String pbdfType = 'symbol_master'; diff --git a/lib/design_logic/pb_style.dart b/lib/design_logic/pb_style.dart index 3a488691..fcb5bc0e 100644 --- a/lib/design_logic/pb_style.dart +++ b/lib/design_logic/pb_style.dart @@ -3,8 +3,10 @@ import 'package:parabeac_core/design_logic/pb_fill.dart'; import 'package:parabeac_core/design_logic/pb_text_style.dart'; import 'package:parabeac_core/design_logic/pb_border.dart'; import 'package:parabeac_core/design_logic/pb_border_options.dart'; +import 'package:parabeac_core/input/figma/entities/style/figma_style.dart'; +import 'package:parabeac_core/input/sketch/entities/style/style.dart'; -abstract class PBStyle { +class PBStyle { PBColor backgroundColor; List fills; List borders; @@ -12,5 +14,14 @@ abstract class PBStyle { PBTextStyle textStyle; PBStyle({this.fills, this.backgroundColor}); - Map toJson(); + + // toPBDF() {} + + factory PBStyle.fromPBDF(Map json) { + if (json.containsKey('_class')) { + return Style.fromJson(json); + } else { + return FigmaStyle.fromJson(json); + } + } } diff --git a/lib/design_logic/rectangle.dart b/lib/design_logic/rectangle.dart index b5cb4a47..c9ba6dd6 100644 --- a/lib/design_logic/rectangle.dart +++ b/lib/design_logic/rectangle.dart @@ -29,7 +29,7 @@ class Rectangle with PBColorMixin implements DesignNodeFactory, DesignNode { bool edited, bool isClosed, pointRadiusBehaviour, - List points, + List this.points, this.UUID, booleanOperation, exportOptions, @@ -38,9 +38,9 @@ class Rectangle with PBColorMixin implements DesignNodeFactory, DesignNode { isFlippedHorizontal, isFlippedVertical, isLocked, - isVisible, + this.isVisible, layerListExpandedType, - name, + this.name, nameIsFixed, resizingConstraint, resizingType, @@ -51,8 +51,9 @@ class Rectangle with PBColorMixin implements DesignNodeFactory, DesignNode { clippingMaskMode, userInfo, maintainScrollPosition, - type, - pbdfType, + this.type, + this.pbdfType, + this.style, }); @override @@ -94,6 +95,9 @@ class Rectangle with PBColorMixin implements DesignNodeFactory, DesignNode { type: json['type'] as String, maintainScrollPosition: json['maintainScrollPosition'], pbdfType: json['pbdfType'], + style: json['style'] == null + ? null + : PBStyle.fromPBDF(json['style'] as Map), ); } From 1843743a5f37237a4b3133ee950c2b301edce471 Mon Sep 17 00:00:00 2001 From: Bryan Figueroa Date: Mon, 1 Feb 2021 19:19:39 -0700 Subject: [PATCH 04/23] Fixed issue where SymbolMasters were detected as screens --- lib/input/helper/design_screen.dart | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/lib/input/helper/design_screen.dart b/lib/input/helper/design_screen.dart index 4ea460f2..6b75150f 100644 --- a/lib/input/helper/design_screen.dart +++ b/lib/input/helper/design_screen.dart @@ -16,13 +16,18 @@ class DesignScreen implements DesignNodeFactory { DesignNode designNode, this.id, this.name, + this.type, }) { this.designNode = designNode; } Map toPBDF() { var result = {}; - result['pbdfType'] = pbdfType; + if (this.type == 'symbolMaster') { + result['pbdfType'] = 'symbol_master'; + } else { + result['pbdfType'] = pbdfType; + } result['id'] = id; result['name'] = name; result['convert'] = convert; From 88c6e054fd69c52c2672b87a18f3d74e75defd0d Mon Sep 17 00:00:00 2001 From: Bryan Figueroa Date: Mon, 1 Feb 2021 19:20:52 -0700 Subject: [PATCH 05/23] Same as above --- lib/input/sketch/helper/sketch_project.dart | 2 ++ lib/input/sketch/helper/sketch_screen.dart | 2 ++ 2 files changed, 4 insertions(+) diff --git a/lib/input/sketch/helper/sketch_project.dart b/lib/input/sketch/helper/sketch_project.dart index 0e8cef15..92152e35 100644 --- a/lib/input/sketch/helper/sketch_project.dart +++ b/lib/input/sketch/helper/sketch_project.dart @@ -79,6 +79,7 @@ class SketchProject extends DesignProject { layer.originalMaster, layer.UUID, '', + layer.originalMaster.type, )); } return pg; @@ -109,6 +110,7 @@ class SketchProject extends DesignProject { layer, layer.UUID, layer.name, + layer.type, )); } sketchPages.add(pg); diff --git a/lib/input/sketch/helper/sketch_screen.dart b/lib/input/sketch/helper/sketch_screen.dart index 8810592b..6ea044c1 100644 --- a/lib/input/sketch/helper/sketch_screen.dart +++ b/lib/input/sketch/helper/sketch_screen.dart @@ -6,9 +6,11 @@ class SketchScreen extends DesignScreen { DesignNode root, String id, String name, + String type, ) : super( designNode: root, id: id, name: name, + type: type, ); } From def5266b7a028229cf18b91686c130245aaaf0e3 Mon Sep 17 00:00:00 2001 From: Bryan Figueroa Date: Mon, 1 Feb 2021 19:21:02 -0700 Subject: [PATCH 06/23] Added this. to needed fields --- lib/design_logic/boolean_operation.dart | 2 +- lib/design_logic/group_node.dart | 7 +- .../pb_shared_instance_design_node.dart | 6 +- lib/design_logic/pb_shared_master_node.dart | 90 ++++++++++--------- lib/design_logic/pb_style.dart | 15 +++- lib/design_logic/rectangle.dart | 14 +-- 6 files changed, 78 insertions(+), 56 deletions(-) diff --git a/lib/design_logic/boolean_operation.dart b/lib/design_logic/boolean_operation.dart index 26c364d4..f49d1787 100644 --- a/lib/design_logic/boolean_operation.dart +++ b/lib/design_logic/boolean_operation.dart @@ -24,7 +24,7 @@ class BooleanOperation implements DesignNodeFactory, DesignNode { type, Frame this.boundaryRectangle, String UUID, - String name, + String this.name, bool isVisible, pbdfType, }); diff --git a/lib/design_logic/group_node.dart b/lib/design_logic/group_node.dart index 6fa96109..31f9248c 100644 --- a/lib/design_logic/group_node.dart +++ b/lib/design_logic/group_node.dart @@ -77,8 +77,11 @@ class GroupNode implements DesignNodeFactory, DesignNode { ..type = json['type'] as String; if (json.containsKey('children')) { if (json['children'] != null) { - node.children - .add(DesignNode.fromPBDF(json['children'] as Map)); + var child = + DesignNode.fromPBDF(json['children'] as Map); + if (child != null) { + node.children.add(child); + } } } return node; diff --git a/lib/design_logic/pb_shared_instance_design_node.dart b/lib/design_logic/pb_shared_instance_design_node.dart index d858287d..3fa5ab60 100644 --- a/lib/design_logic/pb_shared_instance_design_node.dart +++ b/lib/design_logic/pb_shared_instance_design_node.dart @@ -44,9 +44,11 @@ class PBSharedInstanceDesignNode extends DesignNode String symbolID, num verticalSpacing, num horizontalSpacing, - pbdfType}) + this.pbdfType}) : super(UUID, name, isVisible, boundaryRectangle, type, style, - prototypeNode); + prototypeNode) { + pbdfType = 'symbol_instance'; + } @override String pbdfType = 'symbol_instance'; diff --git a/lib/design_logic/pb_shared_master_node.dart b/lib/design_logic/pb_shared_master_node.dart index cddd22ce..b550d3df 100644 --- a/lib/design_logic/pb_shared_master_node.dart +++ b/lib/design_logic/pb_shared_master_node.dart @@ -18,50 +18,52 @@ class PBSharedMasterDesignNode extends DesignNode var overrideProperties; - PBSharedMasterDesignNode( - {String UUID, - this.overrideProperties, - String name, - bool isVisible, - boundaryRectangle, - String type, - style, - prototypeNode, - bool hasClickThrough, - groupLayout, - booleanOperation, - exportOptions, - isFixedToViewport, - isFlippedHorizontal, - isFlippedVertical, - isLocked, - layerListExpandedType, - pbdfType, - presetDictionary, - bool allowsOverrides, - nameIsFixed, - resizingConstraint, - resizingType, - horizontalRulerData, - bool hasBackgroundColor, - rotation, - sharedStyleID, - shouldBreakMaskChain, - hasClippingMask, - clippingMaskMode, - userInfo, - maintainScrollPosition, - bool includeBackgroundColorInExport, - int changeIdentifier, - String symbolID, - bool includeBackgroundColorInInstance, - verticalRulerData, - bool resizesContent, - bool includeInCloudUpload, - bool isFlowHome, - List parameters}) - : super(UUID, name, isVisible, boundaryRectangle, type, style, - prototypeNode); + PBSharedMasterDesignNode({ + String UUID, + this.overrideProperties, + String name, + bool isVisible, + boundaryRectangle, + String type, + style, + prototypeNode, + bool hasClickThrough, + groupLayout, + booleanOperation, + exportOptions, + isFixedToViewport, + isFlippedHorizontal, + isFlippedVertical, + isLocked, + layerListExpandedType, + this.pbdfType, + presetDictionary, + bool allowsOverrides, + nameIsFixed, + resizingConstraint, + resizingType, + horizontalRulerData, + bool hasBackgroundColor, + rotation, + sharedStyleID, + shouldBreakMaskChain, + hasClippingMask, + clippingMaskMode, + userInfo, + maintainScrollPosition, + bool includeBackgroundColorInExport, + int changeIdentifier, + String this.symbolID, + bool includeBackgroundColorInInstance, + verticalRulerData, + bool resizesContent, + bool includeInCloudUpload, + bool isFlowHome, + List parameters, + }) : super(UUID, name, isVisible, boundaryRectangle, type, style, + prototypeNode) { + pbdfType = 'symbol_master'; + } @override String pbdfType = 'symbol_master'; diff --git a/lib/design_logic/pb_style.dart b/lib/design_logic/pb_style.dart index 3a488691..fcb5bc0e 100644 --- a/lib/design_logic/pb_style.dart +++ b/lib/design_logic/pb_style.dart @@ -3,8 +3,10 @@ import 'package:parabeac_core/design_logic/pb_fill.dart'; import 'package:parabeac_core/design_logic/pb_text_style.dart'; import 'package:parabeac_core/design_logic/pb_border.dart'; import 'package:parabeac_core/design_logic/pb_border_options.dart'; +import 'package:parabeac_core/input/figma/entities/style/figma_style.dart'; +import 'package:parabeac_core/input/sketch/entities/style/style.dart'; -abstract class PBStyle { +class PBStyle { PBColor backgroundColor; List fills; List borders; @@ -12,5 +14,14 @@ abstract class PBStyle { PBTextStyle textStyle; PBStyle({this.fills, this.backgroundColor}); - Map toJson(); + + // toPBDF() {} + + factory PBStyle.fromPBDF(Map json) { + if (json.containsKey('_class')) { + return Style.fromJson(json); + } else { + return FigmaStyle.fromJson(json); + } + } } diff --git a/lib/design_logic/rectangle.dart b/lib/design_logic/rectangle.dart index b5cb4a47..c9ba6dd6 100644 --- a/lib/design_logic/rectangle.dart +++ b/lib/design_logic/rectangle.dart @@ -29,7 +29,7 @@ class Rectangle with PBColorMixin implements DesignNodeFactory, DesignNode { bool edited, bool isClosed, pointRadiusBehaviour, - List points, + List this.points, this.UUID, booleanOperation, exportOptions, @@ -38,9 +38,9 @@ class Rectangle with PBColorMixin implements DesignNodeFactory, DesignNode { isFlippedHorizontal, isFlippedVertical, isLocked, - isVisible, + this.isVisible, layerListExpandedType, - name, + this.name, nameIsFixed, resizingConstraint, resizingType, @@ -51,8 +51,9 @@ class Rectangle with PBColorMixin implements DesignNodeFactory, DesignNode { clippingMaskMode, userInfo, maintainScrollPosition, - type, - pbdfType, + this.type, + this.pbdfType, + this.style, }); @override @@ -94,6 +95,9 @@ class Rectangle with PBColorMixin implements DesignNodeFactory, DesignNode { type: json['type'] as String, maintainScrollPosition: json['maintainScrollPosition'], pbdfType: json['pbdfType'], + style: json['style'] == null + ? null + : PBStyle.fromPBDF(json['style'] as Map), ); } From 8c34855e2a4089755e4707247029e16400205b32 Mon Sep 17 00:00:00 2001 From: Bryan Figueroa Date: Mon, 1 Feb 2021 19:27:01 -0700 Subject: [PATCH 07/23] Dont commit this again --- lib/configurations/configurations.json | 18 +++++++----------- 1 file changed, 7 insertions(+), 11 deletions(-) diff --git a/lib/configurations/configurations.json b/lib/configurations/configurations.json index b16400a4..01f83474 100644 --- a/lib/configurations/configurations.json +++ b/lib/configurations/configurations.json @@ -1,13 +1,9 @@ { - "default": { - "widgetStyle": "Material", - "widgetType": "Stateless", - "widgetSpacing": "Expanded", - "layoutPrecedence": [ - "column", - "row", - "stack" - ] - }, - "state-management": "none" + "default": { + "widgetStyle": "Material", + "widgetType": "Stateless", + "widgetSpacing": "Expanded", + "layoutPrecedence": ["column", "row", "stack"] + }, + "state-management": "provider" } \ No newline at end of file From d18cf08b7853c64e204158d466a2e99e2cdbbe12 Mon Sep 17 00:00:00 2001 From: Ivan Vigliante Date: Mon, 1 Feb 2021 22:43:32 -0500 Subject: [PATCH 08/23] Figma PBDL now prints ID --- lib/controllers/figma_controller.dart | 10 ++++++---- lib/input/figma/helper/figma_project.dart | 6 +++++- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/lib/controllers/figma_controller.dart b/lib/controllers/figma_controller.dart index dc06161d..66ffdfa3 100644 --- a/lib/controllers/figma_controller.dart +++ b/lib/controllers/figma_controller.dart @@ -1,13 +1,11 @@ import 'package:parabeac_core/controllers/controller.dart'; +import 'package:parabeac_core/controllers/main_info.dart'; import 'package:parabeac_core/input/figma/entities/layers/frame.dart'; -import 'package:parabeac_core/input/figma/helper/figma_asset_processor.dart'; import 'package:parabeac_core/input/figma/helper/figma_project.dart'; import 'package:parabeac_core/input/helper/asset_processing_service.dart'; import 'package:parabeac_core/input/helper/design_project.dart'; import 'package:quick_log/quick_log.dart'; -import 'interpret.dart'; - class FigmaController extends Controller { ///SERVICE @override @@ -44,7 +42,11 @@ class FigmaController extends Controller { FigmaProject generateFigmaTree(var jsonFigma, var projectname) { try { - return FigmaProject(projectname, jsonFigma); + return FigmaProject( + projectname, + jsonFigma, + id: MainInfo().figmaProjectID, + ); } catch (e, stackTrace) { print(e); return null; diff --git a/lib/input/figma/helper/figma_project.dart b/lib/input/figma/helper/figma_project.dart index ea61e8e9..49a09eb2 100644 --- a/lib/input/figma/helper/figma_project.dart +++ b/lib/input/figma/helper/figma_project.dart @@ -19,7 +19,11 @@ class FigmaProject extends DesignProject { FigmaPage rootScreen; - FigmaProject(this.projectName, this.figmaJson) { + FigmaProject( + this.projectName, + this.figmaJson, { + String id, + }) : super(id: id) { pages.addAll(_setConventionalPages(figmaJson['document']['children'])); } From eccaf9f390860c55688c1f761baa7b22e471871a Mon Sep 17 00:00:00 2001 From: Ivan Vigliante Date: Tue, 2 Feb 2021 00:49:09 -0500 Subject: [PATCH 09/23] Fix import names for provider --- .../generators/middleware/middleware.dart | 5 +---- .../state_management/provider_middleware.dart | 4 ++++ .../pb_file_structure_strategy.dart | 15 +++++++-------- .../pb_generation_configuration.dart | 6 +++++- 4 files changed, 17 insertions(+), 13 deletions(-) diff --git a/lib/generation/generators/middleware/middleware.dart b/lib/generation/generators/middleware/middleware.dart index 4dc6c300..b49fc73e 100644 --- a/lib/generation/generators/middleware/middleware.dart +++ b/lib/generation/generators/middleware/middleware.dart @@ -7,10 +7,7 @@ abstract class Middleware { Middleware(this.generationManager); - String getNameOfNode(PBIntermediateNode node) { - var name = node.name; - return getName(name); - } + String getNameOfNode(PBIntermediateNode node) => getName(node.name); String getName(String name) { var index = name.indexOf('/'); diff --git a/lib/generation/generators/middleware/state_management/provider_middleware.dart b/lib/generation/generators/middleware/state_management/provider_middleware.dart index c157e6e6..85d444ab 100644 --- a/lib/generation/generators/middleware/state_management/provider_middleware.dart +++ b/lib/generation/generators/middleware/state_management/provider_middleware.dart @@ -4,6 +4,7 @@ import 'package:parabeac_core/generation/generators/pb_generation_manager.dart'; import 'package:parabeac_core/generation/generators/pb_variable.dart'; import 'package:parabeac_core/generation/generators/value_objects/file_structure_strategy.dart/provider_file_structure_strategy.dart'; import 'package:parabeac_core/interpret_and_optimize/entities/pb_shared_instance.dart'; +import 'package:parabeac_core/interpret_and_optimize/entities/pb_shared_master_node.dart'; import 'package:recase/recase.dart'; import 'package:parabeac_core/generation/generators/value_objects/generator_adapter.dart'; import 'package:parabeac_core/interpret_and_optimize/entities/subclasses/pb_intermediate_node.dart'; @@ -36,6 +37,9 @@ class ProviderMiddleware extends Middleware { return node; } watcherName = getNameOfNode(node); + if (node is PBSharedMasterNode) { + node.name = watcherName; + } // Iterating through states var stateBuffer = StringBuffer(); diff --git a/lib/generation/generators/value_objects/file_structure_strategy.dart/pb_file_structure_strategy.dart b/lib/generation/generators/value_objects/file_structure_strategy.dart/pb_file_structure_strategy.dart index c5bd4567..964e100b 100644 --- a/lib/generation/generators/value_objects/file_structure_strategy.dart/pb_file_structure_strategy.dart +++ b/lib/generation/generators/value_objects/file_structure_strategy.dart/pb_file_structure_strategy.dart @@ -55,7 +55,7 @@ abstract class FileStructureStrategy { _viewDirectoryPath = '${GENERATED_PROJECT_PATH}${RELATIVE_VIEW_PATH}'; _pbProject.forest.forEach((dir) { if (dir.rootNode != null) { - _addImportsInfo(dir); + addImportsInfo(dir); } }); Directory(_screenDirectoryPath).createSync(recursive: true); @@ -65,24 +65,23 @@ abstract class FileStructureStrategy { } ///Add the import information to correctly generate them in the corresponding files. - void _addImportsInfo(PBIntermediateTree directory) { - var intermediateItem = directory; + void addImportsInfo(PBIntermediateTree tree) { // Add to cache if node is scaffold or symbol master - var node = intermediateItem.rootNode; + var node = tree.rootNode; var name = node?.name?.snakeCase; if (name != null) { var uuid = node is PBSharedMasterNode ? node.SYMBOL_ID : node.UUID; var path = node is PBSharedMasterNode - ? '${_viewDirectoryPath}${directory.name.snakeCase}/${name}.dart' // Removed .g - : '${_screenDirectoryPath}${directory.name.snakeCase}/${name}.dart'; + ? '${_viewDirectoryPath}${tree.name.snakeCase}/${name}.dart' // Removed .g + : '${_screenDirectoryPath}${tree.name.snakeCase}/${name}.dart'; PBGenCache().addToCache(uuid, path); } else { logger.warning( - 'The following intermediateNode was missing a name: ${intermediateItem.toString()}'); + 'The following intermediateNode was missing a name: ${tree.toString()}'); } } - ///Writig the code to the actual file + ///Writing the code to the actual file /// ///The default computation of the function will foward the `code` to the ///`_pageWriter`. The [PBPageWriter] will then generate the file with the code inside diff --git a/lib/generation/generators/value_objects/generation_configuration/pb_generation_configuration.dart b/lib/generation/generators/value_objects/generation_configuration/pb_generation_configuration.dart index ed2f8ac4..feea8308 100644 --- a/lib/generation/generators/value_objects/generation_configuration/pb_generation_configuration.dart +++ b/lib/generation/generators/value_objects/generation_configuration/pb_generation_configuration.dart @@ -111,8 +111,12 @@ abstract class GenerationConfiguration { _setMainScreen( tree.rootNode, '${tree.name.snakeCase}/${fileName}.dart'); } - _commitImports(tree.rootNode, tree.name.snakeCase, fileName); await _iterateNode(tree.rootNode); + fileName = tree.rootNode?.name?.snakeCase ?? + fileName; //fileName may have changed in _iterateNode() + // Refresh imports + fileStructureStrategy.addImportsInfo(tree); + _commitImports(tree.rootNode, tree.name.snakeCase, fileName); await _generateNode(tree.rootNode, '${tree.name.snakeCase}/${fileName}'); } From bc96cc4d8115045d1f91165df1e313fc05282615 Mon Sep 17 00:00:00 2001 From: Ivan Vigliante Date: Tue, 2 Feb 2021 22:25:58 -0500 Subject: [PATCH 10/23] Fixed imports not showing models and variables not refering to provider variables Added Image error for sketch when SAC throws error. --- .../middleware/state_management/provider_middleware.dart | 2 +- .../pb_generation_configuration.dart | 7 ++----- lib/input/sketch/helper/sketch_asset_processor.dart | 5 ++++- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/lib/generation/generators/middleware/state_management/provider_middleware.dart b/lib/generation/generators/middleware/state_management/provider_middleware.dart index 85d444ab..43658598 100644 --- a/lib/generation/generators/middleware/state_management/provider_middleware.dart +++ b/lib/generation/generators/middleware/state_management/provider_middleware.dart @@ -32,7 +32,7 @@ class ProviderMiddleware extends Middleware { 'context.watch<${getName(node.functionCallName).pascalCase}>().defaultWidget'); managerData.addMethodVariable(watcher); await managerData.replaceImport( - watcherName, 'models/${watcherName}.dart'); + watcherName, 'models/${getName(node.name).snakeCase}.dart'); node.generator = StringGeneratorAdapter(watcherName); return node; } diff --git a/lib/generation/generators/value_objects/generation_configuration/pb_generation_configuration.dart b/lib/generation/generators/value_objects/generation_configuration/pb_generation_configuration.dart index feea8308..7526e268 100644 --- a/lib/generation/generators/value_objects/generation_configuration/pb_generation_configuration.dart +++ b/lib/generation/generators/value_objects/generation_configuration/pb_generation_configuration.dart @@ -111,13 +111,10 @@ abstract class GenerationConfiguration { _setMainScreen( tree.rootNode, '${tree.name.snakeCase}/${fileName}.dart'); } - await _iterateNode(tree.rootNode); - fileName = tree.rootNode?.name?.snakeCase ?? - fileName; //fileName may have changed in _iterateNode() - // Refresh imports - fileStructureStrategy.addImportsInfo(tree); _commitImports(tree.rootNode, tree.name.snakeCase, fileName); + await _iterateNode(tree.rootNode); + await _generateNode(tree.rootNode, '${tree.name.snakeCase}/${fileName}'); } await _commitDependencies(pb_project.projectName); diff --git a/lib/input/sketch/helper/sketch_asset_processor.dart b/lib/input/sketch/helper/sketch_asset_processor.dart index 09d5901e..1f997df0 100644 --- a/lib/input/sketch/helper/sketch_asset_processor.dart +++ b/lib/input/sketch/helper/sketch_asset_processor.dart @@ -57,10 +57,13 @@ class SketchAssetProcessor extends AssetProcessingService { } return response?.bodyBytes; } catch (e) { + var imageErr = + File('${MainInfo().cwd.path}/lib/input/assets/image-conversion-error.png') + .readAsBytesSync(); await MainInfo().sentry.captureException(exception: e); log.error(e.message); + return imageErr; } - return null; } @override From d45a3dadfc806b06117ddad0b138852ef99241a0 Mon Sep 17 00:00:00 2001 From: Bryan Figueroa Date: Wed, 3 Feb 2021 15:51:51 -0700 Subject: [PATCH 11/23] Fixed issue on generatin the PBDF and from it --- lib/design_logic/artboard.dart | 22 +++++++++++---- lib/design_logic/design_element.dart | 18 +++++++++++- lib/design_logic/group_node.dart | 13 ++++++--- lib/design_logic/image.dart | 24 +++++++++++----- lib/design_logic/oval.dart | 4 +++ .../pb_shared_instance_design_node.dart | 6 +++- lib/design_logic/pb_shared_master_node.dart | 12 ++++++-- lib/design_logic/polygon.dart | 4 +++ lib/design_logic/rectangle.dart | 2 +- lib/design_logic/star.dart | 4 +++ lib/design_logic/text.dart | 28 +++++++++++-------- lib/design_logic/vector.dart | 23 +++++++++++---- lib/eggs/injected_app_bar.dart | 4 ++- .../figma/helper/figma_asset_processor.dart | 5 +--- .../helper/asset_processing_service.dart | 3 ++ .../entities/layers/abstract_group_layer.dart | 6 ++-- .../sketch/entities/layers/shape_group.dart | 2 +- 17 files changed, 132 insertions(+), 48 deletions(-) diff --git a/lib/design_logic/artboard.dart b/lib/design_logic/artboard.dart index 961d4395..ef9ef10f 100644 --- a/lib/design_logic/artboard.dart +++ b/lib/design_logic/artboard.dart @@ -1,6 +1,7 @@ import 'package:parabeac_core/design_logic/color.dart'; import 'package:parabeac_core/design_logic/design_node.dart'; import 'package:parabeac_core/design_logic/group_node.dart'; +import 'package:parabeac_core/design_logic/pb_style.dart'; import 'package:parabeac_core/design_logic/rect.dart'; import 'package:parabeac_core/input/sketch/entities/layers/flow.dart'; import 'package:parabeac_core/input/sketch/entities/objects/frame.dart'; @@ -17,6 +18,9 @@ class PBArtboard extends DesignNode implements GroupNode, DesignNodeFactory { @override var boundaryRectangle; var isFlowHome; + + @override + var style; PBArtboard( {Color this.backgroundColor, this.isFlowHome, @@ -43,10 +47,10 @@ class PBArtboard extends DesignNode implements GroupNode, DesignNodeFactory { hasClippingMask, clippingMaskMode, userInfo, - Style style, maintainScrollPosition, prototypeNode, - type}) + type, + this.style}) : super(UUID, name, isVisible, boundaryRectangle, type, style, prototypeNode); @@ -92,17 +96,23 @@ class PBArtboard extends DesignNode implements GroupNode, DesignNodeFactory { hasClippingMask: json['hasClippingMask'], clippingMaskMode: json['clippingMaskMode'], userInfo: json['userInfo'], + maintainScrollPosition: json['maintainScrollPosition'], style: json['style'] == null ? null - : Style.fromJson(json['style'] as Map), - maintainScrollPosition: json['maintainScrollPosition'], + : PBStyle.fromPBDF(json['style'] as Map), ) ..prototypeNodeUUID = json['prototypeNodeUUID'] as String ..type = json['type'] as String; if (json.containsKey('children')) { if (json['children'] != null) { - node.children - .add(DesignNode.fromPBDF(json['children'] as Map)); + for (var item in json['children']) { + var child = DesignNode.fromPBDF(item as Map); + if (child != null) { + node.children.add(child); + } else { + print('it the clown'); + } + } } } return node; diff --git a/lib/design_logic/design_element.dart b/lib/design_logic/design_element.dart index 36dc820b..7212e6b9 100644 --- a/lib/design_logic/design_element.dart +++ b/lib/design_logic/design_element.dart @@ -1,5 +1,21 @@ import 'package:parabeac_core/design_logic/design_node.dart'; abstract class DesignElement extends DesignNode { - DesignElement() : super('', '', false, null, '', null, null); + DesignElement({ + UUID, + name, + isVisible, + boundaryRectangle, + type, + style, + prototypeNodeUUID, + }) : super( + UUID, + name, + isVisible, + boundaryRectangle, + type, + style, + prototypeNodeUUID, + ); } diff --git a/lib/design_logic/group_node.dart b/lib/design_logic/group_node.dart index 31f9248c..a6bf0e2e 100644 --- a/lib/design_logic/group_node.dart +++ b/lib/design_logic/group_node.dart @@ -39,6 +39,7 @@ class GroupNode implements DesignNodeFactory, DesignNode { userInfo, maintainScrollPosition, this.pbdfType = 'group', + this.style, }); @override @@ -72,15 +73,19 @@ class GroupNode implements DesignNodeFactory, DesignNode { userInfo: json['userInfo'], maintainScrollPosition: json['maintainScrollPosition'], pbdfType: json['pbdfType'], + style: json['style'] == null + ? null + : PBStyle.fromPBDF(json['style'] as Map), ) ..prototypeNodeUUID = json['prototypeNodeUUID'] as String ..type = json['type'] as String; if (json.containsKey('children')) { if (json['children'] != null) { - var child = - DesignNode.fromPBDF(json['children'] as Map); - if (child != null) { - node.children.add(child); + for (var item in json['children']) { + var child = DesignNode.fromPBDF(item as Map); + if (child != null) { + node.children.add(child); + } } } } diff --git a/lib/design_logic/image.dart b/lib/design_logic/image.dart index a031f0c3..7bfb1c43 100644 --- a/lib/design_logic/image.dart +++ b/lib/design_logic/image.dart @@ -3,6 +3,7 @@ import 'dart:io'; import 'package:parabeac_core/controllers/main_info.dart'; import 'package:parabeac_core/design_logic/design_element.dart'; import 'package:parabeac_core/design_logic/design_node.dart'; +import 'package:parabeac_core/design_logic/pb_style.dart'; import 'package:parabeac_core/input/helper/azure_asset_service.dart'; import 'package:parabeac_core/input/sketch/entities/objects/frame.dart'; import 'package:parabeac_core/interpret_and_optimize/entities/inherited_bitmap.dart'; @@ -12,16 +13,15 @@ import 'package:parabeac_core/interpret_and_optimize/helpers/pb_context.dart'; import 'abstract_design_node_factory.dart'; class Image extends DesignElement implements DesignNodeFactory, DesignNode { - var boundaryRectangle; - - var UUID; + @override + var style; Image({ this.imageReference, - this.UUID, + UUID, booleanOperation, exportOptions, - Frame this.boundaryRectangle, + Frame boundaryRectangle, isFixedToViewport, isFlippedHorizontal, isFlippedVertical, @@ -39,8 +39,15 @@ class Image extends DesignElement implements DesignNodeFactory, DesignNode { clippingMaskMode, userInfo, maintainScrollPosition, - pbdfType, - }); + this.pbdfType = 'image', + this.style, + }) : super( + UUID: UUID, + name: name, + isVisible: isVisible, + boundaryRectangle: boundaryRectangle, + style: style, + ); String imageReference; @@ -76,6 +83,9 @@ class Image extends DesignElement implements DesignNodeFactory, DesignNode { userInfo: json['userInfo'], maintainScrollPosition: json['maintainScrollPosition'], pbdfType: json['pbdfType'], + style: json['style'] == null + ? null + : PBStyle.fromPBDF(json['style'] as Map), ) ..prototypeNodeUUID = json['prototypeNodeUUID'] as String ..type = json['type'] as String; diff --git a/lib/design_logic/oval.dart b/lib/design_logic/oval.dart index 336bb098..0cb1c708 100644 --- a/lib/design_logic/oval.dart +++ b/lib/design_logic/oval.dart @@ -47,6 +47,7 @@ class Oval implements DesignNodeFactory, DesignNode { maintainScrollPosition, type, this.pbdfType = 'oval', + this.style, }); DesignNode fromPBDF(Map json) { return Oval( @@ -79,6 +80,9 @@ class Oval implements DesignNodeFactory, DesignNode { maintainScrollPosition: json['maintainScrollPosition'], type: json['type'] as String, pbdfType: json['pbdfType'] as String, + style: json['style'] == null + ? null + : PBStyle.fromPBDF(json['style'] as Map), ); } diff --git a/lib/design_logic/pb_shared_instance_design_node.dart b/lib/design_logic/pb_shared_instance_design_node.dart index 3fa5ab60..588a5ca0 100644 --- a/lib/design_logic/pb_shared_instance_design_node.dart +++ b/lib/design_logic/pb_shared_instance_design_node.dart @@ -1,4 +1,5 @@ import 'package:parabeac_core/design_logic/design_node.dart'; +import 'package:parabeac_core/design_logic/pb_style.dart'; import 'package:parabeac_core/input/sketch/entities/objects/frame.dart'; import 'package:parabeac_core/input/sketch/entities/objects/override_value.dart'; import 'package:parabeac_core/input/sketch/helper/symbol_node_mixin.dart'; @@ -41,7 +42,7 @@ class PBSharedInstanceDesignNode extends DesignNode userInfo, bool maintainScrollPosition, num scale, - String symbolID, + this.symbolID, num verticalSpacing, num horizontalSpacing, this.pbdfType}) @@ -92,6 +93,9 @@ class PBSharedInstanceDesignNode extends DesignNode horizontalSpacing: (json['horizontalSpacing'] as num)?.toDouble(), type: json['type'] as String, pbdfType: json['pbdfType'], + style: json['style'] == null + ? null + : PBStyle.fromPBDF(json['style'] as Map), ) ..prototypeNodeUUID = json['prototypeNodeUUID'] as String ..parameters = json['parameters'] as List; diff --git a/lib/design_logic/pb_shared_master_node.dart b/lib/design_logic/pb_shared_master_node.dart index b550d3df..30949fe1 100644 --- a/lib/design_logic/pb_shared_master_node.dart +++ b/lib/design_logic/pb_shared_master_node.dart @@ -1,5 +1,6 @@ import 'package:parabeac_core/design_logic/design_node.dart'; import 'package:parabeac_core/design_logic/group_node.dart'; +import 'package:parabeac_core/design_logic/pb_style.dart'; import 'package:parabeac_core/input/sketch/entities/objects/frame.dart'; import 'package:parabeac_core/input/sketch/entities/objects/override_property.dart'; import 'package:parabeac_core/input/sketch/helper/symbol_node_mixin.dart'; @@ -156,12 +157,19 @@ class PBSharedMasterDesignNode extends DesignNode type: json['type'] as String, pbdfType: json['pbdfType'], parameters: json['parameters'] as List, + style: json['style'] == null + ? null + : PBStyle.fromPBDF(json['style'] as Map), )..prototypeNodeUUID = json['prototypeNodeUUID'] as String; if (json.containsKey('children')) { if (json['children'] != null) { - node.children - .add(DesignNode.fromPBDF(json['children'] as Map)); + for (var item in json['children']) { + var child = DesignNode.fromPBDF(item as Map); + if (child != null) { + node.children.add(child); + } + } } } return node; diff --git a/lib/design_logic/polygon.dart b/lib/design_logic/polygon.dart index b719c649..c3e81f12 100644 --- a/lib/design_logic/polygon.dart +++ b/lib/design_logic/polygon.dart @@ -44,6 +44,7 @@ class Polygon implements DesignNodeFactory, DesignNode { maintainScrollPosition, type, pbdfType, + this.style, }); @override @@ -80,6 +81,9 @@ class Polygon implements DesignNodeFactory, DesignNode { maintainScrollPosition: json['maintainScrollPosition'], type: json['type'] as String, pbdfType: json['pbdfType'] as String, + style: json['style'] == null + ? null + : PBStyle.fromPBDF(json['style'] as Map), ); } diff --git a/lib/design_logic/rectangle.dart b/lib/design_logic/rectangle.dart index c9ba6dd6..27008f7d 100644 --- a/lib/design_logic/rectangle.dart +++ b/lib/design_logic/rectangle.dart @@ -52,7 +52,7 @@ class Rectangle with PBColorMixin implements DesignNodeFactory, DesignNode { userInfo, maintainScrollPosition, this.type, - this.pbdfType, + this.pbdfType = 'rectangle', this.style, }); diff --git a/lib/design_logic/star.dart b/lib/design_logic/star.dart index eaeeb1e5..88e2bdb4 100644 --- a/lib/design_logic/star.dart +++ b/lib/design_logic/star.dart @@ -40,6 +40,7 @@ class Star implements DesignNodeFactory, DesignNode { maintainScrollPosition, type, pbdfType, + this.style, }); @override @@ -76,6 +77,9 @@ class Star implements DesignNodeFactory, DesignNode { maintainScrollPosition: json['maintainScrollPosition'], type: json['_class'] as String, pbdfType: json['pbdfType'], + style: json['style'] == null + ? null + : PBStyle.fromPBDF(json['style'] as Map), ); } diff --git a/lib/design_logic/text.dart b/lib/design_logic/text.dart index 9aab729a..03c39b8d 100644 --- a/lib/design_logic/text.dart +++ b/lib/design_logic/text.dart @@ -1,5 +1,6 @@ import 'package:parabeac_core/design_logic/design_element.dart'; import 'package:parabeac_core/design_logic/design_node.dart'; +import 'package:parabeac_core/design_logic/pb_style.dart'; import 'package:parabeac_core/input/sketch/entities/objects/frame.dart'; import 'package:parabeac_core/interpret_and_optimize/entities/inherited_text.dart'; import 'package:parabeac_core/interpret_and_optimize/entities/injected_container.dart'; @@ -11,12 +12,6 @@ import 'package:uuid/uuid.dart'; import 'abstract_design_node_factory.dart'; class Text extends DesignElement implements DesignNodeFactory, DesignNode { - @override - var boundaryRectangle; - - @override - var UUID; - var attributedString; var automaticallyDrawOnUnderlyingPath; @@ -30,17 +25,17 @@ class Text extends DesignElement implements DesignNodeFactory, DesignNode { var glyphBounds; Text({ - this.UUID, + UUID, booleanOperation, exportOptions, - Frame this.boundaryRectangle, + Frame boundaryRectangle, bool isFixedToViewport, bool isFlippedHorizontal, bool isFlippedVertical, bool isLocked, bool isVisible, layerListExpandedType, - String name, + name, bool nameIsFixed, resizingConstraint, resizingType, @@ -57,8 +52,16 @@ class Text extends DesignElement implements DesignNodeFactory, DesignNode { this.textBehaviour, this.glyphBounds, type, - pbdfType, - }); + pbdfType = 'text', + style, + }) : super( + UUID: UUID, + name: name, + isVisible: isVisible, + boundaryRectangle: boundaryRectangle, + type: type, + style: style, + ); String content; @@ -101,6 +104,9 @@ class Text extends DesignElement implements DesignNodeFactory, DesignNode { glyphBounds: json['glyphBounds'], type: json['type'] as String, pbdfType: json['pbdfType'], + style: json['style'] == null + ? null + : PBStyle.fromPBDF(json['style'] as Map), ); } diff --git a/lib/design_logic/vector.dart b/lib/design_logic/vector.dart index 03a040ab..a8c36d6e 100644 --- a/lib/design_logic/vector.dart +++ b/lib/design_logic/vector.dart @@ -3,6 +3,7 @@ import 'dart:io'; import 'package:parabeac_core/controllers/main_info.dart'; import 'package:parabeac_core/design_logic/design_node.dart'; import 'package:parabeac_core/design_logic/pb_style.dart'; +import 'package:parabeac_core/input/helper/asset_processing_service.dart'; import 'package:parabeac_core/input/helper/azure_asset_service.dart'; import 'package:parabeac_core/input/sketch/entities/objects/frame.dart'; import 'package:parabeac_core/interpret_and_optimize/entities/inherited_bitmap.dart'; @@ -10,8 +11,9 @@ import 'package:parabeac_core/interpret_and_optimize/helpers/pb_context.dart'; import 'package:parabeac_core/interpret_and_optimize/entities/subclasses/pb_intermediate_node.dart'; import 'abstract_design_node_factory.dart'; +import 'image.dart'; -class Vector implements DesignNodeFactory, DesignNode { +class Vector implements DesignNodeFactory, DesignNode, Image { @override String pbdfType = 'vector'; @@ -32,9 +34,9 @@ class Vector implements DesignNodeFactory, DesignNode { var fillsList; Vector({ - String name, - bool visible, - String type, + this.name, + visible, + this.type, pluginData, sharedPluginData, this.layoutAlign, @@ -46,8 +48,9 @@ class Vector implements DesignNodeFactory, DesignNode { this.strokeAlign, this.styles, this.fillsList, - String UUID, - pbdfType, + this.UUID, + this.pbdfType = 'vector', + this.style, }); @override @@ -72,6 +75,9 @@ class Vector implements DesignNodeFactory, DesignNode { fillsList: json['fills'] as List, UUID: json['id'] as String, pbdfType: json['pbdfType'], + style: json['style'] == null + ? null + : PBStyle.fromPBDF(json['style'] as Map), )..type = json['type'] as String; } @@ -97,6 +103,8 @@ class Vector implements DesignNodeFactory, DesignNode { Future interpretNode(PBContext currentContext) async { var img = await AzureAssetService().downloadImage(UUID); + imageReference = AssetProcessingService.getImageName(UUID); + var file = File('${MainInfo().outputPath}pngs/${UUID}.png'.replaceAll(':', '_')) ..createSync(recursive: true); @@ -117,4 +125,7 @@ class Vector implements DesignNodeFactory, DesignNode { @override var boundaryRectangle; + + @override + String imageReference; } diff --git a/lib/eggs/injected_app_bar.dart b/lib/eggs/injected_app_bar.dart index fd931377..240f5e46 100644 --- a/lib/eggs/injected_app_bar.dart +++ b/lib/eggs/injected_app_bar.dart @@ -54,7 +54,9 @@ class InjectedNavbar extends PBEgg implements PBInjectedIntermediate { .contains('')) { Interpret() .generateNonRootItem((node as PBInheritedIntermediate).originalRef) - .then((value) => middleItem = value); + .then((value) { + middleItem = value; + }); } } diff --git a/lib/input/figma/helper/figma_asset_processor.dart b/lib/input/figma/helper/figma_asset_processor.dart index 12e9a32a..1f9c7248 100644 --- a/lib/input/figma/helper/figma_asset_processor.dart +++ b/lib/input/figma/helper/figma_asset_processor.dart @@ -19,15 +19,12 @@ class FigmaAssetProcessor extends AssetProcessingService { Logger log = Logger('Figma Image helper'); - String _getImageName(String uuid) => - ('images/' + uuid + '.png').replaceAll(':', '_'); - /// Adds [uuid] to queue to be processed as an image. /// Returns the formatted name of the image reference. @override String processImage(String uuid) { _uuidQueue.add(uuid); - return _getImageName(uuid); + return AssetProcessingService.getImageName(uuid); } /// Adds [uuids] to queue to be processed as an image. diff --git a/lib/input/helper/asset_processing_service.dart b/lib/input/helper/asset_processing_service.dart index 4851ea90..b8d7420a 100644 --- a/lib/input/helper/asset_processing_service.dart +++ b/lib/input/helper/asset_processing_service.dart @@ -10,6 +10,9 @@ abstract class AssetProcessingService { AzureAssetService aaService = AzureAssetService(); + static String getImageName(String uuid) => + ('images/' + uuid + '.png').replaceAll(':', '_'); + Future uploadToStorage(Uint8List img, String name) async { if (Platform.environment.containsKey(AzureAssetService.KEY_NAME) && aaService.projectUUID != null) { diff --git a/lib/input/sketch/entities/layers/abstract_group_layer.dart b/lib/input/sketch/entities/layers/abstract_group_layer.dart index 1003ab31..45ae83f1 100644 --- a/lib/input/sketch/entities/layers/abstract_group_layer.dart +++ b/lib/input/sketch/entities/layers/abstract_group_layer.dart @@ -66,10 +66,10 @@ abstract class AbstractGroupLayer extends SketchNode implements GroupNode { @override Map toJson(); - Map getChildren() { - Map result = {}; + List getChildren() { + List result = []; for (var child in children) { - result.addAll((child as DesignNode).toPBDF()); + result.add((child as DesignNode).toPBDF()); } return result; } diff --git a/lib/input/sketch/entities/layers/shape_group.dart b/lib/input/sketch/entities/layers/shape_group.dart index d4a68500..4bf41bc8 100644 --- a/lib/input/sketch/entities/layers/shape_group.dart +++ b/lib/input/sketch/entities/layers/shape_group.dart @@ -153,7 +153,7 @@ class ShapeGroup extends AbstractGroupLayer implements SketchNodeFactory { 'groupLayout': groupLayout, 'CLASS_NAME': CLASS_NAME, 'windingRule': windingRule, - 'absoluteBoudingBox': boundaryRectangle, + 'absoluteBoundingBox': boundaryRectangle, 'id': UUID, 'type': type, 'visible': isVisible, From cffc1a408b69ad6f8364e699fa353ca510ce82da Mon Sep 17 00:00:00 2001 From: Ivan Vigliante Date: Thu, 4 Feb 2021 17:00:06 -0500 Subject: [PATCH 12/23] Fixed issue where main.dart was not being awaited. --- .../pb_generation_configuration.dart | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/generation/generators/value_objects/generation_configuration/pb_generation_configuration.dart b/lib/generation/generators/value_objects/generation_configuration/pb_generation_configuration.dart index 7526e268..786b04a0 100644 --- a/lib/generation/generators/value_objects/generation_configuration/pb_generation_configuration.dart +++ b/lib/generation/generators/value_objects/generation_configuration/pb_generation_configuration.dart @@ -108,7 +108,7 @@ abstract class GenerationConfiguration { var fileName = tree.rootNode?.name?.snakeCase ?? 'no_name_found'; if (tree.rootNode is InheritedScaffold && (tree.rootNode as InheritedScaffold).isHomeScreen) { - _setMainScreen( + await _setMainScreen( tree.rootNode, '${tree.name.snakeCase}/${fileName}.dart'); } _commitImports(tree.rootNode, tree.name.snakeCase, fileName); @@ -154,10 +154,10 @@ abstract class GenerationConfiguration { } } - void _setMainScreen(InheritedScaffold node, String outputMain) { + void _setMainScreen(InheritedScaffold node, String outputMain) async { var writer = _pageWriter; if (writer is PBFlutterWriter) { - writer.writeMainScreenWithHome( + await writer.writeMainScreenWithHome( node.name, fileStructureStrategy.GENERATED_PROJECT_PATH + 'lib/main.dart', 'screens/${outputMain}'); From fd74105d8f6a6a0534e123e33dbb40102e50c54e Mon Sep 17 00:00:00 2001 From: Bryan Figueroa Date: Fri, 5 Feb 2021 15:45:12 -0700 Subject: [PATCH 13/23] Implemented Riverpod middleware --- .../flutter_project_builder.dart | 2 + .../state_management/riverpod_middleware.dart | 89 +++++++++++++++++++ .../riverpod_file_structure_strategy.dart | 39 ++++++++ .../riverpod_generation_configuration.dart | 20 +++++ 4 files changed, 150 insertions(+) create mode 100644 lib/generation/generators/middleware/state_management/riverpod_middleware.dart create mode 100644 lib/generation/generators/value_objects/file_structure_strategy.dart/riverpod_file_structure_strategy.dart create mode 100644 lib/generation/generators/value_objects/generation_configuration/riverpod_generation_configuration.dart diff --git a/lib/generation/flutter_project_builder/flutter_project_builder.dart b/lib/generation/flutter_project_builder/flutter_project_builder.dart index c814cde9..3a46e015 100644 --- a/lib/generation/flutter_project_builder/flutter_project_builder.dart +++ b/lib/generation/flutter_project_builder/flutter_project_builder.dart @@ -5,6 +5,7 @@ import 'package:parabeac_core/controllers/main_info.dart'; import 'package:parabeac_core/generation/generators/value_objects/generation_configuration/bloc_generation_configuration.dart'; import 'package:parabeac_core/generation/generators/value_objects/generation_configuration/pb_generation_configuration.dart'; import 'package:parabeac_core/generation/generators/value_objects/generation_configuration/provider_generation_configuration.dart'; +import 'package:parabeac_core/generation/generators/value_objects/generation_configuration/riverpod_generation_configuration.dart'; import 'package:parabeac_core/generation/generators/value_objects/generation_configuration/stateful_generation_configuration.dart'; import 'package:parabeac_core/generation/generators/writers/pb_page_writer.dart'; import 'package:parabeac_core/input/figma/helper/figma_asset_processor.dart'; @@ -30,6 +31,7 @@ class FlutterProjectBuilder { Map configurations = { 'provider': ProviderGenerationConfiguration(), 'bloc': BLoCGenerationConfiguration(), + 'riverpod': RiverpodGenerationConfiguration(), 'none': StatefulGenerationConfiguration(), }; diff --git a/lib/generation/generators/middleware/state_management/riverpod_middleware.dart b/lib/generation/generators/middleware/state_management/riverpod_middleware.dart new file mode 100644 index 00000000..d77d9c57 --- /dev/null +++ b/lib/generation/generators/middleware/state_management/riverpod_middleware.dart @@ -0,0 +1,89 @@ +import 'package:parabeac_core/generation/generators/attribute-helper/pb_generator_context.dart'; +import 'package:parabeac_core/generation/generators/value_objects/file_structure_strategy.dart/riverpod_file_structure_strategy.dart'; +import 'package:parabeac_core/generation/generators/value_objects/generator_adapter.dart'; +import 'package:parabeac_core/interpret_and_optimize/entities/pb_shared_instance.dart'; +import 'package:parabeac_core/interpret_and_optimize/entities/subclasses/pb_intermediate_node.dart'; +import '../../pb_generation_manager.dart'; +import '../../pb_variable.dart'; +import '../middleware.dart'; +import 'package:recase/recase.dart'; + +class RiverpodMiddleware extends Middleware { + final PACKAGE_NAME = 'flutter_riverpod'; + final PACKAGE_VERSION = '^0.12.1'; + + RiverpodMiddleware(PBGenerationManager generationManager) + : super(generationManager); + + @override + Future applyMiddleware(PBIntermediateNode node) async { + String watcherName; + var managerData = node.managerData; + var fileStrategy = node.currentContext.project.fileStructureStrategy + as RiverpodFileStructureStrategy; + + if (node is PBSharedInstanceIntermediateNode) { + node.currentContext.project.genProjectData + .addDependencies(PACKAGE_NAME, PACKAGE_VERSION); + managerData.addImport('package:flutter_riverpod/all.dart'); + watcherName = node.functionCallName.snakeCase; + var watcher = PBVariable(watcherName + '_provider', 'final ', true, + 'ChangeNotifierProvider((ref) => ${getName(node.functionCallName).pascalCase}())'); + + managerData.addMethodVariable(watcher); + await managerData.replaceImport( + watcherName, 'models/${watcherName}.dart'); + node.generator = StringGeneratorAdapter(getConsumer(watcherName)); + return node; + } + watcherName = getNameOfNode(node); + + // Iterating through states + var stateBuffer = StringBuffer(); + stateBuffer.write(_generateProviderVariable(node)); + node.auxiliaryData.stateGraph.states.forEach((state) async { + var variationNode = state.variation.node; + + stateBuffer.write(_generateProviderVariable(variationNode)); + }); + + var code = _generateRiverpodClass(stateBuffer.toString(), watcherName, + generationManager, node.name.camelCase); + fileStrategy.writeRiverpodModelFile(code, getName(node.name).snakeCase); + + return node; + } + + String _generateRiverpodClass(String states, String defaultStateName, + PBGenerationManager manager, String defaultWidgetName) { + return ''' + import 'package:flutter/material.dart'; + class ${defaultStateName} extends ChangeNotifier { + ${states} + + Widget defaultWidget; + ${defaultStateName}(){ + defaultWidget = ${defaultWidgetName}; + } + } + '''; + } + + String _generateProviderVariable(PBIntermediateNode node) { + return 'var ${node.name.camelCase} = ' + + node?.generator?.generate(node ?? '', + GeneratorContext(sizingContext: SizingValueContext.PointValue)) + + ';'; + } + + String getConsumer(String name) { + return ''' + Consumer( + builder: (context, watch, child) { + final ${name} = watch(${name}_provider); + return ${name}.defaultWidget; + }, + ) + '''; + } +} diff --git a/lib/generation/generators/value_objects/file_structure_strategy.dart/riverpod_file_structure_strategy.dart b/lib/generation/generators/value_objects/file_structure_strategy.dart/riverpod_file_structure_strategy.dart new file mode 100644 index 00000000..e7cb449c --- /dev/null +++ b/lib/generation/generators/value_objects/file_structure_strategy.dart/riverpod_file_structure_strategy.dart @@ -0,0 +1,39 @@ +import 'dart:io'; + +import 'package:parabeac_core/generation/generators/value_objects/file_structure_strategy.dart/pb_file_structure_strategy.dart'; +import 'package:parabeac_core/generation/generators/writers/pb_page_writer.dart'; +import 'package:parabeac_core/interpret_and_optimize/helpers/pb_project.dart'; + +class RiverpodFileStructureStrategy extends FileStructureStrategy { + final RELATIVE_PROVIDER_PATH = 'lib/riverpod/'; + final RELATIVE_MODEL_PATH = 'lib/models/'; + var _providersPath; + var _modelsPath; + + RiverpodFileStructureStrategy( + String genProjectPath, PBPageWriter pageWriter, PBProject pbProject) + : super(genProjectPath, pageWriter, pbProject) { + _providersPath = '${genProjectPath}${RELATIVE_PROVIDER_PATH}'; + _modelsPath = '${genProjectPath}${RELATIVE_MODEL_PATH}'; + } + + @override + Future setUpDirectories() async { + if (!isSetUp) { + await Future.wait( + [super.setUpDirectories(), _generateMissingDirectories()]); + isSetUp = true; + } + } + + Future _generateMissingDirectories() async { + Directory(_providersPath).createSync(recursive: true); + Directory(_modelsPath).createSync(recursive: true); + } + + void writeRiverpodModelFile(String code, String fileName) { + super + .pageWriter + .write(code, '${_modelsPath}${fileName}.dart'); // Removed .g + } +} diff --git a/lib/generation/generators/value_objects/generation_configuration/riverpod_generation_configuration.dart b/lib/generation/generators/value_objects/generation_configuration/riverpod_generation_configuration.dart new file mode 100644 index 00000000..4642cfef --- /dev/null +++ b/lib/generation/generators/value_objects/generation_configuration/riverpod_generation_configuration.dart @@ -0,0 +1,20 @@ +import 'package:parabeac_core/generation/generators/middleware/state_management/riverpod_middleware.dart'; +import 'package:parabeac_core/generation/generators/value_objects/file_structure_strategy.dart/riverpod_file_structure_strategy.dart'; +import 'package:parabeac_core/generation/generators/value_objects/generation_configuration/pb_generation_configuration.dart'; +import 'package:quick_log/quick_log.dart'; + +class RiverpodGenerationConfiguration extends GenerationConfiguration { + RiverpodGenerationConfiguration(); + + @override + Future setUpConfiguration() async { + logger = Logger('Riverpod'); + logger.info( + 'Thanks for trying our state management configuration that is now in Beta!\nIf you run into any issues please feel free to post it in Github or in our Discord!'); + fileStructureStrategy = RiverpodFileStructureStrategy( + pbProject.projectAbsPath, pageWriter, pbProject); + registerMiddleware(RiverpodMiddleware(generationManager)); + logger.info('Setting up the directories'); + await fileStructureStrategy.setUpDirectories(); + } +} From 12ca3b57fa36e6b8af54f83f74592635505c710e Mon Sep 17 00:00:00 2001 From: Bryan Figueroa Date: Fri, 5 Feb 2021 16:03:56 -0700 Subject: [PATCH 14/23] Removed shadows and set them true if it has --- lib/design_logic/pb_style.dart | 3 +++ lib/input/figma/entities/style/figma_style.dart | 4 ++++ lib/input/sketch/entities/style/style.dart | 12 +++++++++++- 3 files changed, 18 insertions(+), 1 deletion(-) diff --git a/lib/design_logic/pb_style.dart b/lib/design_logic/pb_style.dart index fcb5bc0e..d5402f6e 100644 --- a/lib/design_logic/pb_style.dart +++ b/lib/design_logic/pb_style.dart @@ -12,6 +12,7 @@ class PBStyle { List borders; PBBorderOptions borderOptions; PBTextStyle textStyle; + bool hasShadow = false; PBStyle({this.fills, this.backgroundColor}); @@ -24,4 +25,6 @@ class PBStyle { return FigmaStyle.fromJson(json); } } + + toJson() {} } diff --git a/lib/input/figma/entities/style/figma_style.dart b/lib/input/figma/entities/style/figma_style.dart index 44768e99..316f715e 100644 --- a/lib/input/figma/entities/style/figma_style.dart +++ b/lib/input/figma/entities/style/figma_style.dart @@ -42,4 +42,8 @@ class FigmaStyle implements PBStyle { Map toJson() => _$FigmaStyleToJson(this); factory FigmaStyle.fromJson(Map json) => _$FigmaStyleFromJson(json); + + @override + @JsonKey(ignore: true) + bool hasShadow; } diff --git a/lib/input/sketch/entities/style/style.dart b/lib/input/sketch/entities/style/style.dart index bba7922c..dba78310 100644 --- a/lib/input/sketch/entities/style/style.dart +++ b/lib/input/sketch/entities/style/style.dart @@ -51,7 +51,13 @@ class Style implements PBStyle { this.startMarkerType, this.windingRule, TextStyle this.textStyle, - }); + }) { + if (shadows != null) { + this.shadows = null; + this.innerShadows = null; + hasShadow = true; + } + } factory Style.fromJson(Map json) => _$StyleFromJson(json); Map toJson() => _$StyleToJson(this); @@ -65,4 +71,8 @@ class Style implements PBStyle { @override set borders(List _borders) {} + + @override + @JsonKey(ignore: true) + bool hasShadow; } From 7eedcc42d90e0d60d06f3113a67e9427ec2a7d0d Mon Sep 17 00:00:00 2001 From: Bryan Figueroa Date: Fri, 5 Feb 2021 16:04:53 -0700 Subject: [PATCH 15/23] Ran build method --- lib/input/figma/entities/layers/component.g.dart | 6 +----- lib/input/figma/entities/layers/text.g.dart | 16 +++++++++++++++- .../sketch/entities/layers/sketch_text.g.dart | 4 ++-- .../sketch/entities/layers/symbol_master.dart | 1 + .../sketch/entities/layers/symbol_master.g.dart | 6 ++++++ 5 files changed, 25 insertions(+), 8 deletions(-) diff --git a/lib/input/figma/entities/layers/component.g.dart b/lib/input/figma/entities/layers/component.g.dart index 9ece6314..ebf811e2 100644 --- a/lib/input/figma/entities/layers/component.g.dart +++ b/lib/input/figma/entities/layers/component.g.dart @@ -26,11 +26,7 @@ Component _$ComponentFromJson(Map json) { horizontalPadding: json['horizontalPadding'], verticalPadding: json['verticalPadding'], itemSpacing: json['itemSpacing'], - overrideProperties: (json['overrideProperties'] as List) - ?.map((e) => e == null - ? null - : OverridableProperty.fromJson(e as Map)) - ?.toList(), + overrideProperties: json['overrideProperties'], children: (json['children'] as List) ?.map((e) => e == null ? null : FigmaNode.fromJson(e as Map)) diff --git a/lib/input/figma/entities/layers/text.g.dart b/lib/input/figma/entities/layers/text.g.dart index e814e2e7..192770cc 100644 --- a/lib/input/figma/entities/layers/text.g.dart +++ b/lib/input/figma/entities/layers/text.g.dart @@ -36,7 +36,14 @@ FigmaText _$FigmaTextFromJson(Map json) { ..prototypeNodeUUID = json['transitionNodeID'] as String ..fillsList = json['fills'] as List ..imageReference = json['imageReference'] as String - ..pbdfType = json['pbdfType'] as String; + ..pbdfType = json['pbdfType'] as String + ..attributedString = json['attributedString'] + ..automaticallyDrawOnUnderlyingPath = + json['automaticallyDrawOnUnderlyingPath'] + ..dontSynchroniseWithSymbol = json['dontSynchroniseWithSymbol'] + ..glyphBounds = json['glyphBounds'] + ..lineSpacingBehaviour = json['lineSpacingBehaviour'] + ..textBehaviour = json['textBehaviour']; } Map _$FigmaTextToJson(FigmaText instance) => { @@ -62,4 +69,11 @@ Map _$FigmaTextToJson(FigmaText instance) => { 'characterStyleOverrides': instance.characterStyleOverrides, 'styleOverrideTable': instance.styleOverrideTable, 'pbdfType': instance.pbdfType, + 'attributedString': instance.attributedString, + 'automaticallyDrawOnUnderlyingPath': + instance.automaticallyDrawOnUnderlyingPath, + 'dontSynchroniseWithSymbol': instance.dontSynchroniseWithSymbol, + 'glyphBounds': instance.glyphBounds, + 'lineSpacingBehaviour': instance.lineSpacingBehaviour, + 'textBehaviour': instance.textBehaviour, }; diff --git a/lib/input/sketch/entities/layers/sketch_text.g.dart b/lib/input/sketch/entities/layers/sketch_text.g.dart index e6b35694..225a7961 100644 --- a/lib/input/sketch/entities/layers/sketch_text.g.dart +++ b/lib/input/sketch/entities/layers/sketch_text.g.dart @@ -37,7 +37,7 @@ SketchText _$SketchTextFromJson(Map json) { ? null : Style.fromJson(json['style'] as Map), maintainScrollPosition: json['maintainScrollPosition'] as bool, - attributedString: json['attributedString'] as Map, + attributedString: json['attributedString'], automaticallyDrawOnUnderlyingPath: json['automaticallyDrawOnUnderlyingPath'] as bool, dontSynchroniseWithSymbol: json['dontSynchroniseWithSymbol'] as bool, @@ -73,7 +73,6 @@ Map _$SketchTextToJson(SketchText instance) => 'maintainScrollPosition': instance.maintainScrollPosition, 'prototypeNodeUUID': instance.prototypeNodeUUID, 'CLASS_NAME': instance.CLASS_NAME, - 'attributedString': instance.attributedString, 'automaticallyDrawOnUnderlyingPath': instance.automaticallyDrawOnUnderlyingPath, 'dontSynchroniseWithSymbol': instance.dontSynchroniseWithSymbol, @@ -85,4 +84,5 @@ Map _$SketchTextToJson(SketchText instance) => '_class': instance.type, 'isVisible': instance.isVisible, 'style': instance.style, + 'attributedString': instance.attributedString, }; diff --git a/lib/input/sketch/entities/layers/symbol_master.dart b/lib/input/sketch/entities/layers/symbol_master.dart index 3e40742f..3369abb2 100644 --- a/lib/input/sketch/entities/layers/symbol_master.dart +++ b/lib/input/sketch/entities/layers/symbol_master.dart @@ -6,6 +6,7 @@ import 'package:parabeac_core/input/sketch/entities/layers/abstract_layer.dart'; import 'package:parabeac_core/input/sketch/entities/layers/flow.dart'; import 'package:parabeac_core/input/sketch/entities/objects/frame.dart'; import 'package:parabeac_core/input/sketch/entities/objects/override_property.dart'; +import 'package:parabeac_core/input/sketch/entities/objects/override_value.dart'; import 'package:parabeac_core/input/sketch/entities/style/color.dart'; import 'package:parabeac_core/input/sketch/entities/style/style.dart'; import 'package:parabeac_core/input/sketch/helper/symbol_node_mixin.dart'; diff --git a/lib/input/sketch/entities/layers/symbol_master.g.dart b/lib/input/sketch/entities/layers/symbol_master.g.dart index 73d49fc3..bae59ab4 100644 --- a/lib/input/sketch/entities/layers/symbol_master.g.dart +++ b/lib/input/sketch/entities/layers/symbol_master.g.dart @@ -68,6 +68,11 @@ SymbolMaster _$SymbolMasterFromJson(Map json) { ) ..prototypeNodeUUID = json['prototypeNodeUUID'] as String ..CLASS_NAME = json['CLASS_NAME'] as String + ..overrideValues = (json['overrideValues'] as List) + ?.map((e) => e == null + ? null + : OverridableValue.fromJson(e as Map)) + ?.toList() ..type = json['_class'] as String ..parameters = json['parameters'] as List; } @@ -97,6 +102,7 @@ Map _$SymbolMasterToJson(SymbolMaster instance) => 'hasClickThrough': instance.hasClickThrough, 'groupLayout': instance.groupLayout, 'CLASS_NAME': instance.CLASS_NAME, + 'overrideValues': instance.overrideValues, 'backgroundColor': instance.backgroundColor, 'hasBackgroundColor': instance.hasBackgroundColor, 'horizontalRulerData': instance.horizontalRulerData, From 72a52a80dd629cba4f88151f6a15a5e57fbf23b9 Mon Sep 17 00:00:00 2001 From: Bryan Figueroa Date: Fri, 5 Feb 2021 16:27:32 -0700 Subject: [PATCH 16/23] Saved screens and pages as Lists --- lib/input/helper/design_page.dart | 9 +++++---- lib/input/helper/design_project.dart | 16 ++++++++++------ lib/input/helper/map_mixin.dart | 9 --------- 3 files changed, 15 insertions(+), 19 deletions(-) delete mode 100644 lib/input/helper/map_mixin.dart diff --git a/lib/input/helper/design_page.dart b/lib/input/helper/design_page.dart index 050e13b1..5d06bc70 100644 --- a/lib/input/helper/design_page.dart +++ b/lib/input/helper/design_page.dart @@ -3,9 +3,7 @@ import 'package:parabeac_core/design_logic/design_node.dart'; import 'package:quick_log/quick_log.dart'; import 'design_screen.dart'; -import 'map_mixin.dart'; - -class DesignPage with MapMixin implements DesignNodeFactory { +class DesignPage implements DesignNodeFactory { var log = Logger('DesignPage'); String id; @@ -37,9 +35,12 @@ class DesignPage with MapMixin implements DesignNodeFactory { result['id'] = id; result['name'] = name; result['convert'] = convert; + + List tempScreens = []; for (var screen in screens) { - addToMap('screens', result, {screen.name: screen.toPBDF()}); + tempScreens.add(screen.toPBDF()); } + result['screens'] = tempScreens; return result; } diff --git a/lib/input/helper/design_project.dart b/lib/input/helper/design_project.dart index 2e4ba69a..d706993c 100644 --- a/lib/input/helper/design_project.dart +++ b/lib/input/helper/design_project.dart @@ -1,12 +1,10 @@ -import 'dart:convert'; - import 'package:parabeac_core/design_logic/abstract_design_node_factory.dart'; import 'package:parabeac_core/design_logic/design_node.dart'; import 'package:parabeac_core/input/helper/design_page.dart'; -import 'package:parabeac_core/input/helper/map_mixin.dart'; + import 'package:parabeac_core/input/sketch/entities/style/shared_style.dart'; -class DesignProject with MapMixin implements DesignNodeFactory { +class DesignProject implements DesignNodeFactory { String projectName; bool debug = false; String id; @@ -28,17 +26,23 @@ class DesignProject with MapMixin implements DesignNodeFactory { result['projectName'] = projectName; result['pbdfType'] = pbdfType; result['id'] = id; + + List tmpPages = []; + List tmpMiscPages = []; for (var page in pages) { - addToMap('pages', result, {page.name: page.toPBDF()}); + tmpPages.add(page.toPBDF()); } for (var page in miscPages) { - addToMap('miscPages', result, {page.name: page.toPBDF()}); + tmpMiscPages.add(page.toPBDF()); } for (var sharedStyle in sharedStyles) { result.addAll(sharedStyle.toJson()); } + result['pages'] = tmpPages; + result['miscPages'] = tmpMiscPages; + return result; } diff --git a/lib/input/helper/map_mixin.dart b/lib/input/helper/map_mixin.dart deleted file mode 100644 index 6a1ab881..00000000 --- a/lib/input/helper/map_mixin.dart +++ /dev/null @@ -1,9 +0,0 @@ -mixin MapMixin { - void addToMap(String key, Map destinationMap, Map source) { - if (destinationMap.containsKey(key)) { - destinationMap[key].addAll(source); - } else { - destinationMap[key] = source; - } - } -} From df7cc45455ae747e613e61d6941fc453b99aa255 Mon Sep 17 00:00:00 2001 From: Bryan Figueroa Date: Fri, 5 Feb 2021 16:29:34 -0700 Subject: [PATCH 17/23] Handle screens and pages as Lists now --- lib/input/helper/design_page.dart | 2 +- lib/input/helper/design_project.dart | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/input/helper/design_page.dart b/lib/input/helper/design_page.dart index 5d06bc70..30a86b48 100644 --- a/lib/input/helper/design_page.dart +++ b/lib/input/helper/design_page.dart @@ -56,7 +56,7 @@ class DesignPage implements DesignNodeFactory { factory DesignPage.fromPBDF(Map json) { var page = DesignPage(name: json['name'], id: json['id']); if (json.containsKey('screens')) { - (json['screens'] as Map)?.forEach((key, value) { + (json['screens'] as List)?.forEach((value) { if (value != null) { page.screens .add(DesignScreen.fromPBDF(value as Map)); diff --git a/lib/input/helper/design_project.dart b/lib/input/helper/design_project.dart index d706993c..2af8ecd7 100644 --- a/lib/input/helper/design_project.dart +++ b/lib/input/helper/design_project.dart @@ -56,7 +56,7 @@ class DesignProject implements DesignNodeFactory { var project = DesignProject(projectName: json['projectName'], id: json['id']); if (json.containsKey('pages')) { - (json['pages'] as Map)?.forEach((key, value) { + (json['pages'] as List)?.forEach((value) { if (value != null) { project.pages.add(DesignPage.fromPBDF(value as Map)); } From 149cca78e684fd0eb487832095fac0c94b23fb85 Mon Sep 17 00:00:00 2001 From: Ivan Vigliante Date: Fri, 5 Feb 2021 21:14:38 -0500 Subject: [PATCH 18/23] Added method to rewrite main() function --- lib/generation/generators/writers/pb_flutter_writer.dart | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/lib/generation/generators/writers/pb_flutter_writer.dart b/lib/generation/generators/writers/pb_flutter_writer.dart index b4dd8718..49eab96a 100644 --- a/lib/generation/generators/writers/pb_flutter_writer.dart +++ b/lib/generation/generators/writers/pb_flutter_writer.dart @@ -24,6 +24,14 @@ class PBFlutterWriter implements PBPageWriter { writer.writeAsStringSync(code); } + /// Function that allows the rewriting of the main() method inside main.dart + void rewriteMainFunction(String pathToMain, String code) { + var mainRead = File(pathToMain).readAsStringSync(); + var newMain = mainRead.replaceFirst( + RegExp(r'void main\(\)\s*{(.*|\s*)*?}'), 'void main() {$code}'); + File(pathToMain).writeAsStringSync(newMain); + } + /// Creates a new `main.dart` file that starts the Flutter application at /// `homeName` and adds the import from `main.dart` to `relativeImportPath`. Future writeMainScreenWithHome( From b3d7d384412fe53239e234a65ef6a192d01c06a4 Mon Sep 17 00:00:00 2001 From: Ivan Vigliante Date: Fri, 5 Feb 2021 22:33:25 -0500 Subject: [PATCH 19/23] provider now generates MultiProvider in main.dart --- .../pb_generation_configuration.dart | 1 + .../provider_generation_configuration.dart | 46 +++++++++++++++++++ 2 files changed, 47 insertions(+) diff --git a/lib/generation/generators/value_objects/generation_configuration/pb_generation_configuration.dart b/lib/generation/generators/value_objects/generation_configuration/pb_generation_configuration.dart index 786b04a0..172a5132 100644 --- a/lib/generation/generators/value_objects/generation_configuration/pb_generation_configuration.dart +++ b/lib/generation/generators/value_objects/generation_configuration/pb_generation_configuration.dart @@ -23,6 +23,7 @@ abstract class GenerationConfiguration { Logger logger; final Set _middleware = {}; + Set get middlewares => _middleware; ///The project that contains the node for all the pages. PBProject pbProject; diff --git a/lib/generation/generators/value_objects/generation_configuration/provider_generation_configuration.dart b/lib/generation/generators/value_objects/generation_configuration/provider_generation_configuration.dart index a6c2f98a..0f4a70a0 100644 --- a/lib/generation/generators/value_objects/generation_configuration/provider_generation_configuration.dart +++ b/lib/generation/generators/value_objects/generation_configuration/provider_generation_configuration.dart @@ -1,11 +1,17 @@ import 'package:parabeac_core/generation/generators/middleware/state_management/provider_middleware.dart'; import 'package:parabeac_core/generation/generators/value_objects/file_structure_strategy.dart/provider_file_structure_strategy.dart'; import 'package:parabeac_core/generation/generators/value_objects/generation_configuration/pb_generation_configuration.dart'; +import 'package:parabeac_core/generation/generators/writers/pb_flutter_writer.dart'; +import 'package:parabeac_core/interpret_and_optimize/entities/pb_shared_instance.dart'; +import 'package:parabeac_core/interpret_and_optimize/entities/subclasses/pb_intermediate_node.dart'; +import 'package:parabeac_core/interpret_and_optimize/helpers/pb_project.dart'; import 'package:quick_log/quick_log.dart'; class ProviderGenerationConfiguration extends GenerationConfiguration { ProviderGenerationConfiguration(); + Set registeredModels = {}; + @override Future setUpConfiguration() async { logger = Logger('Provider'); @@ -17,4 +23,44 @@ class ProviderGenerationConfiguration extends GenerationConfiguration { logger.info('Setting up the directories'); await fileStructureStrategy.setUpDirectories(); } + + @override + Future generateProject(PBProject pb_project) async { + await super.generateProject(pb_project); + if (pageWriter is PBFlutterWriter) { + (pageWriter as PBFlutterWriter).rewriteMainFunction( + fileStructureStrategy.GENERATED_PROJECT_PATH + 'lib/main.dart', + _generateMainFunction(), + ); + } + } + + ///This is going to modify the [PBIntermediateNode] in order to affect the structural patterns or file structure produced. + @override + Future applyMiddleware(PBIntermediateNode node) async { + var it = middlewares.iterator; + while (it.moveNext()) { + node = await it.current.applyMiddleware(node); + if (it.current is ProviderMiddleware && + node is PBSharedInstanceIntermediateNode) { + registeredModels.add(it.current.getName(node.functionCallName)); + } + } + return node; + } + + String _generateMainFunction() { + var providers = registeredModels + .map((e) => 'ChangeNotifierProvider(create: (_) => $e())'); + return ''' + runApp( + MultiProvider( + providers: [ + $providers + ], + child: MyApp(), + ), + ); + '''; + } } From bf43a0edb31a687731ec22bf89a6141dd1a6c1e2 Mon Sep 17 00:00:00 2001 From: Bryan Figueroa Date: Sat, 6 Feb 2021 16:36:52 -0700 Subject: [PATCH 20/23] Cleaned code --- lib/design_logic/artboard.dart | 2 -- 1 file changed, 2 deletions(-) diff --git a/lib/design_logic/artboard.dart b/lib/design_logic/artboard.dart index ef9ef10f..17a15b00 100644 --- a/lib/design_logic/artboard.dart +++ b/lib/design_logic/artboard.dart @@ -109,8 +109,6 @@ class PBArtboard extends DesignNode implements GroupNode, DesignNodeFactory { var child = DesignNode.fromPBDF(item as Map); if (child != null) { node.children.add(child); - } else { - print('it the clown'); } } } From dcfee3a677be2200f0b640b6bb7ddaeddd172916 Mon Sep 17 00:00:00 2001 From: Ivan Vigliante Date: Sat, 6 Feb 2021 20:05:01 -0500 Subject: [PATCH 21/23] main adds imports to provider and models as needed --- .../provider_generation_configuration.dart | 9 ++++++++- lib/generation/generators/writers/pb_flutter_writer.dart | 8 +++++--- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/lib/generation/generators/value_objects/generation_configuration/provider_generation_configuration.dart b/lib/generation/generators/value_objects/generation_configuration/provider_generation_configuration.dart index 0f4a70a0..de950a9b 100644 --- a/lib/generation/generators/value_objects/generation_configuration/provider_generation_configuration.dart +++ b/lib/generation/generators/value_objects/generation_configuration/provider_generation_configuration.dart @@ -6,11 +6,12 @@ import 'package:parabeac_core/interpret_and_optimize/entities/pb_shared_instance import 'package:parabeac_core/interpret_and_optimize/entities/subclasses/pb_intermediate_node.dart'; import 'package:parabeac_core/interpret_and_optimize/helpers/pb_project.dart'; import 'package:quick_log/quick_log.dart'; +import 'package:recase/recase.dart'; class ProviderGenerationConfiguration extends GenerationConfiguration { ProviderGenerationConfiguration(); - Set registeredModels = {}; + Set registeredModels = {}; @override Future setUpConfiguration() async { @@ -28,9 +29,15 @@ class ProviderGenerationConfiguration extends GenerationConfiguration { Future generateProject(PBProject pb_project) async { await super.generateProject(pb_project); if (pageWriter is PBFlutterWriter) { + var imports = ['import \'package:provider/provider.dart\';']; + imports.addAll(registeredModels + .map((e) => 'import \'models/${e.snakeCase}.dart\';') + .toList()); + (pageWriter as PBFlutterWriter).rewriteMainFunction( fileStructureStrategy.GENERATED_PROJECT_PATH + 'lib/main.dart', _generateMainFunction(), + imports: imports, ); } } diff --git a/lib/generation/generators/writers/pb_flutter_writer.dart b/lib/generation/generators/writers/pb_flutter_writer.dart index 49eab96a..7c1ee265 100644 --- a/lib/generation/generators/writers/pb_flutter_writer.dart +++ b/lib/generation/generators/writers/pb_flutter_writer.dart @@ -25,10 +25,12 @@ class PBFlutterWriter implements PBPageWriter { } /// Function that allows the rewriting of the main() method inside main.dart - void rewriteMainFunction(String pathToMain, String code) { + void rewriteMainFunction(String pathToMain, String code, + {List imports}) { var mainRead = File(pathToMain).readAsStringSync(); - var newMain = mainRead.replaceFirst( - RegExp(r'void main\(\)\s*{(.*|\s*)*?}'), 'void main() {$code}'); + var newMain = imports.join() + + mainRead.replaceFirst( + RegExp(r'void main\(\)\s*{(.*|\s*)*?}'), 'void main() {$code}'); File(pathToMain).writeAsStringSync(newMain); } From 1fd63350b05569686491db84c8499729379140ac Mon Sep 17 00:00:00 2001 From: Bryan Figueroa Date: Mon, 8 Feb 2021 15:43:44 -0700 Subject: [PATCH 22/23] Added ProviderScope to main --- .../state_management/riverpod_middleware.dart | 2 +- .../riverpod_generation_configuration.dart | 24 +++++++++++++++++++ 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/lib/generation/generators/middleware/state_management/riverpod_middleware.dart b/lib/generation/generators/middleware/state_management/riverpod_middleware.dart index d77d9c57..52dd1062 100644 --- a/lib/generation/generators/middleware/state_management/riverpod_middleware.dart +++ b/lib/generation/generators/middleware/state_management/riverpod_middleware.dart @@ -25,7 +25,7 @@ class RiverpodMiddleware extends Middleware { if (node is PBSharedInstanceIntermediateNode) { node.currentContext.project.genProjectData .addDependencies(PACKAGE_NAME, PACKAGE_VERSION); - managerData.addImport('package:flutter_riverpod/all.dart'); + managerData.addImport('package:flutter_riverpod/flutter_riverpod.dart'); watcherName = node.functionCallName.snakeCase; var watcher = PBVariable(watcherName + '_provider', 'final ', true, 'ChangeNotifierProvider((ref) => ${getName(node.functionCallName).pascalCase}())'); diff --git a/lib/generation/generators/value_objects/generation_configuration/riverpod_generation_configuration.dart b/lib/generation/generators/value_objects/generation_configuration/riverpod_generation_configuration.dart index 4642cfef..d402aa6d 100644 --- a/lib/generation/generators/value_objects/generation_configuration/riverpod_generation_configuration.dart +++ b/lib/generation/generators/value_objects/generation_configuration/riverpod_generation_configuration.dart @@ -1,6 +1,8 @@ import 'package:parabeac_core/generation/generators/middleware/state_management/riverpod_middleware.dart'; import 'package:parabeac_core/generation/generators/value_objects/file_structure_strategy.dart/riverpod_file_structure_strategy.dart'; import 'package:parabeac_core/generation/generators/value_objects/generation_configuration/pb_generation_configuration.dart'; +import 'package:parabeac_core/generation/generators/writers/pb_flutter_writer.dart'; +import 'package:parabeac_core/interpret_and_optimize/helpers/pb_project.dart'; import 'package:quick_log/quick_log.dart'; class RiverpodGenerationConfiguration extends GenerationConfiguration { @@ -17,4 +19,26 @@ class RiverpodGenerationConfiguration extends GenerationConfiguration { logger.info('Setting up the directories'); await fileStructureStrategy.setUpDirectories(); } + + @override + Future generateProject(PBProject pb_project) async { + await super.generateProject(pb_project); + if (pageWriter is PBFlutterWriter) { + (pageWriter as PBFlutterWriter).rewriteMainFunction( + fileStructureStrategy.GENERATED_PROJECT_PATH + 'lib/main.dart', + _generateMainFunction(), + imports: ["import 'package:flutter_riverpod/flutter_riverpod.dart';"], + ); + } + } + + String _generateMainFunction() { + return ''' + runApp( + ProviderScope( + child: MyApp(), + ), + ); + '''; + } } From 5aec1b4974aa9534dcf72e2015fb7e653d00f986 Mon Sep 17 00:00:00 2001 From: Ivan Vigliante Date: Mon, 8 Feb 2021 18:38:12 -0500 Subject: [PATCH 23/23] Updated pbc version in pubspec.yaml --- pubspec.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pubspec.yaml b/pubspec.yaml index 88afd166..25006c3a 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,6 +1,6 @@ name: parabeac_core description: A starting point for Dart libraries or applications. -version: 1.3.0 +version: 1.3.2 # homepage: https://www.example.com environment: