Skip to content

Commit 3374f1d

Browse files
committed
unnamed builder + other named props
1 parent cb267a6 commit 3374f1d

3 files changed

Lines changed: 48 additions & 8 deletions

File tree

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
"displayName": "XML Layout for Flutter",
44
"description": "XML Layout for Flutter. Brings Angular's style to Flutter!",
55
"publisher": "WaseemDev",
6-
"version": "0.0.25",
6+
"version": "0.0.26",
77
"icon": "images/logo.png",
88
"repository": {
99
"type": "github",

src/property-handlers/builder.test.ts

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -554,4 +554,30 @@ suite("Builder Tests", function () {
554554
const generated = generateWidget(xml);
555555
assertEqual(generated, expected);
556556
});
557+
558+
559+
test("builder without name, with other named properties (unnamed should become first)", function() {
560+
const xml = `
561+
<SliverChildBuilderDelegate childCount="4">
562+
<builder data="index, item of ctrl.products" params="context, index" nocheck>
563+
<Container />
564+
</builder>
565+
</SliverChildBuilderDelegate>
566+
`;
567+
568+
const expected = `
569+
SliverChildBuilderDelegate(
570+
(context, index) {
571+
final item = ctrl.products == null || ctrl.products.length <= index || ctrl.products.length == 0 ? null : ctrl.products[index];
572+
return Container(
573+
574+
);
575+
},
576+
childCount: 4,
577+
)
578+
`;
579+
580+
const generated = generateWidget(xml);
581+
assertEqual(generated, expected);
582+
});
557583
});

src/property-handlers/builder.ts

Lines changed: 21 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -156,18 +156,32 @@ export class BuilderHandler extends CustomPropertyHandler {
156156
const originalWidget = widget.wrappedWidgets[0];
157157
const buildersData: any[] = tempData.buildersData;
158158
let code = '';
159+
160+
// generate builders code (builder that have no names)
161+
let codes = buildersData.filter(a => !a.builderName).map(data => this.generateBuilderCode(data, generateChildWidgetCode, tabsLevel));
162+
code += codes.join(',\n');
163+
164+
if (codes.length) {
165+
code += ',\n';
166+
}
159167

160168
// generate other user-defined properties
161-
originalWidget.properties.sort(sortProperties)
169+
let propCode = originalWidget.properties.sort(sortProperties)
162170
.filter(a => !a.skipGeneratingCode && ['children', 'builder'].indexOf(a.name) === -1)
163-
.forEach(p => {
164-
code += generatePropertyCode(originalWidget, p, tabsLevel) + `,\n`;
165-
});
171+
.map(p => {
172+
return generatePropertyCode(originalWidget, p, tabsLevel);
173+
})
174+
.join(`,\n`);
175+
code += propCode;
166176

167-
// generate builders code
168-
let codes = buildersData.map(data => this.generateBuilderCode(data, generateChildWidgetCode, tabsLevel));
169-
code += codes.join(',\n');
177+
// generate builders code (builder that have names)
178+
let codes2 = buildersData.filter(a => !!a.builderName).map(data => this.generateBuilderCode(data, generateChildWidgetCode, tabsLevel));
170179

180+
if (propCode.length && codes2.length) {
181+
code += ',\n';
182+
}
183+
code += codes2.join(',\n');
184+
171185
return code;
172186
}
173187

0 commit comments

Comments
 (0)