Skip to content

Commit fae7dc4

Browse files
committed
initial experiment
1 parent bdbe4e2 commit fae7dc4

File tree

8 files changed

+76
-6
lines changed

8 files changed

+76
-6
lines changed

examples/simple_chat/lib/main.dart

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -145,7 +145,24 @@ ${GenUiPromptFragments.basicChat}''';
145145
};
146146

147147
return Scaffold(
148-
appBar: AppBar(title: Text(title)),
148+
appBar: AppBar(
149+
title: Text(title),
150+
actions: [
151+
Row(
152+
children: [
153+
const Text('Padding'),
154+
Switch(
155+
value: DebugFlags.enableLeafPadding,
156+
onChanged: (value) {
157+
setState(() {
158+
DebugFlags.enableLeafPadding = value;
159+
});
160+
},
161+
),
162+
],
163+
),
164+
],
165+
),
149166
body: SafeArea(
150167
child: Column(
151168
children: [

packages/genui/lib/genui.dart

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
library;
1111

1212
export 'src/catalog/core_catalog.dart';
13+
export 'src/catalog/core_widgets/widget_helpers.dart';
1314
export 'src/content_generator.dart';
1415
export 'src/conversation/gen_ui_conversation.dart';
1516
export 'src/core/genui_configuration.dart';

packages/genui/lib/src/catalog/core_widgets/button.dart

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import 'package:flutter/material.dart';
88
import 'package:json_schema_builder/json_schema_builder.dart';
99

10+
import 'widget_helpers.dart';
1011
import '../../core/widget_utilities.dart';
1112
import '../../model/a2ui_schemas.dart';
1213
import '../../model/catalog_item.dart';
@@ -87,6 +88,7 @@ final button = CatalogItem(
8788
foregroundColor: primary
8889
? colorScheme.onPrimary
8990
: colorScheme.onSurface,
91+
padding: DebugFlags.enableLeafPadding ? EdgeInsets.zero : null,
9092
).copyWith(textStyle: WidgetStatePropertyAll(textStyle)),
9193
onPressed: () {
9294
final JsonMap resolvedContext = resolveContext(

packages/genui/lib/src/catalog/core_widgets/card.dart

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import 'package:flutter/material.dart';
66
import 'package:json_schema_builder/json_schema_builder.dart';
77

8+
import 'widget_helpers.dart';
89
import '../../model/a2ui_schemas.dart';
910
import '../../model/catalog_item.dart';
1011
import '../../primitives/simple_items.dart';
@@ -37,10 +38,12 @@ final card = CatalogItem(
3738
final cardData = _CardData.fromMap(itemContext.data as JsonMap);
3839
return Card(
3940
color: Theme.of(itemContext.buildContext).colorScheme.surface,
40-
child: Padding(
41-
padding: const EdgeInsets.all(8.0),
42-
child: itemContext.buildChild(cardData.child),
43-
),
41+
child: DebugFlags.enableLeafPadding
42+
? itemContext.buildChild(cardData.child)
43+
: Padding(
44+
padding: const EdgeInsets.all(8.0),
45+
child: itemContext.buildChild(cardData.child),
46+
),
4447
);
4548
},
4649
exampleData: [

packages/genui/lib/src/catalog/core_widgets/image.dart

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import 'package:flutter/material.dart';
66
import 'package:json_schema_builder/json_schema_builder.dart';
77

8+
import 'widget_helpers.dart';
89
import '../../core/widget_utilities.dart';
910
import '../../model/a2ui_schemas.dart';
1011
import '../../model/catalog_item.dart';
@@ -127,6 +128,13 @@ CatalogItem _imageCatalogItem({
127128
_ => 150.0,
128129
};
129130

131+
if (DebugFlags.enableLeafPadding) {
132+
return Padding(
133+
padding: kDefaultLeafComponentPadding,
134+
child: SizedBox(width: size, height: size, child: child),
135+
);
136+
}
137+
130138
return SizedBox(width: size, height: size, child: child);
131139
},
132140
);

packages/genui/lib/src/catalog/core_widgets/text.dart

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import 'package:flutter/material.dart';
66
import 'package:flutter_markdown_plus/flutter_markdown_plus.dart';
77
import 'package:json_schema_builder/json_schema_builder.dart';
88

9+
import 'widget_helpers.dart';
910
import '../../core/widget_utilities.dart';
1011
import '../../model/a2ui_schemas.dart';
1112
import '../../model/catalog_item.dart';
@@ -90,6 +91,26 @@ final text = CatalogItem(
9091
_ => 0.0,
9192
};
9293

94+
if (DebugFlags.enableLeafPadding) {
95+
final EdgeInsets padding = switch (usageHint) {
96+
'h1' || 'h2' || 'h3' => kDefaultLeafComponentPadding.copyWith(
97+
top: 24.0,
98+
bottom: 12.0,
99+
),
100+
_ => kDefaultLeafComponentPadding,
101+
};
102+
103+
return Padding(
104+
padding: padding,
105+
child: MarkdownBody(
106+
data: currentValue ?? '',
107+
styleSheet: MarkdownStyleSheet.fromTheme(
108+
Theme.of(context),
109+
).copyWith(p: baseStyle),
110+
),
111+
);
112+
}
113+
93114
return Padding(
94115
padding: EdgeInsets.symmetric(vertical: verticalPadding),
95116
child: MarkdownBody(

packages/genui/lib/src/catalog/core_widgets/text_field.dart

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import 'package:flutter/material.dart';
66
import 'package:json_schema_builder/json_schema_builder.dart';
77

8+
import 'widget_helpers.dart';
89
import '../../core/widget_utilities.dart';
910
import '../../model/a2ui_schemas.dart';
1011
import '../../model/catalog_item.dart';
@@ -180,7 +181,7 @@ final textField = CatalogItem(
180181
return ValueListenableBuilder(
181182
valueListenable: labelNotifier,
182183
builder: (context, label, child) {
183-
return _TextField(
184+
final textFieldWidget = _TextField(
184185
initialValue: currentValue ?? '',
185186
label: label,
186187
textFieldType: textFieldData.textFieldType,
@@ -211,6 +212,14 @@ final textField = CatalogItem(
211212
);
212213
},
213214
);
215+
216+
if (DebugFlags.enableLeafPadding) {
217+
return Padding(
218+
padding: kDefaultLeafComponentPadding,
219+
child: textFieldWidget,
220+
);
221+
}
222+
return textFieldWidget;
214223
},
215224
);
216225
},

packages/genui/lib/src/catalog/core_widgets/widget_helpers.dart

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,15 @@ import '../../model/ui_models.dart';
1010
import '../../primitives/logging.dart';
1111
import '../../primitives/simple_items.dart';
1212

13+
const EdgeInsets kDefaultLeafComponentPadding = EdgeInsets.symmetric(
14+
horizontal: 16.0,
15+
vertical: 12.0,
16+
);
17+
18+
class DebugFlags {
19+
static bool enableLeafPadding = true;
20+
}
21+
1322
/// Builder function for creating a widget from a template and a list of data.
1423
///
1524
/// This is used by [ComponentChildrenBuilder] when children are defined by a

0 commit comments

Comments
 (0)