|
- John Doe
+ Jothish Kamal
-
+
-
+
-
+
diff --git a/build.yaml b/build.yaml
new file mode 100644
index 0000000..9ac3c2c
--- /dev/null
+++ b/build.yaml
@@ -0,0 +1,10 @@
+targets:
+ $default:
+ builders:
+ protoc_plugin: # Using the package name as the builder key
+ enabled: true
+ options:
+ grpc: true # Enable gRPC stub generation
+ output_directory: lib/src/generated # Specify output directory
+ generate_mixins: true # Generate mixins for classes
+ generate_kythe_info: false
diff --git a/docs/doc.md b/docs/doc.md
new file mode 100644
index 0000000..2b35aa4
--- /dev/null
+++ b/docs/doc.md
@@ -0,0 +1,467 @@
+# Comprehensive Guide to Creating Screens with Flutter SDUI and gRPC
+
+## Overview
+
+This guide explains how to create dynamic UI screens for Flutter applications using Server-Driven UI (SDUI) with gRPC. The SDUI approach allows you to define your user interface on the server and deliver it to the client app, enabling dynamic updates without requiring app releases.
+
+## Setup Requirements
+
+1. **Flutter application** with the `flutter_sdui` package
+2. **gRPC server** (can be implemented in any language that supports gRPC)
+3. **Proto definitions** from the SDUI package
+
+## Creating a gRPC Server
+
+### 1. Set Up Server Environment
+
+Example in Dart:
+```dart
+import 'package:grpc/grpc.dart';
+import 'package:flutter_sdui/src/generated/sdui.pbgrpc.dart';
+
+Future main() async {
+ final server = Server.create(
+ services: [
+ SduiServiceImpl(),
+ ],
+ );
+
+ final port = 50051;
+ await server.serve(port: port);
+ print('Server listening on port $port...');
+}
+```
+
+### 2. Implement the SDUI Service
+
+Create a class that implements the SDUI service from the protobuf definitions:
+
+```dart
+class SduiServiceImpl extends SduiServiceBase {
+ @override
+ Future getSduiWidget(
+ ServiceCall call, SduiRequest request) async {
+ // Return different UI based on the requested screen ID
+ switch (request.screenId) {
+ case 'home':
+ return _createHomeScreen();
+ case 'profile':
+ return _createProfileScreen();
+ // Add more screens as needed
+ default:
+ return _createErrorScreen();
+ }
+ }
+}
+```
+
+## Creating Screens
+
+### Basic Structure of a Screen
+
+Each screen is built as a tree of `SduiWidgetData` objects:
+
+```dart
+SduiWidgetData createScreen() {
+ final screen = SduiWidgetData()
+ ..type = WidgetType.SCAFFOLD
+ ..appBar = (SduiWidgetData()
+ ..type = WidgetType.CONTAINER
+ // Define appBar properties
+ ..child = (SduiWidgetData()
+ ..type = WidgetType.TEXT
+ ..stringAttributes['text'] = 'Screen Title'))
+ ..body = (SduiWidgetData()
+ ..type = WidgetType.COLUMN
+ ..children.addAll([
+ // Add child widgets here
+ ]));
+
+ return screen;
+}
+```
+
+### Common Widget Types
+
+#### Scaffold
+The root container for a screen:
+```dart
+SduiWidgetData()
+ ..type = WidgetType.SCAFFOLD
+ ..backgroundColor = (ColorData()
+ ..red = 255
+ ..green = 255
+ ..blue = 255
+ ..alpha = 255)
+ ..appBar = (SduiWidgetData()...)
+ ..body = (SduiWidgetData()...)
+```
+
+#### Container
+A box that can have decoration, padding, margin:
+```dart
+SduiWidgetData()
+ ..type = WidgetType.CONTAINER
+ ..padding = (EdgeInsetsData()..all = 16)
+ ..margin = (EdgeInsetsData()
+ ..top = 8
+ ..left = 16
+ ..right = 16)
+ ..boxDecoration = (BoxDecorationData()
+ ..color = (ColorData()
+ ..red = 240
+ ..green = 240
+ ..blue = 240
+ ..alpha = 255)
+ ..borderRadius = (BorderRadiusData()..all = 8))
+ ..child = (SduiWidgetData()...)
+```
+
+#### Text
+Display text with styling:
+```dart
+SduiWidgetData()
+ ..type = WidgetType.TEXT
+ ..stringAttributes['text'] = 'Hello World'
+ ..textStyle = (TextStyleData()
+ ..fontSize = 16
+ ..fontWeight = 'bold'
+ ..color = (ColorData()
+ ..red = 0
+ ..green = 0
+ ..blue = 0
+ ..alpha = 255))
+```
+
+#### Column and Row
+Layout widgets for vertical and horizontal arrangement:
+```dart
+SduiWidgetData()
+ ..type = WidgetType.COLUMN // or WidgetType.ROW
+ ..mainAxisAlignment = MainAxisAlignmentProto.MAIN_AXIS_CENTER
+ ..crossAxisAlignment = CrossAxisAlignmentProto.CROSS_AXIS_START
+ ..children.addAll([
+ // Child widgets
+ ])
+```
+
+#### Image
+Display network images:
+```dart
+SduiWidgetData()
+ ..type = WidgetType.IMAGE
+ ..stringAttributes['src'] = 'https://example.com/image.jpg'
+ ..stringAttributes['fit'] = 'cover'
+ ..doubleAttributes['width'] = 200
+ ..doubleAttributes['height'] = 150
+```
+
+#### Icon
+Display Material icons:
+```dart
+SduiWidgetData()
+ ..type = WidgetType.ICON
+ ..icon = (IconDataMessage()
+ ..name = 'home' // Material icon name
+ ..color = (ColorData()
+ ..red = 0
+ ..green = 0
+ ..blue = 0
+ ..alpha = 255)
+ ..size = 24)
+```
+
+### Advanced Styling
+
+#### Gradients
+```dart
+..boxDecoration = (BoxDecorationData()
+ ..gradient = (GradientData()
+ ..type = GradientData_GradientType.LINEAR
+ ..colors.addAll([
+ ColorData()
+ ..red = 25
+ ..green = 118
+ ..blue = 210
+ ..alpha = 255,
+ ColorData()
+ ..red = 66
+ ..green = 165
+ ..blue = 245
+ ..alpha = 255
+ ])
+ ..begin = (AlignmentData()
+ ..predefined = AlignmentData_PredefinedAlignment.TOP_LEFT)
+ ..end = (AlignmentData()
+ ..predefined = AlignmentData_PredefinedAlignment.BOTTOM_RIGHT)))
+```
+
+#### Shadows
+```dart
+..boxDecoration = (BoxDecorationData()
+ ..boxShadow.add(BoxShadowData()
+ ..color = (ColorData()
+ ..red = 0
+ ..green = 0
+ ..blue = 0
+ ..alpha = 50)
+ ..offsetX = 0
+ ..offsetY = 2
+ ..blurRadius = 4
+ ..spreadRadius = 0))
+```
+
+#### Transforms
+```dart
+..transform = (TransformData()
+ ..type = TransformData_TransformType.ROTATE
+ ..rotationAngle = 0.05) // In radians
+```
+
+## Example Screens
+
+### Home Screen with Card Layout
+```dart
+SduiWidgetData _createHomeScreen() {
+ final homeScreen = SduiWidgetData()
+ ..type = WidgetType.SCAFFOLD
+ ..appBar = (SduiWidgetData()
+ ..type = WidgetType.CONTAINER
+ ..boxDecoration = (BoxDecorationData()
+ ..color = (ColorData()
+ ..red = 25
+ ..green = 118
+ ..blue = 210
+ ..alpha = 255))
+ ..padding = (EdgeInsetsData()
+ ..top = 8
+ ..left = 16
+ ..right = 16
+ ..bottom = 8)
+ ..child = (SduiWidgetData()
+ ..type = WidgetType.TEXT
+ ..stringAttributes['text'] = 'Home Screen'
+ ..textStyle = (TextStyleData()
+ ..fontSize = 20
+ ..fontWeight = 'bold'
+ ..color = (ColorData()
+ ..red = 255
+ ..green = 255
+ ..blue = 255
+ ..alpha = 255))))
+ ..body = (SduiWidgetData()
+ ..type = WidgetType.COLUMN
+ ..children.addAll([
+ // Hero Image
+ SduiWidgetData()
+ ..type = WidgetType.CONTAINER
+ ..doubleAttributes['height'] = 200
+ ..child = (SduiWidgetData()
+ ..type = WidgetType.IMAGE
+ ..stringAttributes['src'] = 'https://picsum.photos/800/300'
+ ..stringAttributes['fit'] = 'cover'),
+
+ // Feature card
+ SduiWidgetData()
+ ..type = WidgetType.CONTAINER
+ ..margin = (EdgeInsetsData()..all = 16)
+ ..padding = (EdgeInsetsData()..all = 16)
+ ..boxDecoration = (BoxDecorationData()
+ ..borderRadius = (BorderRadiusData()..all = 8)
+ ..color = (ColorData()
+ ..red = 240
+ ..green = 240
+ ..blue = 240
+ ..alpha = 255))
+ ..child = (SduiWidgetData()
+ ..type = WidgetType.COLUMN
+ ..children.addAll([
+ SduiWidgetData()
+ ..type = WidgetType.TEXT
+ ..stringAttributes['text'] = 'Feature Card'
+ ..textStyle = (TextStyleData()
+ ..fontSize = 18
+ ..fontWeight = 'bold'),
+ SduiWidgetData()
+ ..type = WidgetType.SIZED_BOX
+ ..doubleAttributes['height'] = 8,
+ SduiWidgetData()
+ ..type = WidgetType.TEXT
+ ..stringAttributes['text'] = 'This is a description of the feature'
+ ]))
+ ]));
+
+ return homeScreen;
+}
+```
+
+### Profile Screen with Avatar
+```dart
+SduiWidgetData _createProfileScreen() {
+ final profileScreen = SduiWidgetData()
+ ..type = WidgetType.SCAFFOLD
+ ..backgroundColor = (ColorData()
+ ..red = 245
+ ..green = 245
+ ..blue = 245
+ ..alpha = 255)
+ ..body = (SduiWidgetData()
+ ..type = WidgetType.COLUMN
+ ..children.addAll([
+ // Profile Header
+ SduiWidgetData()
+ ..type = WidgetType.CONTAINER
+ ..color = (ColorData()
+ ..red = 76
+ ..green = 175
+ ..blue = 80
+ ..alpha = 255)
+ ..padding = (EdgeInsetsData()
+ ..top = 40
+ ..bottom = 20)
+ ..child = (SduiWidgetData()
+ ..type = WidgetType.COLUMN
+ ..mainAxisAlignment = MainAxisAlignmentProto.MAIN_AXIS_CENTER
+ ..crossAxisAlignment = CrossAxisAlignmentProto.CROSS_AXIS_CENTER
+ ..children.addAll([
+ // Avatar
+ SduiWidgetData()
+ ..type = WidgetType.CONTAINER
+ ..doubleAttributes['width'] = 100
+ ..doubleAttributes['height'] = 100
+ ..boxDecoration = (BoxDecorationData()
+ ..shape = BoxShapeProto.CIRCLE
+ ..border = (BorderData()
+ ..all = (BorderSideData()
+ ..color = (ColorData()
+ ..red = 255
+ ..green = 255
+ ..blue = 255
+ ..alpha = 255)
+ ..width = 3
+ ..style = BorderStyleProto.SOLID)))
+ ..child = (SduiWidgetData()
+ ..type = WidgetType.IMAGE
+ ..stringAttributes['src'] = 'https://randomuser.me/api/portraits/women/44.jpg'
+ ..stringAttributes['fit'] = 'cover'),
+
+ // Name
+ SduiWidgetData()
+ ..type = WidgetType.SIZED_BOX
+ ..doubleAttributes['height'] = 16,
+ SduiWidgetData()
+ ..type = WidgetType.TEXT
+ ..stringAttributes['text'] = 'Sarah Johnson'
+ ..textStyle = (TextStyleData()
+ ..fontSize = 24
+ ..fontWeight = 'bold'
+ ..color = (ColorData()
+ ..red = 255
+ ..green = 255
+ ..blue = 255
+ ..alpha = 255))
+ ]))
+ ]));
+
+ return profileScreen;
+}
+```
+
+## Best Practices
+
+1. **Structure Your Code**
+ - Create helper methods for repeated UI patterns
+ - Break complex screens into logical sections
+
+2. **Handle Errors Gracefully**
+ - Always provide an error screen for unknown screen IDs
+ - Include helpful information in error screens
+
+3. **Optimize Network Usage**
+ - Keep UI definitions concise
+ - Consider caching common UI components
+
+4. **Progressive Enhancement**
+ - Start with simple layouts and add complexity gradually
+ - Test on different device sizes
+
+5. **Naming Conventions**
+ - Use clear, consistent naming for screen IDs
+ - Document the purpose of each screen
+
+## Advanced Techniques
+
+### Reusable Components
+
+Create helper methods for commonly used components:
+
+```dart
+SduiWidgetData _createSettingItem(String title, String subtitle, String iconName) {
+ return SduiWidgetData()
+ ..type = WidgetType.CONTAINER
+ ..padding = (EdgeInsetsData()
+ ..all = 12)
+ ..boxDecoration = (BoxDecorationData()
+ ..borderRadius = (BorderRadiusData()..all = 8)
+ ..color = (ColorData()
+ ..red = 255
+ ..green = 255
+ ..blue = 255
+ ..alpha = 255))
+ ..child = (SduiWidgetData()
+ ..type = WidgetType.ROW
+ ..children.addAll([
+ // Icon
+ SduiWidgetData()
+ ..type = WidgetType.ICON
+ ..icon = (IconDataMessage()
+ ..name = iconName),
+ // Content
+ SduiWidgetData()
+ ..type = WidgetType.COLUMN
+ ..children.addAll([
+ SduiWidgetData()
+ ..type = WidgetType.TEXT
+ ..stringAttributes['text'] = title,
+ SduiWidgetData()
+ ..type = WidgetType.TEXT
+ ..stringAttributes['text'] = subtitle
+ ])
+ ]));
+}
+```
+
+### Responsive Design
+
+Adjust layouts based on screen size:
+
+```dart
+// Check device width from client and adapt layout
+if (deviceWidth > 600) {
+ // Tablet layout with multi-column grid
+ return createTabletLayout();
+} else {
+ // Phone layout with single column
+ return createPhoneLayout();
+}
+```
+
+## Troubleshooting
+
+1. **Missing Properties**
+ - Ensure all required properties are set for each widget type
+ - Check for typos in property names
+
+2. **Enum Value Issues**
+ - Ensure you're using the correct enum values defined in the proto files
+ - Watch for renamed enum values to avoid conflicts
+
+3. **Nested Structure Problems**
+ - Verify that all parentheses and brackets are properly closed
+ - Maintain consistent indentation for readability
+
+4. **Type Mismatches**
+ - Double-check types for numeric values, especially when converting between int and double
+ - Ensure string attributes are used for text content
+
+By following this guide, you can create rich, dynamic UIs that are delivered from your server to Flutter clients via gRPC.
\ No newline at end of file
diff --git a/example/grpc_example.dart b/example/grpc_example.dart
new file mode 100644
index 0000000..f0b699d
--- /dev/null
+++ b/example/grpc_example.dart
@@ -0,0 +1,118 @@
+import 'package:flutter/material.dart';
+import 'package:flutter_sdui/flutter_sdui.dart';
+
+void main() {
+ runApp(const MyApp());
+}
+
+class MyApp extends StatelessWidget {
+ const MyApp({super.key});
+
+ @override
+ Widget build(BuildContext context) {
+ return MaterialApp(
+ title: 'SDUI gRPC Demo',
+ theme: ThemeData(
+ colorScheme: ColorScheme.fromSeed(seedColor: Colors.blue),
+ useMaterial3: true,
+ ),
+ home: const GrpcRendererDemo(),
+ );
+ }
+}
+
+class GrpcRendererDemo extends StatefulWidget {
+ const GrpcRendererDemo({super.key});
+
+ @override
+ State createState() => _GrpcRendererDemoState();
+}
+
+class _GrpcRendererDemoState extends State {
+ late SduiGrpcClient _grpcClient;
+ String _screenId = 'home';
+
+ @override
+ void initState() {
+ super.initState();
+ // Connect to your gRPC server
+ _grpcClient = SduiGrpcClient(
+ host: 'localhost', // Replace with your server address
+ port: 50051, // Replace with your server port
+ );
+ }
+
+ @override
+ void dispose() {
+ // Close the gRPC connection when done
+ _grpcClient.dispose();
+ super.dispose();
+ }
+
+ @override
+ Widget build(BuildContext context) {
+ return Scaffold(
+ appBar: AppBar(
+ title: const Text('SDUI gRPC Demo'),
+ ),
+ body: Column(
+ children: [
+ // Screen selector
+ Padding(
+ padding: const EdgeInsets.all(8.0),
+ child: Row(
+ children: [
+ const Text('Screen: '),
+ const SizedBox(width: 8),
+ DropdownButton(
+ value: _screenId,
+ items: const [
+ DropdownMenuItem(value: 'home', child: Text('Home')),
+ DropdownMenuItem(value: 'profile', child: Text('Profile')),
+ DropdownMenuItem(
+ value: 'settings', child: Text('Settings')),
+ ],
+ onChanged: (value) {
+ if (value != null) {
+ setState(() {
+ _screenId = value;
+ });
+ }
+ },
+ ),
+ ],
+ ),
+ ),
+
+ // SDUI Renderer that fetches UI from gRPC server
+ Expanded(
+ child: SduiGrpcRenderer(
+ client: _grpcClient,
+ screenId: _screenId,
+ loadingWidget: const Center(
+ child: CircularProgressIndicator(),
+ ),
+ errorBuilder: (context, error) {
+ return Center(
+ child: Column(
+ mainAxisAlignment: MainAxisAlignment.center,
+ children: [
+ const Icon(Icons.error, color: Colors.red, size: 48),
+ const SizedBox(height: 16),
+ Text('Error: $error'),
+ const SizedBox(height: 16),
+ ElevatedButton(
+ onPressed: () => setState(() {}),
+ child: const Text('Retry'),
+ ),
+ ],
+ ),
+ );
+ },
+ ),
+ ),
+ ],
+ ),
+ );
+ }
+}
diff --git a/example/grpc_server_example_dart.dart b/example/grpc_server_example_dart.dart
new file mode 100644
index 0000000..fabb3a4
--- /dev/null
+++ b/example/grpc_server_example_dart.dart
@@ -0,0 +1,294 @@
+// Server implementation example (Dart)
+// Note: This is a standalone Dart server, not a Flutter application
+// Run with: dart run example/grpc_server_example.dart
+import 'package:grpc/grpc.dart';
+import 'package:flutter_sdui/src/generated/sdui.pbgrpc.dart';
+
+Future main() async {
+ final server = Server.create(
+ services: [
+ SduiServiceImpl(),
+ ],
+ );
+
+ final port = 50051;
+ await server.serve(port: port);
+ print('Server listening on port $port...');
+ print('Press Ctrl+C to stop');
+}
+
+// Implementation of the SDUI service
+class SduiServiceImpl extends SduiServiceBase {
+ @override
+ Future getSduiWidget(
+ ServiceCall call, SduiRequest request) async {
+ // Based on the requested screen, return different UI definitions
+ print('Received request for screen: ${request.screenId}');
+ switch (request.screenId) {
+ case 'home':
+ return _createHomeScreen();
+ case 'profile':
+ return _createProfileScreen();
+ case 'settings':
+ return _createSettingsScreen();
+ default:
+ // Default or error screen
+ print('Warning: Unknown screen ID requested: ${request.screenId}');
+ return _createErrorScreen();
+ }
+ }
+
+ // Sample screen definitions
+ SduiWidgetData _createHomeScreen() {
+ final homeScreen = SduiWidgetData()
+ ..type = WidgetType.SCAFFOLD
+ ..appBar = (SduiWidgetData()
+ ..type = WidgetType.CONTAINER
+ ..boxDecoration = (BoxDecorationData()
+ ..color = (ColorData()
+ ..red = 25
+ ..green = 118
+ ..blue = 210
+ ..alpha = 255))
+ ..padding = (EdgeInsetsData()
+ ..top = 8
+ ..left = 16
+ ..right = 16
+ ..bottom = 8)
+ ..child = (SduiWidgetData()
+ ..type = WidgetType.TEXT
+ ..stringAttributes['text'] = 'Home Screen'
+ ..textStyle = (TextStyleData()
+ ..fontSize = 20
+ ..fontWeight = 'bold'
+ ..color = (ColorData()
+ ..red = 255
+ ..green = 255
+ ..blue = 255
+ ..alpha = 255))))
+ ..body = (SduiWidgetData()
+ ..type = WidgetType.COLUMN
+ ..children.addAll([
+ SduiWidgetData()
+ ..type = WidgetType.CONTAINER
+ ..padding = (EdgeInsetsData()..all = 16)
+ ..child = (SduiWidgetData()
+ ..type = WidgetType.TEXT
+ ..stringAttributes['text'] = 'Welcome to Server-Driven UI!'
+ ..textStyle = (TextStyleData()
+ ..fontSize = 22
+ ..fontWeight = 'bold')),
+ SduiWidgetData()
+ ..type = WidgetType.CONTAINER
+ ..padding = (EdgeInsetsData()
+ ..left = 16
+ ..right = 16
+ ..bottom = 16)
+ ..child = (SduiWidgetData()
+ ..type = WidgetType.TEXT
+ ..stringAttributes['text'] =
+ 'This UI is rendered from data sent by the server via gRPC.'),
+ SduiWidgetData()
+ ..type = WidgetType.CONTAINER
+ ..padding = (EdgeInsetsData()..all = 16)
+ ..margin = (EdgeInsetsData()
+ ..left = 16
+ ..right = 16)
+ ..boxDecoration = (BoxDecorationData()
+ ..color = (ColorData()
+ ..red = 240
+ ..green = 240
+ ..blue = 240
+ ..alpha = 255))
+ ..child = (SduiWidgetData()
+ ..type = WidgetType.ROW
+ ..children.addAll([
+ SduiWidgetData()
+ ..type = WidgetType.ICON
+ ..icon = (IconDataMessage()
+ ..name = 'info'
+ ..color = (ColorData()
+ ..red = 25
+ ..green = 118
+ ..blue = 210
+ ..alpha = 255)
+ ..size = 24),
+ SduiWidgetData()
+ ..type = WidgetType.SIZED_BOX
+ ..doubleAttributes['width'] = 16,
+ SduiWidgetData()
+ ..type = WidgetType.TEXT
+ ..stringAttributes['text'] =
+ 'Select a screen from the dropdown.'
+ ]))
+ ]));
+
+ return homeScreen;
+ }
+
+ SduiWidgetData _createProfileScreen() {
+ final profileScreen = SduiWidgetData()
+ ..type = WidgetType.SCAFFOLD
+ ..appBar = (SduiWidgetData()
+ ..type = WidgetType.CONTAINER
+ ..boxDecoration = (BoxDecorationData()
+ ..color = (ColorData()
+ ..red = 76
+ ..green = 175
+ ..blue = 80
+ ..alpha = 255))
+ ..padding = (EdgeInsetsData()
+ ..top = 8
+ ..left = 16
+ ..right = 16
+ ..bottom = 8)
+ ..child = (SduiWidgetData()
+ ..type = WidgetType.TEXT
+ ..stringAttributes['text'] = 'Profile Screen'
+ ..textStyle = (TextStyleData()
+ ..fontSize = 20
+ ..fontWeight = 'bold'
+ ..color = (ColorData()
+ ..red = 255
+ ..green = 255
+ ..blue = 255
+ ..alpha = 255))))
+ ..body = (SduiWidgetData()
+ ..type = WidgetType.COLUMN
+ ..children.addAll([
+ SduiWidgetData()
+ ..type = WidgetType.CONTAINER
+ ..padding = (EdgeInsetsData()..all = 16)
+ ..child = (SduiWidgetData()
+ ..type = WidgetType.TEXT
+ ..stringAttributes['text'] = 'User Profile'
+ ..textStyle = (TextStyleData()
+ ..fontSize = 22
+ ..fontWeight = 'bold')),
+ SduiWidgetData()
+ ..type = WidgetType.CONTAINER
+ ..padding = (EdgeInsetsData()
+ ..left = 16
+ ..right = 16
+ ..bottom = 24)
+ ..child = (SduiWidgetData()
+ ..type = WidgetType.TEXT
+ ..stringAttributes['text'] =
+ 'This is a sample profile page rendered from gRPC data.'),
+ ]));
+
+ return profileScreen;
+ }
+
+ SduiWidgetData _createSettingsScreen() {
+ final settingsScreen = SduiWidgetData()
+ ..type = WidgetType.SCAFFOLD
+ ..appBar = (SduiWidgetData()
+ ..type = WidgetType.CONTAINER
+ ..boxDecoration = (BoxDecorationData()
+ ..color = (ColorData()
+ ..red = 121
+ ..green = 85
+ ..blue = 72
+ ..alpha = 255))
+ ..padding = (EdgeInsetsData()
+ ..top = 8
+ ..left = 16
+ ..right = 16
+ ..bottom = 8)
+ ..child = (SduiWidgetData()
+ ..type = WidgetType.TEXT
+ ..stringAttributes['text'] = 'Settings Screen'
+ ..textStyle = (TextStyleData()
+ ..fontSize = 20
+ ..fontWeight = 'bold'
+ ..color = (ColorData()
+ ..red = 255
+ ..green = 255
+ ..blue = 255
+ ..alpha = 255))))
+ ..body = (SduiWidgetData()
+ ..type = WidgetType.COLUMN
+ ..children.addAll([
+ SduiWidgetData()
+ ..type = WidgetType.CONTAINER
+ ..padding = (EdgeInsetsData()..all = 16)
+ ..child = (SduiWidgetData()
+ ..type = WidgetType.TEXT
+ ..stringAttributes['text'] = 'App Settings'
+ ..textStyle = (TextStyleData()
+ ..fontSize = 22
+ ..fontWeight = 'bold')),
+ SduiWidgetData()
+ ..type = WidgetType.CONTAINER
+ ..padding = (EdgeInsetsData()
+ ..left = 16
+ ..right = 16
+ ..bottom = 24)
+ ..child = (SduiWidgetData()
+ ..type = WidgetType.TEXT
+ ..stringAttributes['text'] =
+ 'This is a sample settings page from the gRPC server.'),
+ ]));
+
+ return settingsScreen;
+ }
+
+ SduiWidgetData _createErrorScreen() {
+ final errorScreen = SduiWidgetData()
+ ..type = WidgetType.SCAFFOLD
+ ..appBar = (SduiWidgetData()
+ ..type = WidgetType.CONTAINER
+ ..boxDecoration = (BoxDecorationData()
+ ..color = (ColorData()
+ ..red = 211
+ ..green = 47
+ ..blue = 47
+ ..alpha = 255))
+ ..padding = (EdgeInsetsData()
+ ..top = 8
+ ..left = 16
+ ..right = 16
+ ..bottom = 8)
+ ..child = (SduiWidgetData()
+ ..type = WidgetType.TEXT
+ ..stringAttributes['text'] = 'Error'
+ ..textStyle = (TextStyleData()
+ ..fontSize = 20
+ ..fontWeight = 'bold'
+ ..color = (ColorData()
+ ..red = 255
+ ..green = 255
+ ..blue = 255
+ ..alpha = 255))))
+ ..body = (SduiWidgetData()
+ ..type = WidgetType.COLUMN
+ ..children.addAll([
+ SduiWidgetData()
+ ..type = WidgetType.CONTAINER
+ ..padding = (EdgeInsetsData()..all = 16)
+ ..child = (SduiWidgetData()
+ ..type = WidgetType.TEXT
+ ..stringAttributes['text'] = 'Screen Not Found'
+ ..textStyle = (TextStyleData()
+ ..fontSize = 24
+ ..fontWeight = 'bold'
+ ..color = (ColorData()
+ ..red = 211
+ ..green = 47
+ ..blue = 47
+ ..alpha = 255))),
+ SduiWidgetData()
+ ..type = WidgetType.CONTAINER
+ ..padding = (EdgeInsetsData()
+ ..left = 16
+ ..right = 16)
+ ..child = (SduiWidgetData()
+ ..type = WidgetType.TEXT
+ ..stringAttributes['text'] =
+ 'The requested screen could not be found. Try a different screen ID.'),
+ ]));
+
+ return errorScreen;
+ }
+}
diff --git a/lib/flutter_sdui.dart b/lib/flutter_sdui.dart
index 298576d..a7e5442 100644
--- a/lib/flutter_sdui.dart
+++ b/lib/flutter_sdui.dart
@@ -1,5 +1,29 @@
-/// A Calculator.
-class Calculator {
- /// Returns [value] plus 1.
- int addOne(int value) => value + 1;
-}
+/// Flutter SDUI Package
+///
+/// A Flutter package to render server driven UI.
+library;
+
+// Export the core parser and widget base
+export 'src/parser/sdui_proto_parser.dart'; // New proto parser
+export 'src/widgets/sdui_widget.dart';
+
+// Export individual widget models
+export 'src/widgets/sdui_column.dart';
+export 'src/widgets/sdui_row.dart';
+export 'src/widgets/sdui_text.dart';
+export 'src/widgets/sdui_image.dart';
+export 'src/widgets/sdui_sized_box.dart';
+export 'src/widgets/sdui_container.dart';
+export 'src/widgets/sdui_scaffold.dart';
+export 'src/widgets/sdui_spacer.dart';
+export 'src/widgets/sdui_icon.dart';
+
+// Export gRPC client and renderer
+export 'src/service/sdui_grpc_client.dart';
+export 'src/renderer/sdui_grpc_renderer.dart';
+
+// Export generated Protobuf models for public use
+export 'src/generated/sdui.pb.dart';
+export 'src/generated/sdui.pbgrpc.dart';
+export 'src/generated/sdui.pbenum.dart';
+export 'src/generated/sdui.pbjson.dart';
diff --git a/lib/src/generated/sdui.pb.dart b/lib/src/generated/sdui.pb.dart
new file mode 100644
index 0000000..cb01cf5
--- /dev/null
+++ b/lib/src/generated/sdui.pb.dart
@@ -0,0 +1,3717 @@
+//
+// Generated code. Do not modify.
+// source: sdui.proto
+//
+// @dart = 3.3
+
+// ignore_for_file: annotate_overrides, camel_case_types, comment_references
+// ignore_for_file: constant_identifier_names, library_prefixes
+// ignore_for_file: non_constant_identifier_names, prefer_final_fields
+// ignore_for_file: unnecessary_import, unnecessary_this, unused_import
+
+import 'dart:core' as $core;
+
+import 'package:protobuf/protobuf.dart' as $pb;
+
+import 'sdui.pbenum.dart';
+
+export 'package:protobuf/protobuf.dart' show GeneratedMessageGenericExtensions;
+
+export 'sdui.pbenum.dart';
+
+/// Generic Widget message
+class SduiWidgetData extends $pb.GeneratedMessage {
+ factory SduiWidgetData({
+ WidgetType? type,
+ $core.Iterable<$core.MapEntry<$core.String, $core.String>>?
+ stringAttributes,
+ $core.Iterable<$core.MapEntry<$core.String, $core.double>>?
+ doubleAttributes,
+ $core.Iterable<$core.MapEntry<$core.String, $core.bool>>? boolAttributes,
+ $core.Iterable<$core.MapEntry<$core.String, $core.int>>? intAttributes,
+ TextStyleData? textStyle,
+ EdgeInsetsData? padding,
+ EdgeInsetsData? margin,
+ ColorData? color,
+ IconDataMessage? icon,
+ BoxDecorationData? boxDecoration,
+ $core.Iterable? children,
+ SduiWidgetData? child,
+ SduiWidgetData? appBar,
+ SduiWidgetData? body,
+ SduiWidgetData? floatingActionButton,
+ ColorData? backgroundColor,
+ SduiWidgetData? bottomNavigationBar,
+ SduiWidgetData? drawer,
+ SduiWidgetData? endDrawer,
+ SduiWidgetData? bottomSheet,
+ $core.bool? resizeToAvoidBottomInset,
+ $core.bool? primary,
+ FloatingActionButtonLocationProto? floatingActionButtonLocation,
+ $core.bool? extendBody,
+ $core.bool? extendBodyBehindAppBar,
+ ColorData? drawerScrimColor,
+ $core.double? drawerEdgeDragWidth,
+ $core.bool? drawerEnableOpenDragGesture,
+ $core.bool? endDrawerEnableOpenDragGesture,
+ MainAxisAlignmentProto? mainAxisAlignment,
+ CrossAxisAlignmentProto? crossAxisAlignment,
+ MainAxisSizeProto? mainAxisSize,
+ TextDirectionProto? textDirection,
+ VerticalDirectionProto? verticalDirection,
+ TextBaselineProto? textBaseline,
+ AlignmentData? alignment,
+ BoxConstraintsData? constraints,
+ TransformData? transform,
+ AlignmentData? transformAlignment,
+ ClipProto? clipBehavior,
+ TextAlignProto? textAlign,
+ TextOverflowProto? overflow,
+ $core.int? maxLines,
+ $core.bool? softWrap,
+ $core.double? letterSpacing,
+ $core.double? wordSpacing,
+ $core.double? height,
+ $core.String? fontFamily,
+ ImageRepeatProto? repeat,
+ BlendModeProto? colorBlendMode,
+ RectData? centerSlice,
+ $core.bool? matchTextDirection,
+ $core.bool? gaplessPlayback,
+ FilterQualityProto? filterQuality,
+ $core.int? cacheWidth,
+ $core.int? cacheHeight,
+ $core.double? scale,
+ $core.String? semanticLabel,
+ SduiWidgetData? errorWidget,
+ SduiWidgetData? loadingWidget,
+ $core.double? opacity,
+ $core.bool? applyTextScaling,
+ $core.Iterable? shadows,
+ }) {
+ final $result = create();
+ if (type != null) {
+ $result.type = type;
+ }
+ if (stringAttributes != null) {
+ $result.stringAttributes.addEntries(stringAttributes);
+ }
+ if (doubleAttributes != null) {
+ $result.doubleAttributes.addEntries(doubleAttributes);
+ }
+ if (boolAttributes != null) {
+ $result.boolAttributes.addEntries(boolAttributes);
+ }
+ if (intAttributes != null) {
+ $result.intAttributes.addEntries(intAttributes);
+ }
+ if (textStyle != null) {
+ $result.textStyle = textStyle;
+ }
+ if (padding != null) {
+ $result.padding = padding;
+ }
+ if (margin != null) {
+ $result.margin = margin;
+ }
+ if (color != null) {
+ $result.color = color;
+ }
+ if (icon != null) {
+ $result.icon = icon;
+ }
+ if (boxDecoration != null) {
+ $result.boxDecoration = boxDecoration;
+ }
+ if (children != null) {
+ $result.children.addAll(children);
+ }
+ if (child != null) {
+ $result.child = child;
+ }
+ if (appBar != null) {
+ $result.appBar = appBar;
+ }
+ if (body != null) {
+ $result.body = body;
+ }
+ if (floatingActionButton != null) {
+ $result.floatingActionButton = floatingActionButton;
+ }
+ if (backgroundColor != null) {
+ $result.backgroundColor = backgroundColor;
+ }
+ if (bottomNavigationBar != null) {
+ $result.bottomNavigationBar = bottomNavigationBar;
+ }
+ if (drawer != null) {
+ $result.drawer = drawer;
+ }
+ if (endDrawer != null) {
+ $result.endDrawer = endDrawer;
+ }
+ if (bottomSheet != null) {
+ $result.bottomSheet = bottomSheet;
+ }
+ if (resizeToAvoidBottomInset != null) {
+ $result.resizeToAvoidBottomInset = resizeToAvoidBottomInset;
+ }
+ if (primary != null) {
+ $result.primary = primary;
+ }
+ if (floatingActionButtonLocation != null) {
+ $result.floatingActionButtonLocation = floatingActionButtonLocation;
+ }
+ if (extendBody != null) {
+ $result.extendBody = extendBody;
+ }
+ if (extendBodyBehindAppBar != null) {
+ $result.extendBodyBehindAppBar = extendBodyBehindAppBar;
+ }
+ if (drawerScrimColor != null) {
+ $result.drawerScrimColor = drawerScrimColor;
+ }
+ if (drawerEdgeDragWidth != null) {
+ $result.drawerEdgeDragWidth = drawerEdgeDragWidth;
+ }
+ if (drawerEnableOpenDragGesture != null) {
+ $result.drawerEnableOpenDragGesture = drawerEnableOpenDragGesture;
+ }
+ if (endDrawerEnableOpenDragGesture != null) {
+ $result.endDrawerEnableOpenDragGesture = endDrawerEnableOpenDragGesture;
+ }
+ if (mainAxisAlignment != null) {
+ $result.mainAxisAlignment = mainAxisAlignment;
+ }
+ if (crossAxisAlignment != null) {
+ $result.crossAxisAlignment = crossAxisAlignment;
+ }
+ if (mainAxisSize != null) {
+ $result.mainAxisSize = mainAxisSize;
+ }
+ if (textDirection != null) {
+ $result.textDirection = textDirection;
+ }
+ if (verticalDirection != null) {
+ $result.verticalDirection = verticalDirection;
+ }
+ if (textBaseline != null) {
+ $result.textBaseline = textBaseline;
+ }
+ if (alignment != null) {
+ $result.alignment = alignment;
+ }
+ if (constraints != null) {
+ $result.constraints = constraints;
+ }
+ if (transform != null) {
+ $result.transform = transform;
+ }
+ if (transformAlignment != null) {
+ $result.transformAlignment = transformAlignment;
+ }
+ if (clipBehavior != null) {
+ $result.clipBehavior = clipBehavior;
+ }
+ if (textAlign != null) {
+ $result.textAlign = textAlign;
+ }
+ if (overflow != null) {
+ $result.overflow = overflow;
+ }
+ if (maxLines != null) {
+ $result.maxLines = maxLines;
+ }
+ if (softWrap != null) {
+ $result.softWrap = softWrap;
+ }
+ if (letterSpacing != null) {
+ $result.letterSpacing = letterSpacing;
+ }
+ if (wordSpacing != null) {
+ $result.wordSpacing = wordSpacing;
+ }
+ if (height != null) {
+ $result.height = height;
+ }
+ if (fontFamily != null) {
+ $result.fontFamily = fontFamily;
+ }
+ if (repeat != null) {
+ $result.repeat = repeat;
+ }
+ if (colorBlendMode != null) {
+ $result.colorBlendMode = colorBlendMode;
+ }
+ if (centerSlice != null) {
+ $result.centerSlice = centerSlice;
+ }
+ if (matchTextDirection != null) {
+ $result.matchTextDirection = matchTextDirection;
+ }
+ if (gaplessPlayback != null) {
+ $result.gaplessPlayback = gaplessPlayback;
+ }
+ if (filterQuality != null) {
+ $result.filterQuality = filterQuality;
+ }
+ if (cacheWidth != null) {
+ $result.cacheWidth = cacheWidth;
+ }
+ if (cacheHeight != null) {
+ $result.cacheHeight = cacheHeight;
+ }
+ if (scale != null) {
+ $result.scale = scale;
+ }
+ if (semanticLabel != null) {
+ $result.semanticLabel = semanticLabel;
+ }
+ if (errorWidget != null) {
+ $result.errorWidget = errorWidget;
+ }
+ if (loadingWidget != null) {
+ $result.loadingWidget = loadingWidget;
+ }
+ if (opacity != null) {
+ $result.opacity = opacity;
+ }
+ if (applyTextScaling != null) {
+ $result.applyTextScaling = applyTextScaling;
+ }
+ if (shadows != null) {
+ $result.shadows.addAll(shadows);
+ }
+ return $result;
+ }
+ SduiWidgetData._() : super();
+ factory SduiWidgetData.fromBuffer($core.List<$core.int> i,
+ [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
+ create()..mergeFromBuffer(i, r);
+ factory SduiWidgetData.fromJson($core.String i,
+ [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
+ create()..mergeFromJson(i, r);
+
+ static final $pb.BuilderInfo _i = $pb.BuilderInfo(
+ _omitMessageNames ? '' : 'SduiWidgetData',
+ package: const $pb.PackageName(_omitMessageNames ? '' : 'flutter_sdui'),
+ createEmptyInstance: create)
+ ..e(1, _omitFieldNames ? '' : 'type', $pb.PbFieldType.OE,
+ defaultOrMaker: WidgetType.WIDGET_TYPE_UNSPECIFIED,
+ valueOf: WidgetType.valueOf,
+ enumValues: WidgetType.values)
+ ..m<$core.String, $core.String>(
+ 2, _omitFieldNames ? '' : 'stringAttributes',
+ entryClassName: 'SduiWidgetData.StringAttributesEntry',
+ keyFieldType: $pb.PbFieldType.OS,
+ valueFieldType: $pb.PbFieldType.OS,
+ packageName: const $pb.PackageName('flutter_sdui'))
+ ..m<$core.String, $core.double>(
+ 3, _omitFieldNames ? '' : 'doubleAttributes',
+ entryClassName: 'SduiWidgetData.DoubleAttributesEntry',
+ keyFieldType: $pb.PbFieldType.OS,
+ valueFieldType: $pb.PbFieldType.OD,
+ packageName: const $pb.PackageName('flutter_sdui'))
+ ..m<$core.String, $core.bool>(4, _omitFieldNames ? '' : 'boolAttributes',
+ entryClassName: 'SduiWidgetData.BoolAttributesEntry',
+ keyFieldType: $pb.PbFieldType.OS,
+ valueFieldType: $pb.PbFieldType.OB,
+ packageName: const $pb.PackageName('flutter_sdui'))
+ ..m<$core.String, $core.int>(5, _omitFieldNames ? '' : 'intAttributes',
+ entryClassName: 'SduiWidgetData.IntAttributesEntry',
+ keyFieldType: $pb.PbFieldType.OS,
+ valueFieldType: $pb.PbFieldType.O3,
+ packageName: const $pb.PackageName('flutter_sdui'))
+ ..aOM(6, _omitFieldNames ? '' : 'textStyle',
+ subBuilder: TextStyleData.create)
+ ..aOM(7, _omitFieldNames ? '' : 'padding',
+ subBuilder: EdgeInsetsData.create)
+ ..aOM(8, _omitFieldNames ? '' : 'margin',
+ subBuilder: EdgeInsetsData.create)
+ ..aOM(9, _omitFieldNames ? '' : 'color',
+ subBuilder: ColorData.create)
+ ..aOM(10, _omitFieldNames ? '' : 'icon',
+ subBuilder: IconDataMessage.create)
+ ..aOM(11, _omitFieldNames ? '' : 'boxDecoration',
+ subBuilder: BoxDecorationData.create)
+ ..pc(
+ 12, _omitFieldNames ? '' : 'children', $pb.PbFieldType.PM,
+ subBuilder: SduiWidgetData.create)
+ ..aOM(13, _omitFieldNames ? '' : 'child',
+ subBuilder: SduiWidgetData.create)
+ ..aOM(14, _omitFieldNames ? '' : 'appBar',
+ subBuilder: SduiWidgetData.create)
+ ..aOM(15, _omitFieldNames ? '' : 'body',
+ subBuilder: SduiWidgetData.create)
+ ..aOM(16, _omitFieldNames ? '' : 'floatingActionButton',
+ subBuilder: SduiWidgetData.create)
+ ..aOM(17, _omitFieldNames ? '' : 'backgroundColor',
+ subBuilder: ColorData.create)
+ ..aOM(18, _omitFieldNames ? '' : 'bottomNavigationBar',
+ subBuilder: SduiWidgetData.create)
+ ..aOM(19, _omitFieldNames ? '' : 'drawer',
+ subBuilder: SduiWidgetData.create)
+ ..aOM(20, _omitFieldNames ? '' : 'endDrawer',
+ subBuilder: SduiWidgetData.create)
+ ..aOM(21, _omitFieldNames ? '' : 'bottomSheet',
+ subBuilder: SduiWidgetData.create)
+ ..aOB(22, _omitFieldNames ? '' : 'resizeToAvoidBottomInset')
+ ..aOB(23, _omitFieldNames ? '' : 'primary')
+ ..e(
+ 24,
+ _omitFieldNames ? '' : 'floatingActionButtonLocation',
+ $pb.PbFieldType.OE,
+ defaultOrMaker:
+ FloatingActionButtonLocationProto.FAB_LOCATION_UNSPECIFIED,
+ valueOf: FloatingActionButtonLocationProto.valueOf,
+ enumValues: FloatingActionButtonLocationProto.values)
+ ..aOB(25, _omitFieldNames ? '' : 'extendBody')
+ ..aOB(26, _omitFieldNames ? '' : 'extendBodyBehindAppBar')
+ ..aOM(27, _omitFieldNames ? '' : 'drawerScrimColor',
+ subBuilder: ColorData.create)
+ ..a<$core.double>(
+ 28, _omitFieldNames ? '' : 'drawerEdgeDragWidth', $pb.PbFieldType.OD)
+ ..aOB(29, _omitFieldNames ? '' : 'drawerEnableOpenDragGesture')
+ ..aOB(30, _omitFieldNames ? '' : 'endDrawerEnableOpenDragGesture')
+ ..e(
+ 31, _omitFieldNames ? '' : 'mainAxisAlignment', $pb.PbFieldType.OE,
+ defaultOrMaker: MainAxisAlignmentProto.MAIN_AXIS_ALIGNMENT_UNSPECIFIED,
+ valueOf: MainAxisAlignmentProto.valueOf,
+ enumValues: MainAxisAlignmentProto.values)
+ ..e(
+ 32, _omitFieldNames ? '' : 'crossAxisAlignment', $pb.PbFieldType.OE,
+ defaultOrMaker:
+ CrossAxisAlignmentProto.CROSS_AXIS_ALIGNMENT_UNSPECIFIED,
+ valueOf: CrossAxisAlignmentProto.valueOf,
+ enumValues: CrossAxisAlignmentProto.values)
+ ..e(
+ 33, _omitFieldNames ? '' : 'mainAxisSize', $pb.PbFieldType.OE,
+ defaultOrMaker: MainAxisSizeProto.MAIN_AXIS_SIZE_UNSPECIFIED,
+ valueOf: MainAxisSizeProto.valueOf,
+ enumValues: MainAxisSizeProto.values)
+ ..e(
+ 34, _omitFieldNames ? '' : 'textDirection', $pb.PbFieldType.OE,
+ defaultOrMaker: TextDirectionProto.TEXT_DIRECTION_UNSPECIFIED,
+ valueOf: TextDirectionProto.valueOf,
+ enumValues: TextDirectionProto.values)
+ ..e(
+ 35, _omitFieldNames ? '' : 'verticalDirection', $pb.PbFieldType.OE,
+ defaultOrMaker: VerticalDirectionProto.VERTICAL_DIRECTION_UNSPECIFIED,
+ valueOf: VerticalDirectionProto.valueOf,
+ enumValues: VerticalDirectionProto.values)
+ ..e(
+ 36, _omitFieldNames ? '' : 'textBaseline', $pb.PbFieldType.OE,
+ defaultOrMaker: TextBaselineProto.TEXT_BASELINE_UNSPECIFIED,
+ valueOf: TextBaselineProto.valueOf,
+ enumValues: TextBaselineProto.values)
+ ..aOM(37, _omitFieldNames ? '' : 'alignment',
+ subBuilder: AlignmentData.create)
+ ..aOM(38, _omitFieldNames ? '' : 'constraints',
+ subBuilder: BoxConstraintsData.create)
+ ..aOM(39, _omitFieldNames ? '' : 'transform',
+ subBuilder: TransformData.create)
+ ..aOM(40, _omitFieldNames ? '' : 'transformAlignment',
+ subBuilder: AlignmentData.create)
+ ..e(
+ 41, _omitFieldNames ? '' : 'clipBehavior', $pb.PbFieldType.OE,
+ defaultOrMaker: ClipProto.CLIP_UNSPECIFIED,
+ valueOf: ClipProto.valueOf,
+ enumValues: ClipProto.values)
+ ..e(
+ 42, _omitFieldNames ? '' : 'textAlign', $pb.PbFieldType.OE,
+ defaultOrMaker: TextAlignProto.TEXT_ALIGN_UNSPECIFIED,
+ valueOf: TextAlignProto.valueOf,
+ enumValues: TextAlignProto.values)
+ ..e(
+ 43, _omitFieldNames ? '' : 'overflow', $pb.PbFieldType.OE,
+ defaultOrMaker: TextOverflowProto.TEXT_OVERFLOW_UNSPECIFIED,
+ valueOf: TextOverflowProto.valueOf,
+ enumValues: TextOverflowProto.values)
+ ..a<$core.int>(44, _omitFieldNames ? '' : 'maxLines', $pb.PbFieldType.O3)
+ ..aOB(45, _omitFieldNames ? '' : 'softWrap')
+ ..a<$core.double>(
+ 46, _omitFieldNames ? '' : 'letterSpacing', $pb.PbFieldType.OD)
+ ..a<$core.double>(
+ 47, _omitFieldNames ? '' : 'wordSpacing', $pb.PbFieldType.OD)
+ ..a<$core.double>(48, _omitFieldNames ? '' : 'height', $pb.PbFieldType.OD)
+ ..aOS(49, _omitFieldNames ? '' : 'fontFamily')
+ ..e(
+ 50, _omitFieldNames ? '' : 'repeat', $pb.PbFieldType.OE,
+ defaultOrMaker: ImageRepeatProto.IMAGE_REPEAT_UNSPECIFIED,
+ valueOf: ImageRepeatProto.valueOf,
+ enumValues: ImageRepeatProto.values)
+ ..e(
+ 51, _omitFieldNames ? '' : 'colorBlendMode', $pb.PbFieldType.OE,
+ defaultOrMaker: BlendModeProto.BLEND_MODE_UNSPECIFIED,
+ valueOf: BlendModeProto.valueOf,
+ enumValues: BlendModeProto.values)
+ ..aOM(52, _omitFieldNames ? '' : 'centerSlice',
+ subBuilder: RectData.create)
+ ..aOB(53, _omitFieldNames ? '' : 'matchTextDirection')
+ ..aOB(54, _omitFieldNames ? '' : 'gaplessPlayback')
+ ..e(
+ 55, _omitFieldNames ? '' : 'filterQuality', $pb.PbFieldType.OE,
+ defaultOrMaker: FilterQualityProto.FILTER_QUALITY_UNSPECIFIED,
+ valueOf: FilterQualityProto.valueOf,
+ enumValues: FilterQualityProto.values)
+ ..a<$core.int>(56, _omitFieldNames ? '' : 'cacheWidth', $pb.PbFieldType.O3)
+ ..a<$core.int>(57, _omitFieldNames ? '' : 'cacheHeight', $pb.PbFieldType.O3)
+ ..a<$core.double>(58, _omitFieldNames ? '' : 'scale', $pb.PbFieldType.OD)
+ ..aOS(59, _omitFieldNames ? '' : 'semanticLabel')
+ ..aOM(60, _omitFieldNames ? '' : 'errorWidget',
+ subBuilder: SduiWidgetData.create)
+ ..aOM(61, _omitFieldNames ? '' : 'loadingWidget',
+ subBuilder: SduiWidgetData.create)
+ ..a<$core.double>(62, _omitFieldNames ? '' : 'opacity', $pb.PbFieldType.OD)
+ ..aOB(63, _omitFieldNames ? '' : 'applyTextScaling')
+ ..pc(64, _omitFieldNames ? '' : 'shadows', $pb.PbFieldType.PM,
+ subBuilder: ShadowData.create)
+ ..hasRequiredFields = false;
+
+ @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
+ SduiWidgetData clone() => SduiWidgetData()..mergeFromMessage(this);
+ @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
+ SduiWidgetData copyWith(void Function(SduiWidgetData) updates) =>
+ super.copyWith((message) => updates(message as SduiWidgetData))
+ as SduiWidgetData;
+
+ $pb.BuilderInfo get info_ => _i;
+
+ @$core.pragma('dart2js:noInline')
+ static SduiWidgetData create() => SduiWidgetData._();
+ SduiWidgetData createEmptyInstance() => create();
+ static $pb.PbList createRepeated() =>
+ $pb.PbList();
+ @$core.pragma('dart2js:noInline')
+ static SduiWidgetData getDefault() => _defaultInstance ??=
+ $pb.GeneratedMessage.$_defaultFor(create);
+ static SduiWidgetData? _defaultInstance;
+
+ @$pb.TagNumber(1)
+ WidgetType get type => $_getN(0);
+ @$pb.TagNumber(1)
+ set type(WidgetType v) {
+ $_setField(1, v);
+ }
+
+ @$pb.TagNumber(1)
+ $core.bool hasType() => $_has(0);
+ @$pb.TagNumber(1)
+ void clearType() => $_clearField(1);
+
+ @$pb.TagNumber(2)
+ $pb.PbMap<$core.String, $core.String> get stringAttributes => $_getMap(1);
+
+ @$pb.TagNumber(3)
+ $pb.PbMap<$core.String, $core.double> get doubleAttributes => $_getMap(2);
+
+ @$pb.TagNumber(4)
+ $pb.PbMap<$core.String, $core.bool> get boolAttributes => $_getMap(3);
+
+ @$pb.TagNumber(5)
+ $pb.PbMap<$core.String, $core.int> get intAttributes => $_getMap(4);
+
+ /// Complex nested attributes
+ @$pb.TagNumber(6)
+ TextStyleData get textStyle => $_getN(5);
+ @$pb.TagNumber(6)
+ set textStyle(TextStyleData v) {
+ $_setField(6, v);
+ }
+
+ @$pb.TagNumber(6)
+ $core.bool hasTextStyle() => $_has(5);
+ @$pb.TagNumber(6)
+ void clearTextStyle() => $_clearField(6);
+ @$pb.TagNumber(6)
+ TextStyleData ensureTextStyle() => $_ensure(5);
+
+ @$pb.TagNumber(7)
+ EdgeInsetsData get padding => $_getN(6);
+ @$pb.TagNumber(7)
+ set padding(EdgeInsetsData v) {
+ $_setField(7, v);
+ }
+
+ @$pb.TagNumber(7)
+ $core.bool hasPadding() => $_has(6);
+ @$pb.TagNumber(7)
+ void clearPadding() => $_clearField(7);
+ @$pb.TagNumber(7)
+ EdgeInsetsData ensurePadding() => $_ensure(6);
+
+ @$pb.TagNumber(8)
+ EdgeInsetsData get margin => $_getN(7);
+ @$pb.TagNumber(8)
+ set margin(EdgeInsetsData v) {
+ $_setField(8, v);
+ }
+
+ @$pb.TagNumber(8)
+ $core.bool hasMargin() => $_has(7);
+ @$pb.TagNumber(8)
+ void clearMargin() => $_clearField(8);
+ @$pb.TagNumber(8)
+ EdgeInsetsData ensureMargin() => $_ensure(7);
+
+ @$pb.TagNumber(9)
+ ColorData get color => $_getN(8);
+ @$pb.TagNumber(9)
+ set color(ColorData v) {
+ $_setField(9, v);
+ }
+
+ @$pb.TagNumber(9)
+ $core.bool hasColor() => $_has(8);
+ @$pb.TagNumber(9)
+ void clearColor() => $_clearField(9);
+ @$pb.TagNumber(9)
+ ColorData ensureColor() => $_ensure(8);
+
+ @$pb.TagNumber(10)
+ IconDataMessage get icon => $_getN(9);
+ @$pb.TagNumber(10)
+ set icon(IconDataMessage v) {
+ $_setField(10, v);
+ }
+
+ @$pb.TagNumber(10)
+ $core.bool hasIcon() => $_has(9);
+ @$pb.TagNumber(10)
+ void clearIcon() => $_clearField(10);
+ @$pb.TagNumber(10)
+ IconDataMessage ensureIcon() => $_ensure(9);
+
+ @$pb.TagNumber(11)
+ BoxDecorationData get boxDecoration => $_getN(10);
+ @$pb.TagNumber(11)
+ set boxDecoration(BoxDecorationData v) {
+ $_setField(11, v);
+ }
+
+ @$pb.TagNumber(11)
+ $core.bool hasBoxDecoration() => $_has(10);
+ @$pb.TagNumber(11)
+ void clearBoxDecoration() => $_clearField(11);
+ @$pb.TagNumber(11)
+ BoxDecorationData ensureBoxDecoration() => $_ensure(10);
+
+ /// Children widgets
+ @$pb.TagNumber(12)
+ $pb.PbList get children => $_getList(11);
+
+ @$pb.TagNumber(13)
+ SduiWidgetData get child => $_getN(12);
+ @$pb.TagNumber(13)
+ set child(SduiWidgetData v) {
+ $_setField(13, v);
+ }
+
+ @$pb.TagNumber(13)
+ $core.bool hasChild() => $_has(12);
+ @$pb.TagNumber(13)
+ void clearChild() => $_clearField(13);
+ @$pb.TagNumber(13)
+ SduiWidgetData ensureChild() => $_ensure(12);
+
+ /// Scaffold specific parts
+ @$pb.TagNumber(14)
+ SduiWidgetData get appBar => $_getN(13);
+ @$pb.TagNumber(14)
+ set appBar(SduiWidgetData v) {
+ $_setField(14, v);
+ }
+
+ @$pb.TagNumber(14)
+ $core.bool hasAppBar() => $_has(13);
+ @$pb.TagNumber(14)
+ void clearAppBar() => $_clearField(14);
+ @$pb.TagNumber(14)
+ SduiWidgetData ensureAppBar() => $_ensure(13);
+
+ @$pb.TagNumber(15)
+ SduiWidgetData get body => $_getN(14);
+ @$pb.TagNumber(15)
+ set body(SduiWidgetData v) {
+ $_setField(15, v);
+ }
+
+ @$pb.TagNumber(15)
+ $core.bool hasBody() => $_has(14);
+ @$pb.TagNumber(15)
+ void clearBody() => $_clearField(15);
+ @$pb.TagNumber(15)
+ SduiWidgetData ensureBody() => $_ensure(14);
+
+ @$pb.TagNumber(16)
+ SduiWidgetData get floatingActionButton => $_getN(15);
+ @$pb.TagNumber(16)
+ set floatingActionButton(SduiWidgetData v) {
+ $_setField(16, v);
+ }
+
+ @$pb.TagNumber(16)
+ $core.bool hasFloatingActionButton() => $_has(15);
+ @$pb.TagNumber(16)
+ void clearFloatingActionButton() => $_clearField(16);
+ @$pb.TagNumber(16)
+ SduiWidgetData ensureFloatingActionButton() => $_ensure(15);
+
+ @$pb.TagNumber(17)
+ ColorData get backgroundColor => $_getN(16);
+ @$pb.TagNumber(17)
+ set backgroundColor(ColorData v) {
+ $_setField(17, v);
+ }
+
+ @$pb.TagNumber(17)
+ $core.bool hasBackgroundColor() => $_has(16);
+ @$pb.TagNumber(17)
+ void clearBackgroundColor() => $_clearField(17);
+ @$pb.TagNumber(17)
+ ColorData ensureBackgroundColor() => $_ensure(16);
+
+ /// New Scaffold attributes
+ @$pb.TagNumber(18)
+ SduiWidgetData get bottomNavigationBar => $_getN(17);
+ @$pb.TagNumber(18)
+ set bottomNavigationBar(SduiWidgetData v) {
+ $_setField(18, v);
+ }
+
+ @$pb.TagNumber(18)
+ $core.bool hasBottomNavigationBar() => $_has(17);
+ @$pb.TagNumber(18)
+ void clearBottomNavigationBar() => $_clearField(18);
+ @$pb.TagNumber(18)
+ SduiWidgetData ensureBottomNavigationBar() => $_ensure(17);
+
+ @$pb.TagNumber(19)
+ SduiWidgetData get drawer => $_getN(18);
+ @$pb.TagNumber(19)
+ set drawer(SduiWidgetData v) {
+ $_setField(19, v);
+ }
+
+ @$pb.TagNumber(19)
+ $core.bool hasDrawer() => $_has(18);
+ @$pb.TagNumber(19)
+ void clearDrawer() => $_clearField(19);
+ @$pb.TagNumber(19)
+ SduiWidgetData ensureDrawer() => $_ensure(18);
+
+ @$pb.TagNumber(20)
+ SduiWidgetData get endDrawer => $_getN(19);
+ @$pb.TagNumber(20)
+ set endDrawer(SduiWidgetData v) {
+ $_setField(20, v);
+ }
+
+ @$pb.TagNumber(20)
+ $core.bool hasEndDrawer() => $_has(19);
+ @$pb.TagNumber(20)
+ void clearEndDrawer() => $_clearField(20);
+ @$pb.TagNumber(20)
+ SduiWidgetData ensureEndDrawer() => $_ensure(19);
+
+ @$pb.TagNumber(21)
+ SduiWidgetData get bottomSheet => $_getN(20);
+ @$pb.TagNumber(21)
+ set bottomSheet(SduiWidgetData v) {
+ $_setField(21, v);
+ }
+
+ @$pb.TagNumber(21)
+ $core.bool hasBottomSheet() => $_has(20);
+ @$pb.TagNumber(21)
+ void clearBottomSheet() => $_clearField(21);
+ @$pb.TagNumber(21)
+ SduiWidgetData ensureBottomSheet() => $_ensure(20);
+
+ @$pb.TagNumber(22)
+ $core.bool get resizeToAvoidBottomInset => $_getBF(21);
+ @$pb.TagNumber(22)
+ set resizeToAvoidBottomInset($core.bool v) {
+ $_setBool(21, v);
+ }
+
+ @$pb.TagNumber(22)
+ $core.bool hasResizeToAvoidBottomInset() => $_has(21);
+ @$pb.TagNumber(22)
+ void clearResizeToAvoidBottomInset() => $_clearField(22);
+
+ @$pb.TagNumber(23)
+ $core.bool get primary => $_getBF(22);
+ @$pb.TagNumber(23)
+ set primary($core.bool v) {
+ $_setBool(22, v);
+ }
+
+ @$pb.TagNumber(23)
+ $core.bool hasPrimary() => $_has(22);
+ @$pb.TagNumber(23)
+ void clearPrimary() => $_clearField(23);
+
+ @$pb.TagNumber(24)
+ FloatingActionButtonLocationProto get floatingActionButtonLocation =>
+ $_getN(23);
+ @$pb.TagNumber(24)
+ set floatingActionButtonLocation(FloatingActionButtonLocationProto v) {
+ $_setField(24, v);
+ }
+
+ @$pb.TagNumber(24)
+ $core.bool hasFloatingActionButtonLocation() => $_has(23);
+ @$pb.TagNumber(24)
+ void clearFloatingActionButtonLocation() => $_clearField(24);
+
+ @$pb.TagNumber(25)
+ $core.bool get extendBody => $_getBF(24);
+ @$pb.TagNumber(25)
+ set extendBody($core.bool v) {
+ $_setBool(24, v);
+ }
+
+ @$pb.TagNumber(25)
+ $core.bool hasExtendBody() => $_has(24);
+ @$pb.TagNumber(25)
+ void clearExtendBody() => $_clearField(25);
+
+ @$pb.TagNumber(26)
+ $core.bool get extendBodyBehindAppBar => $_getBF(25);
+ @$pb.TagNumber(26)
+ set extendBodyBehindAppBar($core.bool v) {
+ $_setBool(25, v);
+ }
+
+ @$pb.TagNumber(26)
+ $core.bool hasExtendBodyBehindAppBar() => $_has(25);
+ @$pb.TagNumber(26)
+ void clearExtendBodyBehindAppBar() => $_clearField(26);
+
+ @$pb.TagNumber(27)
+ ColorData get drawerScrimColor => $_getN(26);
+ @$pb.TagNumber(27)
+ set drawerScrimColor(ColorData v) {
+ $_setField(27, v);
+ }
+
+ @$pb.TagNumber(27)
+ $core.bool hasDrawerScrimColor() => $_has(26);
+ @$pb.TagNumber(27)
+ void clearDrawerScrimColor() => $_clearField(27);
+ @$pb.TagNumber(27)
+ ColorData ensureDrawerScrimColor() => $_ensure(26);
+
+ @$pb.TagNumber(28)
+ $core.double get drawerEdgeDragWidth => $_getN(27);
+ @$pb.TagNumber(28)
+ set drawerEdgeDragWidth($core.double v) {
+ $_setDouble(27, v);
+ }
+
+ @$pb.TagNumber(28)
+ $core.bool hasDrawerEdgeDragWidth() => $_has(27);
+ @$pb.TagNumber(28)
+ void clearDrawerEdgeDragWidth() => $_clearField(28);
+
+ @$pb.TagNumber(29)
+ $core.bool get drawerEnableOpenDragGesture => $_getBF(28);
+ @$pb.TagNumber(29)
+ set drawerEnableOpenDragGesture($core.bool v) {
+ $_setBool(28, v);
+ }
+
+ @$pb.TagNumber(29)
+ $core.bool hasDrawerEnableOpenDragGesture() => $_has(28);
+ @$pb.TagNumber(29)
+ void clearDrawerEnableOpenDragGesture() => $_clearField(29);
+
+ @$pb.TagNumber(30)
+ $core.bool get endDrawerEnableOpenDragGesture => $_getBF(29);
+ @$pb.TagNumber(30)
+ set endDrawerEnableOpenDragGesture($core.bool v) {
+ $_setBool(29, v);
+ }
+
+ @$pb.TagNumber(30)
+ $core.bool hasEndDrawerEnableOpenDragGesture() => $_has(29);
+ @$pb.TagNumber(30)
+ void clearEndDrawerEnableOpenDragGesture() => $_clearField(30);
+
+ /// Layout attributes for Row and Column
+ @$pb.TagNumber(31)
+ MainAxisAlignmentProto get mainAxisAlignment => $_getN(30);
+ @$pb.TagNumber(31)
+ set mainAxisAlignment(MainAxisAlignmentProto v) {
+ $_setField(31, v);
+ }
+
+ @$pb.TagNumber(31)
+ $core.bool hasMainAxisAlignment() => $_has(30);
+ @$pb.TagNumber(31)
+ void clearMainAxisAlignment() => $_clearField(31);
+
+ @$pb.TagNumber(32)
+ CrossAxisAlignmentProto get crossAxisAlignment => $_getN(31);
+ @$pb.TagNumber(32)
+ set crossAxisAlignment(CrossAxisAlignmentProto v) {
+ $_setField(32, v);
+ }
+
+ @$pb.TagNumber(32)
+ $core.bool hasCrossAxisAlignment() => $_has(31);
+ @$pb.TagNumber(32)
+ void clearCrossAxisAlignment() => $_clearField(32);
+
+ @$pb.TagNumber(33)
+ MainAxisSizeProto get mainAxisSize => $_getN(32);
+ @$pb.TagNumber(33)
+ set mainAxisSize(MainAxisSizeProto v) {
+ $_setField(33, v);
+ }
+
+ @$pb.TagNumber(33)
+ $core.bool hasMainAxisSize() => $_has(32);
+ @$pb.TagNumber(33)
+ void clearMainAxisSize() => $_clearField(33);
+
+ @$pb.TagNumber(34)
+ TextDirectionProto get textDirection => $_getN(33);
+ @$pb.TagNumber(34)
+ set textDirection(TextDirectionProto v) {
+ $_setField(34, v);
+ }
+
+ @$pb.TagNumber(34)
+ $core.bool hasTextDirection() => $_has(33);
+ @$pb.TagNumber(34)
+ void clearTextDirection() => $_clearField(34);
+
+ @$pb.TagNumber(35)
+ VerticalDirectionProto get verticalDirection => $_getN(34);
+ @$pb.TagNumber(35)
+ set verticalDirection(VerticalDirectionProto v) {
+ $_setField(35, v);
+ }
+
+ @$pb.TagNumber(35)
+ $core.bool hasVerticalDirection() => $_has(34);
+ @$pb.TagNumber(35)
+ void clearVerticalDirection() => $_clearField(35);
+
+ @$pb.TagNumber(36)
+ TextBaselineProto get textBaseline => $_getN(35);
+ @$pb.TagNumber(36)
+ set textBaseline(TextBaselineProto v) {
+ $_setField(36, v);
+ }
+
+ @$pb.TagNumber(36)
+ $core.bool hasTextBaseline() => $_has(35);
+ @$pb.TagNumber(36)
+ void clearTextBaseline() => $_clearField(36);
+
+ /// Container specific attributes
+ @$pb.TagNumber(37)
+ AlignmentData get alignment => $_getN(36);
+ @$pb.TagNumber(37)
+ set alignment(AlignmentData v) {
+ $_setField(37, v);
+ }
+
+ @$pb.TagNumber(37)
+ $core.bool hasAlignment() => $_has(36);
+ @$pb.TagNumber(37)
+ void clearAlignment() => $_clearField(37);
+ @$pb.TagNumber(37)
+ AlignmentData ensureAlignment() => $_ensure(36);
+
+ @$pb.TagNumber(38)
+ BoxConstraintsData get constraints => $_getN(37);
+ @$pb.TagNumber(38)
+ set constraints(BoxConstraintsData v) {
+ $_setField(38, v);
+ }
+
+ @$pb.TagNumber(38)
+ $core.bool hasConstraints() => $_has(37);
+ @$pb.TagNumber(38)
+ void clearConstraints() => $_clearField(38);
+ @$pb.TagNumber(38)
+ BoxConstraintsData ensureConstraints() => $_ensure(37);
+
+ @$pb.TagNumber(39)
+ TransformData get transform => $_getN(38);
+ @$pb.TagNumber(39)
+ set transform(TransformData v) {
+ $_setField(39, v);
+ }
+
+ @$pb.TagNumber(39)
+ $core.bool hasTransform() => $_has(38);
+ @$pb.TagNumber(39)
+ void clearTransform() => $_clearField(39);
+ @$pb.TagNumber(39)
+ TransformData ensureTransform() => $_ensure(38);
+
+ @$pb.TagNumber(40)
+ AlignmentData get transformAlignment => $_getN(39);
+ @$pb.TagNumber(40)
+ set transformAlignment(AlignmentData v) {
+ $_setField(40, v);
+ }
+
+ @$pb.TagNumber(40)
+ $core.bool hasTransformAlignment() => $_has(39);
+ @$pb.TagNumber(40)
+ void clearTransformAlignment() => $_clearField(40);
+ @$pb.TagNumber(40)
+ AlignmentData ensureTransformAlignment() => $_ensure(39);
+
+ @$pb.TagNumber(41)
+ ClipProto get clipBehavior => $_getN(40);
+ @$pb.TagNumber(41)
+ set clipBehavior(ClipProto v) {
+ $_setField(41, v);
+ }
+
+ @$pb.TagNumber(41)
+ $core.bool hasClipBehavior() => $_has(40);
+ @$pb.TagNumber(41)
+ void clearClipBehavior() => $_clearField(41);
+
+ /// Text specific attributes
+ @$pb.TagNumber(42)
+ TextAlignProto get textAlign => $_getN(41);
+ @$pb.TagNumber(42)
+ set textAlign(TextAlignProto v) {
+ $_setField(42, v);
+ }
+
+ @$pb.TagNumber(42)
+ $core.bool hasTextAlign() => $_has(41);
+ @$pb.TagNumber(42)
+ void clearTextAlign() => $_clearField(42);
+
+ @$pb.TagNumber(43)
+ TextOverflowProto get overflow => $_getN(42);
+ @$pb.TagNumber(43)
+ set overflow(TextOverflowProto v) {
+ $_setField(43, v);
+ }
+
+ @$pb.TagNumber(43)
+ $core.bool hasOverflow() => $_has(42);
+ @$pb.TagNumber(43)
+ void clearOverflow() => $_clearField(43);
+
+ @$pb.TagNumber(44)
+ $core.int get maxLines => $_getIZ(43);
+ @$pb.TagNumber(44)
+ set maxLines($core.int v) {
+ $_setSignedInt32(43, v);
+ }
+
+ @$pb.TagNumber(44)
+ $core.bool hasMaxLines() => $_has(43);
+ @$pb.TagNumber(44)
+ void clearMaxLines() => $_clearField(44);
+
+ @$pb.TagNumber(45)
+ $core.bool get softWrap => $_getBF(44);
+ @$pb.TagNumber(45)
+ set softWrap($core.bool v) {
+ $_setBool(44, v);
+ }
+
+ @$pb.TagNumber(45)
+ $core.bool hasSoftWrap() => $_has(44);
+ @$pb.TagNumber(45)
+ void clearSoftWrap() => $_clearField(45);
+
+ @$pb.TagNumber(46)
+ $core.double get letterSpacing => $_getN(45);
+ @$pb.TagNumber(46)
+ set letterSpacing($core.double v) {
+ $_setDouble(45, v);
+ }
+
+ @$pb.TagNumber(46)
+ $core.bool hasLetterSpacing() => $_has(45);
+ @$pb.TagNumber(46)
+ void clearLetterSpacing() => $_clearField(46);
+
+ @$pb.TagNumber(47)
+ $core.double get wordSpacing => $_getN(46);
+ @$pb.TagNumber(47)
+ set wordSpacing($core.double v) {
+ $_setDouble(46, v);
+ }
+
+ @$pb.TagNumber(47)
+ $core.bool hasWordSpacing() => $_has(46);
+ @$pb.TagNumber(47)
+ void clearWordSpacing() => $_clearField(47);
+
+ @$pb.TagNumber(48)
+ $core.double get height => $_getN(47);
+ @$pb.TagNumber(48)
+ set height($core.double v) {
+ $_setDouble(47, v);
+ }
+
+ @$pb.TagNumber(48)
+ $core.bool hasHeight() => $_has(47);
+ @$pb.TagNumber(48)
+ void clearHeight() => $_clearField(48);
+
+ @$pb.TagNumber(49)
+ $core.String get fontFamily => $_getSZ(48);
+ @$pb.TagNumber(49)
+ set fontFamily($core.String v) {
+ $_setString(48, v);
+ }
+
+ @$pb.TagNumber(49)
+ $core.bool hasFontFamily() => $_has(48);
+ @$pb.TagNumber(49)
+ void clearFontFamily() => $_clearField(49);
+
+ /// Image specific attributes
+ @$pb.TagNumber(50)
+ ImageRepeatProto get repeat => $_getN(49);
+ @$pb.TagNumber(50)
+ set repeat(ImageRepeatProto v) {
+ $_setField(50, v);
+ }
+
+ @$pb.TagNumber(50)
+ $core.bool hasRepeat() => $_has(49);
+ @$pb.TagNumber(50)
+ void clearRepeat() => $_clearField(50);
+
+ @$pb.TagNumber(51)
+ BlendModeProto get colorBlendMode => $_getN(50);
+ @$pb.TagNumber(51)
+ set colorBlendMode(BlendModeProto v) {
+ $_setField(51, v);
+ }
+
+ @$pb.TagNumber(51)
+ $core.bool hasColorBlendMode() => $_has(50);
+ @$pb.TagNumber(51)
+ void clearColorBlendMode() => $_clearField(51);
+
+ @$pb.TagNumber(52)
+ RectData get centerSlice => $_getN(51);
+ @$pb.TagNumber(52)
+ set centerSlice(RectData v) {
+ $_setField(52, v);
+ }
+
+ @$pb.TagNumber(52)
+ $core.bool hasCenterSlice() => $_has(51);
+ @$pb.TagNumber(52)
+ void clearCenterSlice() => $_clearField(52);
+ @$pb.TagNumber(52)
+ RectData ensureCenterSlice() => $_ensure(51);
+
+ @$pb.TagNumber(53)
+ $core.bool get matchTextDirection => $_getBF(52);
+ @$pb.TagNumber(53)
+ set matchTextDirection($core.bool v) {
+ $_setBool(52, v);
+ }
+
+ @$pb.TagNumber(53)
+ $core.bool hasMatchTextDirection() => $_has(52);
+ @$pb.TagNumber(53)
+ void clearMatchTextDirection() => $_clearField(53);
+
+ @$pb.TagNumber(54)
+ $core.bool get gaplessPlayback => $_getBF(53);
+ @$pb.TagNumber(54)
+ set gaplessPlayback($core.bool v) {
+ $_setBool(53, v);
+ }
+
+ @$pb.TagNumber(54)
+ $core.bool hasGaplessPlayback() => $_has(53);
+ @$pb.TagNumber(54)
+ void clearGaplessPlayback() => $_clearField(54);
+
+ @$pb.TagNumber(55)
+ FilterQualityProto get filterQuality => $_getN(54);
+ @$pb.TagNumber(55)
+ set filterQuality(FilterQualityProto v) {
+ $_setField(55, v);
+ }
+
+ @$pb.TagNumber(55)
+ $core.bool hasFilterQuality() => $_has(54);
+ @$pb.TagNumber(55)
+ void clearFilterQuality() => $_clearField(55);
+
+ @$pb.TagNumber(56)
+ $core.int get cacheWidth => $_getIZ(55);
+ @$pb.TagNumber(56)
+ set cacheWidth($core.int v) {
+ $_setSignedInt32(55, v);
+ }
+
+ @$pb.TagNumber(56)
+ $core.bool hasCacheWidth() => $_has(55);
+ @$pb.TagNumber(56)
+ void clearCacheWidth() => $_clearField(56);
+
+ @$pb.TagNumber(57)
+ $core.int get cacheHeight => $_getIZ(56);
+ @$pb.TagNumber(57)
+ set cacheHeight($core.int v) {
+ $_setSignedInt32(56, v);
+ }
+
+ @$pb.TagNumber(57)
+ $core.bool hasCacheHeight() => $_has(56);
+ @$pb.TagNumber(57)
+ void clearCacheHeight() => $_clearField(57);
+
+ @$pb.TagNumber(58)
+ $core.double get scale => $_getN(57);
+ @$pb.TagNumber(58)
+ set scale($core.double v) {
+ $_setDouble(57, v);
+ }
+
+ @$pb.TagNumber(58)
+ $core.bool hasScale() => $_has(57);
+ @$pb.TagNumber(58)
+ void clearScale() => $_clearField(58);
+
+ @$pb.TagNumber(59)
+ $core.String get semanticLabel => $_getSZ(58);
+ @$pb.TagNumber(59)
+ set semanticLabel($core.String v) {
+ $_setString(58, v);
+ }
+
+ @$pb.TagNumber(59)
+ $core.bool hasSemanticLabel() => $_has(58);
+ @$pb.TagNumber(59)
+ void clearSemanticLabel() => $_clearField(59);
+
+ @$pb.TagNumber(60)
+ SduiWidgetData get errorWidget => $_getN(59);
+ @$pb.TagNumber(60)
+ set errorWidget(SduiWidgetData v) {
+ $_setField(60, v);
+ }
+
+ @$pb.TagNumber(60)
+ $core.bool hasErrorWidget() => $_has(59);
+ @$pb.TagNumber(60)
+ void clearErrorWidget() => $_clearField(60);
+ @$pb.TagNumber(60)
+ SduiWidgetData ensureErrorWidget() => $_ensure(59);
+
+ @$pb.TagNumber(61)
+ SduiWidgetData get loadingWidget => $_getN(60);
+ @$pb.TagNumber(61)
+ set loadingWidget(SduiWidgetData v) {
+ $_setField(61, v);
+ }
+
+ @$pb.TagNumber(61)
+ $core.bool hasLoadingWidget() => $_has(60);
+ @$pb.TagNumber(61)
+ void clearLoadingWidget() => $_clearField(61);
+ @$pb.TagNumber(61)
+ SduiWidgetData ensureLoadingWidget() => $_ensure(60);
+
+ /// Icon specific attributes
+ @$pb.TagNumber(62)
+ $core.double get opacity => $_getN(61);
+ @$pb.TagNumber(62)
+ set opacity($core.double v) {
+ $_setDouble(61, v);
+ }
+
+ @$pb.TagNumber(62)
+ $core.bool hasOpacity() => $_has(61);
+ @$pb.TagNumber(62)
+ void clearOpacity() => $_clearField(62);
+
+ @$pb.TagNumber(63)
+ $core.bool get applyTextScaling => $_getBF(62);
+ @$pb.TagNumber(63)
+ set applyTextScaling($core.bool v) {
+ $_setBool(62, v);
+ }
+
+ @$pb.TagNumber(63)
+ $core.bool hasApplyTextScaling() => $_has(62);
+ @$pb.TagNumber(63)
+ void clearApplyTextScaling() => $_clearField(63);
+
+ @$pb.TagNumber(64)
+ $pb.PbList get shadows => $_getList(63);
+}
+
+/// Message for Color
+class ColorData extends $pb.GeneratedMessage {
+ factory ColorData({
+ $core.int? alpha,
+ $core.int? red,
+ $core.int? green,
+ $core.int? blue,
+ }) {
+ final $result = create();
+ if (alpha != null) {
+ $result.alpha = alpha;
+ }
+ if (red != null) {
+ $result.red = red;
+ }
+ if (green != null) {
+ $result.green = green;
+ }
+ if (blue != null) {
+ $result.blue = blue;
+ }
+ return $result;
+ }
+ ColorData._() : super();
+ factory ColorData.fromBuffer($core.List<$core.int> i,
+ [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
+ create()..mergeFromBuffer(i, r);
+ factory ColorData.fromJson($core.String i,
+ [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
+ create()..mergeFromJson(i, r);
+
+ static final $pb.BuilderInfo _i = $pb.BuilderInfo(
+ _omitMessageNames ? '' : 'ColorData',
+ package: const $pb.PackageName(_omitMessageNames ? '' : 'flutter_sdui'),
+ createEmptyInstance: create)
+ ..a<$core.int>(1, _omitFieldNames ? '' : 'alpha', $pb.PbFieldType.O3)
+ ..a<$core.int>(2, _omitFieldNames ? '' : 'red', $pb.PbFieldType.O3)
+ ..a<$core.int>(3, _omitFieldNames ? '' : 'green', $pb.PbFieldType.O3)
+ ..a<$core.int>(4, _omitFieldNames ? '' : 'blue', $pb.PbFieldType.O3)
+ ..hasRequiredFields = false;
+
+ @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
+ ColorData clone() => ColorData()..mergeFromMessage(this);
+ @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
+ ColorData copyWith(void Function(ColorData) updates) =>
+ super.copyWith((message) => updates(message as ColorData)) as ColorData;
+
+ $pb.BuilderInfo get info_ => _i;
+
+ @$core.pragma('dart2js:noInline')
+ static ColorData create() => ColorData._();
+ ColorData createEmptyInstance() => create();
+ static $pb.PbList createRepeated() => $pb.PbList();
+ @$core.pragma('dart2js:noInline')
+ static ColorData getDefault() =>
+ _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor(create);
+ static ColorData? _defaultInstance;
+
+ @$pb.TagNumber(1)
+ $core.int get alpha => $_getIZ(0);
+ @$pb.TagNumber(1)
+ set alpha($core.int v) {
+ $_setSignedInt32(0, v);
+ }
+
+ @$pb.TagNumber(1)
+ $core.bool hasAlpha() => $_has(0);
+ @$pb.TagNumber(1)
+ void clearAlpha() => $_clearField(1);
+
+ @$pb.TagNumber(2)
+ $core.int get red => $_getIZ(1);
+ @$pb.TagNumber(2)
+ set red($core.int v) {
+ $_setSignedInt32(1, v);
+ }
+
+ @$pb.TagNumber(2)
+ $core.bool hasRed() => $_has(1);
+ @$pb.TagNumber(2)
+ void clearRed() => $_clearField(2);
+
+ @$pb.TagNumber(3)
+ $core.int get green => $_getIZ(2);
+ @$pb.TagNumber(3)
+ set green($core.int v) {
+ $_setSignedInt32(2, v);
+ }
+
+ @$pb.TagNumber(3)
+ $core.bool hasGreen() => $_has(2);
+ @$pb.TagNumber(3)
+ void clearGreen() => $_clearField(3);
+
+ @$pb.TagNumber(4)
+ $core.int get blue => $_getIZ(3);
+ @$pb.TagNumber(4)
+ set blue($core.int v) {
+ $_setSignedInt32(3, v);
+ }
+
+ @$pb.TagNumber(4)
+ $core.bool hasBlue() => $_has(3);
+ @$pb.TagNumber(4)
+ void clearBlue() => $_clearField(4);
+}
+
+/// Message for EdgeInsets (for padding, margin)
+class EdgeInsetsData extends $pb.GeneratedMessage {
+ factory EdgeInsetsData({
+ $core.double? left,
+ $core.double? top,
+ $core.double? right,
+ $core.double? bottom,
+ $core.double? all,
+ }) {
+ final $result = create();
+ if (left != null) {
+ $result.left = left;
+ }
+ if (top != null) {
+ $result.top = top;
+ }
+ if (right != null) {
+ $result.right = right;
+ }
+ if (bottom != null) {
+ $result.bottom = bottom;
+ }
+ if (all != null) {
+ $result.all = all;
+ }
+ return $result;
+ }
+ EdgeInsetsData._() : super();
+ factory EdgeInsetsData.fromBuffer($core.List<$core.int> i,
+ [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
+ create()..mergeFromBuffer(i, r);
+ factory EdgeInsetsData.fromJson($core.String i,
+ [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
+ create()..mergeFromJson(i, r);
+
+ static final $pb.BuilderInfo _i = $pb.BuilderInfo(
+ _omitMessageNames ? '' : 'EdgeInsetsData',
+ package: const $pb.PackageName(_omitMessageNames ? '' : 'flutter_sdui'),
+ createEmptyInstance: create)
+ ..a<$core.double>(1, _omitFieldNames ? '' : 'left', $pb.PbFieldType.OD)
+ ..a<$core.double>(2, _omitFieldNames ? '' : 'top', $pb.PbFieldType.OD)
+ ..a<$core.double>(3, _omitFieldNames ? '' : 'right', $pb.PbFieldType.OD)
+ ..a<$core.double>(4, _omitFieldNames ? '' : 'bottom', $pb.PbFieldType.OD)
+ ..a<$core.double>(5, _omitFieldNames ? '' : 'all', $pb.PbFieldType.OD)
+ ..hasRequiredFields = false;
+
+ @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
+ EdgeInsetsData clone() => EdgeInsetsData()..mergeFromMessage(this);
+ @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
+ EdgeInsetsData copyWith(void Function(EdgeInsetsData) updates) =>
+ super.copyWith((message) => updates(message as EdgeInsetsData))
+ as EdgeInsetsData;
+
+ $pb.BuilderInfo get info_ => _i;
+
+ @$core.pragma('dart2js:noInline')
+ static EdgeInsetsData create() => EdgeInsetsData._();
+ EdgeInsetsData createEmptyInstance() => create();
+ static $pb.PbList createRepeated() =>
+ $pb.PbList();
+ @$core.pragma('dart2js:noInline')
+ static EdgeInsetsData getDefault() => _defaultInstance ??=
+ $pb.GeneratedMessage.$_defaultFor(create);
+ static EdgeInsetsData? _defaultInstance;
+
+ @$pb.TagNumber(1)
+ $core.double get left => $_getN(0);
+ @$pb.TagNumber(1)
+ set left($core.double v) {
+ $_setDouble(0, v);
+ }
+
+ @$pb.TagNumber(1)
+ $core.bool hasLeft() => $_has(0);
+ @$pb.TagNumber(1)
+ void clearLeft() => $_clearField(1);
+
+ @$pb.TagNumber(2)
+ $core.double get top => $_getN(1);
+ @$pb.TagNumber(2)
+ set top($core.double v) {
+ $_setDouble(1, v);
+ }
+
+ @$pb.TagNumber(2)
+ $core.bool hasTop() => $_has(1);
+ @$pb.TagNumber(2)
+ void clearTop() => $_clearField(2);
+
+ @$pb.TagNumber(3)
+ $core.double get right => $_getN(2);
+ @$pb.TagNumber(3)
+ set right($core.double v) {
+ $_setDouble(2, v);
+ }
+
+ @$pb.TagNumber(3)
+ $core.bool hasRight() => $_has(2);
+ @$pb.TagNumber(3)
+ void clearRight() => $_clearField(3);
+
+ @$pb.TagNumber(4)
+ $core.double get bottom => $_getN(3);
+ @$pb.TagNumber(4)
+ set bottom($core.double v) {
+ $_setDouble(3, v);
+ }
+
+ @$pb.TagNumber(4)
+ $core.bool hasBottom() => $_has(3);
+ @$pb.TagNumber(4)
+ void clearBottom() => $_clearField(4);
+
+ @$pb.TagNumber(5)
+ $core.double get all => $_getN(4);
+ @$pb.TagNumber(5)
+ set all($core.double v) {
+ $_setDouble(4, v);
+ }
+
+ @$pb.TagNumber(5)
+ $core.bool hasAll() => $_has(4);
+ @$pb.TagNumber(5)
+ void clearAll() => $_clearField(5);
+}
+
+/// Message for TextStyle
+class TextStyleData extends $pb.GeneratedMessage {
+ factory TextStyleData({
+ ColorData? color,
+ $core.double? fontSize,
+ $core.String? fontWeight,
+ TextDecorationProto? decoration,
+ $core.double? letterSpacing,
+ $core.double? wordSpacing,
+ $core.double? height,
+ $core.String? fontFamily,
+ FontStyleProto? fontStyle,
+ }) {
+ final $result = create();
+ if (color != null) {
+ $result.color = color;
+ }
+ if (fontSize != null) {
+ $result.fontSize = fontSize;
+ }
+ if (fontWeight != null) {
+ $result.fontWeight = fontWeight;
+ }
+ if (decoration != null) {
+ $result.decoration = decoration;
+ }
+ if (letterSpacing != null) {
+ $result.letterSpacing = letterSpacing;
+ }
+ if (wordSpacing != null) {
+ $result.wordSpacing = wordSpacing;
+ }
+ if (height != null) {
+ $result.height = height;
+ }
+ if (fontFamily != null) {
+ $result.fontFamily = fontFamily;
+ }
+ if (fontStyle != null) {
+ $result.fontStyle = fontStyle;
+ }
+ return $result;
+ }
+ TextStyleData._() : super();
+ factory TextStyleData.fromBuffer($core.List<$core.int> i,
+ [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
+ create()..mergeFromBuffer(i, r);
+ factory TextStyleData.fromJson($core.String i,
+ [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
+ create()..mergeFromJson(i, r);
+
+ static final $pb.BuilderInfo _i = $pb.BuilderInfo(
+ _omitMessageNames ? '' : 'TextStyleData',
+ package: const $pb.PackageName(_omitMessageNames ? '' : 'flutter_sdui'),
+ createEmptyInstance: create)
+ ..aOM(1, _omitFieldNames ? '' : 'color',
+ subBuilder: ColorData.create)
+ ..a<$core.double>(2, _omitFieldNames ? '' : 'fontSize', $pb.PbFieldType.OD)
+ ..aOS(3, _omitFieldNames ? '' : 'fontWeight')
+ ..e(
+ 4, _omitFieldNames ? '' : 'decoration', $pb.PbFieldType.OE,
+ defaultOrMaker: TextDecorationProto.TEXT_DECORATION_UNSPECIFIED,
+ valueOf: TextDecorationProto.valueOf,
+ enumValues: TextDecorationProto.values)
+ ..a<$core.double>(
+ 5, _omitFieldNames ? '' : 'letterSpacing', $pb.PbFieldType.OD)
+ ..a<$core.double>(
+ 6, _omitFieldNames ? '' : 'wordSpacing', $pb.PbFieldType.OD)
+ ..a<$core.double>(7, _omitFieldNames ? '' : 'height', $pb.PbFieldType.OD)
+ ..aOS(8, _omitFieldNames ? '' : 'fontFamily')
+ ..e(
+ 9, _omitFieldNames ? '' : 'fontStyle', $pb.PbFieldType.OE,
+ defaultOrMaker: FontStyleProto.FONT_STYLE_UNSPECIFIED,
+ valueOf: FontStyleProto.valueOf,
+ enumValues: FontStyleProto.values)
+ ..hasRequiredFields = false;
+
+ @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
+ TextStyleData clone() => TextStyleData()..mergeFromMessage(this);
+ @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
+ TextStyleData copyWith(void Function(TextStyleData) updates) =>
+ super.copyWith((message) => updates(message as TextStyleData))
+ as TextStyleData;
+
+ $pb.BuilderInfo get info_ => _i;
+
+ @$core.pragma('dart2js:noInline')
+ static TextStyleData create() => TextStyleData._();
+ TextStyleData createEmptyInstance() => create();
+ static $pb.PbList createRepeated() =>
+ $pb.PbList();
+ @$core.pragma('dart2js:noInline')
+ static TextStyleData getDefault() => _defaultInstance ??=
+ $pb.GeneratedMessage.$_defaultFor(create);
+ static TextStyleData? _defaultInstance;
+
+ @$pb.TagNumber(1)
+ ColorData get color => $_getN(0);
+ @$pb.TagNumber(1)
+ set color(ColorData v) {
+ $_setField(1, v);
+ }
+
+ @$pb.TagNumber(1)
+ $core.bool hasColor() => $_has(0);
+ @$pb.TagNumber(1)
+ void clearColor() => $_clearField(1);
+ @$pb.TagNumber(1)
+ ColorData ensureColor() => $_ensure(0);
+
+ @$pb.TagNumber(2)
+ $core.double get fontSize => $_getN(1);
+ @$pb.TagNumber(2)
+ set fontSize($core.double v) {
+ $_setDouble(1, v);
+ }
+
+ @$pb.TagNumber(2)
+ $core.bool hasFontSize() => $_has(1);
+ @$pb.TagNumber(2)
+ void clearFontSize() => $_clearField(2);
+
+ @$pb.TagNumber(3)
+ $core.String get fontWeight => $_getSZ(2);
+ @$pb.TagNumber(3)
+ set fontWeight($core.String v) {
+ $_setString(2, v);
+ }
+
+ @$pb.TagNumber(3)
+ $core.bool hasFontWeight() => $_has(2);
+ @$pb.TagNumber(3)
+ void clearFontWeight() => $_clearField(3);
+
+ @$pb.TagNumber(4)
+ TextDecorationProto get decoration => $_getN(3);
+ @$pb.TagNumber(4)
+ set decoration(TextDecorationProto v) {
+ $_setField(4, v);
+ }
+
+ @$pb.TagNumber(4)
+ $core.bool hasDecoration() => $_has(3);
+ @$pb.TagNumber(4)
+ void clearDecoration() => $_clearField(4);
+
+ @$pb.TagNumber(5)
+ $core.double get letterSpacing => $_getN(4);
+ @$pb.TagNumber(5)
+ set letterSpacing($core.double v) {
+ $_setDouble(4, v);
+ }
+
+ @$pb.TagNumber(5)
+ $core.bool hasLetterSpacing() => $_has(4);
+ @$pb.TagNumber(5)
+ void clearLetterSpacing() => $_clearField(5);
+
+ @$pb.TagNumber(6)
+ $core.double get wordSpacing => $_getN(5);
+ @$pb.TagNumber(6)
+ set wordSpacing($core.double v) {
+ $_setDouble(5, v);
+ }
+
+ @$pb.TagNumber(6)
+ $core.bool hasWordSpacing() => $_has(5);
+ @$pb.TagNumber(6)
+ void clearWordSpacing() => $_clearField(6);
+
+ @$pb.TagNumber(7)
+ $core.double get height => $_getN(6);
+ @$pb.TagNumber(7)
+ set height($core.double v) {
+ $_setDouble(6, v);
+ }
+
+ @$pb.TagNumber(7)
+ $core.bool hasHeight() => $_has(6);
+ @$pb.TagNumber(7)
+ void clearHeight() => $_clearField(7);
+
+ @$pb.TagNumber(8)
+ $core.String get fontFamily => $_getSZ(7);
+ @$pb.TagNumber(8)
+ set fontFamily($core.String v) {
+ $_setString(7, v);
+ }
+
+ @$pb.TagNumber(8)
+ $core.bool hasFontFamily() => $_has(7);
+ @$pb.TagNumber(8)
+ void clearFontFamily() => $_clearField(8);
+
+ @$pb.TagNumber(9)
+ FontStyleProto get fontStyle => $_getN(8);
+ @$pb.TagNumber(9)
+ set fontStyle(FontStyleProto v) {
+ $_setField(9, v);
+ }
+
+ @$pb.TagNumber(9)
+ $core.bool hasFontStyle() => $_has(8);
+ @$pb.TagNumber(9)
+ void clearFontStyle() => $_clearField(9);
+}
+
+/// Message for IconData
+class IconDataMessage extends $pb.GeneratedMessage {
+ factory IconDataMessage({
+ $core.String? name,
+ $core.int? codePoint,
+ $core.String? fontFamily,
+ ColorData? color,
+ $core.double? size,
+ }) {
+ final $result = create();
+ if (name != null) {
+ $result.name = name;
+ }
+ if (codePoint != null) {
+ $result.codePoint = codePoint;
+ }
+ if (fontFamily != null) {
+ $result.fontFamily = fontFamily;
+ }
+ if (color != null) {
+ $result.color = color;
+ }
+ if (size != null) {
+ $result.size = size;
+ }
+ return $result;
+ }
+ IconDataMessage._() : super();
+ factory IconDataMessage.fromBuffer($core.List<$core.int> i,
+ [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
+ create()..mergeFromBuffer(i, r);
+ factory IconDataMessage.fromJson($core.String i,
+ [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
+ create()..mergeFromJson(i, r);
+
+ static final $pb.BuilderInfo _i = $pb.BuilderInfo(
+ _omitMessageNames ? '' : 'IconDataMessage',
+ package: const $pb.PackageName(_omitMessageNames ? '' : 'flutter_sdui'),
+ createEmptyInstance: create)
+ ..aOS(1, _omitFieldNames ? '' : 'name')
+ ..a<$core.int>(2, _omitFieldNames ? '' : 'codePoint', $pb.PbFieldType.O3)
+ ..aOS(3, _omitFieldNames ? '' : 'fontFamily')
+ ..aOM(4, _omitFieldNames ? '' : 'color',
+ subBuilder: ColorData.create)
+ ..a<$core.double>(5, _omitFieldNames ? '' : 'size', $pb.PbFieldType.OD)
+ ..hasRequiredFields = false;
+
+ @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
+ IconDataMessage clone() => IconDataMessage()..mergeFromMessage(this);
+ @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
+ IconDataMessage copyWith(void Function(IconDataMessage) updates) =>
+ super.copyWith((message) => updates(message as IconDataMessage))
+ as IconDataMessage;
+
+ $pb.BuilderInfo get info_ => _i;
+
+ @$core.pragma('dart2js:noInline')
+ static IconDataMessage create() => IconDataMessage._();
+ IconDataMessage createEmptyInstance() => create();
+ static $pb.PbList createRepeated() =>
+ $pb.PbList();
+ @$core.pragma('dart2js:noInline')
+ static IconDataMessage getDefault() => _defaultInstance ??=
+ $pb.GeneratedMessage.$_defaultFor(create);
+ static IconDataMessage? _defaultInstance;
+
+ @$pb.TagNumber(1)
+ $core.String get name => $_getSZ(0);
+ @$pb.TagNumber(1)
+ set name($core.String v) {
+ $_setString(0, v);
+ }
+
+ @$pb.TagNumber(1)
+ $core.bool hasName() => $_has(0);
+ @$pb.TagNumber(1)
+ void clearName() => $_clearField(1);
+
+ @$pb.TagNumber(2)
+ $core.int get codePoint => $_getIZ(1);
+ @$pb.TagNumber(2)
+ set codePoint($core.int v) {
+ $_setSignedInt32(1, v);
+ }
+
+ @$pb.TagNumber(2)
+ $core.bool hasCodePoint() => $_has(1);
+ @$pb.TagNumber(2)
+ void clearCodePoint() => $_clearField(2);
+
+ @$pb.TagNumber(3)
+ $core.String get fontFamily => $_getSZ(2);
+ @$pb.TagNumber(3)
+ set fontFamily($core.String v) {
+ $_setString(2, v);
+ }
+
+ @$pb.TagNumber(3)
+ $core.bool hasFontFamily() => $_has(2);
+ @$pb.TagNumber(3)
+ void clearFontFamily() => $_clearField(3);
+
+ @$pb.TagNumber(4)
+ ColorData get color => $_getN(3);
+ @$pb.TagNumber(4)
+ set color(ColorData v) {
+ $_setField(4, v);
+ }
+
+ @$pb.TagNumber(4)
+ $core.bool hasColor() => $_has(3);
+ @$pb.TagNumber(4)
+ void clearColor() => $_clearField(4);
+ @$pb.TagNumber(4)
+ ColorData ensureColor() => $_ensure(3);
+
+ @$pb.TagNumber(5)
+ $core.double get size => $_getN(4);
+ @$pb.TagNumber(5)
+ set size($core.double v) {
+ $_setDouble(4, v);
+ }
+
+ @$pb.TagNumber(5)
+ $core.bool hasSize() => $_has(4);
+ @$pb.TagNumber(5)
+ void clearSize() => $_clearField(5);
+}
+
+/// Message for BoxDecoration
+class BoxDecorationData extends $pb.GeneratedMessage {
+ factory BoxDecorationData({
+ ColorData? color,
+ BorderRadiusData? borderRadius,
+ BorderData? border,
+ $core.Iterable? boxShadow,
+ GradientData? gradient,
+ BoxShapeProto? shape,
+ DecorationImageData? image,
+ }) {
+ final $result = create();
+ if (color != null) {
+ $result.color = color;
+ }
+ if (borderRadius != null) {
+ $result.borderRadius = borderRadius;
+ }
+ if (border != null) {
+ $result.border = border;
+ }
+ if (boxShadow != null) {
+ $result.boxShadow.addAll(boxShadow);
+ }
+ if (gradient != null) {
+ $result.gradient = gradient;
+ }
+ if (shape != null) {
+ $result.shape = shape;
+ }
+ if (image != null) {
+ $result.image = image;
+ }
+ return $result;
+ }
+ BoxDecorationData._() : super();
+ factory BoxDecorationData.fromBuffer($core.List<$core.int> i,
+ [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
+ create()..mergeFromBuffer(i, r);
+ factory BoxDecorationData.fromJson($core.String i,
+ [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
+ create()..mergeFromJson(i, r);
+
+ static final $pb.BuilderInfo _i = $pb.BuilderInfo(
+ _omitMessageNames ? '' : 'BoxDecorationData',
+ package: const $pb.PackageName(_omitMessageNames ? '' : 'flutter_sdui'),
+ createEmptyInstance: create)
+ ..aOM(1, _omitFieldNames ? '' : 'color',
+ subBuilder: ColorData.create)
+ ..aOM(2, _omitFieldNames ? '' : 'borderRadius',
+ subBuilder: BorderRadiusData.create)
+ ..aOM(3, _omitFieldNames ? '' : 'border',
+ subBuilder: BorderData.create)
+ ..pc(
+ 4, _omitFieldNames ? '' : 'boxShadow', $pb.PbFieldType.PM,
+ subBuilder: BoxShadowData.create)
+ ..aOM(5, _omitFieldNames ? '' : 'gradient',
+ subBuilder: GradientData.create)
+ ..e(6, _omitFieldNames ? '' : 'shape', $pb.PbFieldType.OE,
+ defaultOrMaker: BoxShapeProto.BOX_SHAPE_UNSPECIFIED,
+ valueOf: BoxShapeProto.valueOf,
+ enumValues: BoxShapeProto.values)
+ ..aOM(7, _omitFieldNames ? '' : 'image',
+ subBuilder: DecorationImageData.create)
+ ..hasRequiredFields = false;
+
+ @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
+ BoxDecorationData clone() => BoxDecorationData()..mergeFromMessage(this);
+ @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
+ BoxDecorationData copyWith(void Function(BoxDecorationData) updates) =>
+ super.copyWith((message) => updates(message as BoxDecorationData))
+ as BoxDecorationData;
+
+ $pb.BuilderInfo get info_ => _i;
+
+ @$core.pragma('dart2js:noInline')
+ static BoxDecorationData create() => BoxDecorationData._();
+ BoxDecorationData createEmptyInstance() => create();
+ static $pb.PbList createRepeated() =>
+ $pb.PbList();
+ @$core.pragma('dart2js:noInline')
+ static BoxDecorationData getDefault() => _defaultInstance ??=
+ $pb.GeneratedMessage.$_defaultFor(create);
+ static BoxDecorationData? _defaultInstance;
+
+ @$pb.TagNumber(1)
+ ColorData get color => $_getN(0);
+ @$pb.TagNumber(1)
+ set color(ColorData v) {
+ $_setField(1, v);
+ }
+
+ @$pb.TagNumber(1)
+ $core.bool hasColor() => $_has(0);
+ @$pb.TagNumber(1)
+ void clearColor() => $_clearField(1);
+ @$pb.TagNumber(1)
+ ColorData ensureColor() => $_ensure(0);
+
+ @$pb.TagNumber(2)
+ BorderRadiusData get borderRadius => $_getN(1);
+ @$pb.TagNumber(2)
+ set borderRadius(BorderRadiusData v) {
+ $_setField(2, v);
+ }
+
+ @$pb.TagNumber(2)
+ $core.bool hasBorderRadius() => $_has(1);
+ @$pb.TagNumber(2)
+ void clearBorderRadius() => $_clearField(2);
+ @$pb.TagNumber(2)
+ BorderRadiusData ensureBorderRadius() => $_ensure(1);
+
+ @$pb.TagNumber(3)
+ BorderData get border => $_getN(2);
+ @$pb.TagNumber(3)
+ set border(BorderData v) {
+ $_setField(3, v);
+ }
+
+ @$pb.TagNumber(3)
+ $core.bool hasBorder() => $_has(2);
+ @$pb.TagNumber(3)
+ void clearBorder() => $_clearField(3);
+ @$pb.TagNumber(3)
+ BorderData ensureBorder() => $_ensure(2);
+
+ @$pb.TagNumber(4)
+ $pb.PbList get boxShadow => $_getList(3);
+
+ @$pb.TagNumber(5)
+ GradientData get gradient => $_getN(4);
+ @$pb.TagNumber(5)
+ set gradient(GradientData v) {
+ $_setField(5, v);
+ }
+
+ @$pb.TagNumber(5)
+ $core.bool hasGradient() => $_has(4);
+ @$pb.TagNumber(5)
+ void clearGradient() => $_clearField(5);
+ @$pb.TagNumber(5)
+ GradientData ensureGradient() => $_ensure(4);
+
+ @$pb.TagNumber(6)
+ BoxShapeProto get shape => $_getN(5);
+ @$pb.TagNumber(6)
+ set shape(BoxShapeProto v) {
+ $_setField(6, v);
+ }
+
+ @$pb.TagNumber(6)
+ $core.bool hasShape() => $_has(5);
+ @$pb.TagNumber(6)
+ void clearShape() => $_clearField(6);
+
+ @$pb.TagNumber(7)
+ DecorationImageData get image => $_getN(6);
+ @$pb.TagNumber(7)
+ set image(DecorationImageData v) {
+ $_setField(7, v);
+ }
+
+ @$pb.TagNumber(7)
+ $core.bool hasImage() => $_has(6);
+ @$pb.TagNumber(7)
+ void clearImage() => $_clearField(7);
+ @$pb.TagNumber(7)
+ DecorationImageData ensureImage() => $_ensure(6);
+}
+
+/// Message for BorderRadius
+class BorderRadiusData extends $pb.GeneratedMessage {
+ factory BorderRadiusData({
+ $core.double? all,
+ $core.double? topLeft,
+ $core.double? topRight,
+ $core.double? bottomLeft,
+ $core.double? bottomRight,
+ }) {
+ final $result = create();
+ if (all != null) {
+ $result.all = all;
+ }
+ if (topLeft != null) {
+ $result.topLeft = topLeft;
+ }
+ if (topRight != null) {
+ $result.topRight = topRight;
+ }
+ if (bottomLeft != null) {
+ $result.bottomLeft = bottomLeft;
+ }
+ if (bottomRight != null) {
+ $result.bottomRight = bottomRight;
+ }
+ return $result;
+ }
+ BorderRadiusData._() : super();
+ factory BorderRadiusData.fromBuffer($core.List<$core.int> i,
+ [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
+ create()..mergeFromBuffer(i, r);
+ factory BorderRadiusData.fromJson($core.String i,
+ [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
+ create()..mergeFromJson(i, r);
+
+ static final $pb.BuilderInfo _i = $pb.BuilderInfo(
+ _omitMessageNames ? '' : 'BorderRadiusData',
+ package: const $pb.PackageName(_omitMessageNames ? '' : 'flutter_sdui'),
+ createEmptyInstance: create)
+ ..a<$core.double>(1, _omitFieldNames ? '' : 'all', $pb.PbFieldType.OD)
+ ..a<$core.double>(2, _omitFieldNames ? '' : 'topLeft', $pb.PbFieldType.OD)
+ ..a<$core.double>(3, _omitFieldNames ? '' : 'topRight', $pb.PbFieldType.OD)
+ ..a<$core.double>(
+ 4, _omitFieldNames ? '' : 'bottomLeft', $pb.PbFieldType.OD)
+ ..a<$core.double>(
+ 5, _omitFieldNames ? '' : 'bottomRight', $pb.PbFieldType.OD)
+ ..hasRequiredFields = false;
+
+ @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
+ BorderRadiusData clone() => BorderRadiusData()..mergeFromMessage(this);
+ @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
+ BorderRadiusData copyWith(void Function(BorderRadiusData) updates) =>
+ super.copyWith((message) => updates(message as BorderRadiusData))
+ as BorderRadiusData;
+
+ $pb.BuilderInfo get info_ => _i;
+
+ @$core.pragma('dart2js:noInline')
+ static BorderRadiusData create() => BorderRadiusData._();
+ BorderRadiusData createEmptyInstance() => create();
+ static $pb.PbList createRepeated() =>
+ $pb.PbList();
+ @$core.pragma('dart2js:noInline')
+ static BorderRadiusData getDefault() => _defaultInstance ??=
+ $pb.GeneratedMessage.$_defaultFor(create);
+ static BorderRadiusData? _defaultInstance;
+
+ @$pb.TagNumber(1)
+ $core.double get all => $_getN(0);
+ @$pb.TagNumber(1)
+ set all($core.double v) {
+ $_setDouble(0, v);
+ }
+
+ @$pb.TagNumber(1)
+ $core.bool hasAll() => $_has(0);
+ @$pb.TagNumber(1)
+ void clearAll() => $_clearField(1);
+
+ /// For BorderRadius.only or .vertical/.horizontal if needed later
+ @$pb.TagNumber(2)
+ $core.double get topLeft => $_getN(1);
+ @$pb.TagNumber(2)
+ set topLeft($core.double v) {
+ $_setDouble(1, v);
+ }
+
+ @$pb.TagNumber(2)
+ $core.bool hasTopLeft() => $_has(1);
+ @$pb.TagNumber(2)
+ void clearTopLeft() => $_clearField(2);
+
+ @$pb.TagNumber(3)
+ $core.double get topRight => $_getN(2);
+ @$pb.TagNumber(3)
+ set topRight($core.double v) {
+ $_setDouble(2, v);
+ }
+
+ @$pb.TagNumber(3)
+ $core.bool hasTopRight() => $_has(2);
+ @$pb.TagNumber(3)
+ void clearTopRight() => $_clearField(3);
+
+ @$pb.TagNumber(4)
+ $core.double get bottomLeft => $_getN(3);
+ @$pb.TagNumber(4)
+ set bottomLeft($core.double v) {
+ $_setDouble(3, v);
+ }
+
+ @$pb.TagNumber(4)
+ $core.bool hasBottomLeft() => $_has(3);
+ @$pb.TagNumber(4)
+ void clearBottomLeft() => $_clearField(4);
+
+ @$pb.TagNumber(5)
+ $core.double get bottomRight => $_getN(4);
+ @$pb.TagNumber(5)
+ set bottomRight($core.double v) {
+ $_setDouble(4, v);
+ }
+
+ @$pb.TagNumber(5)
+ $core.bool hasBottomRight() => $_has(4);
+ @$pb.TagNumber(5)
+ void clearBottomRight() => $_clearField(5);
+}
+
+/// Message for BorderSide
+class BorderSideData extends $pb.GeneratedMessage {
+ factory BorderSideData({
+ ColorData? color,
+ $core.double? width,
+ BorderStyleProto? style,
+ }) {
+ final $result = create();
+ if (color != null) {
+ $result.color = color;
+ }
+ if (width != null) {
+ $result.width = width;
+ }
+ if (style != null) {
+ $result.style = style;
+ }
+ return $result;
+ }
+ BorderSideData._() : super();
+ factory BorderSideData.fromBuffer($core.List<$core.int> i,
+ [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
+ create()..mergeFromBuffer(i, r);
+ factory BorderSideData.fromJson($core.String i,
+ [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
+ create()..mergeFromJson(i, r);
+
+ static final $pb.BuilderInfo _i = $pb.BuilderInfo(
+ _omitMessageNames ? '' : 'BorderSideData',
+ package: const $pb.PackageName(_omitMessageNames ? '' : 'flutter_sdui'),
+ createEmptyInstance: create)
+ ..aOM(1, _omitFieldNames ? '' : 'color',
+ subBuilder: ColorData.create)
+ ..a<$core.double>(2, _omitFieldNames ? '' : 'width', $pb.PbFieldType.OD)
+ ..e(3, _omitFieldNames ? '' : 'style', $pb.PbFieldType.OE,
+ defaultOrMaker: BorderStyleProto.BORDER_STYLE_UNSPECIFIED,
+ valueOf: BorderStyleProto.valueOf,
+ enumValues: BorderStyleProto.values)
+ ..hasRequiredFields = false;
+
+ @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
+ BorderSideData clone() => BorderSideData()..mergeFromMessage(this);
+ @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
+ BorderSideData copyWith(void Function(BorderSideData) updates) =>
+ super.copyWith((message) => updates(message as BorderSideData))
+ as BorderSideData;
+
+ $pb.BuilderInfo get info_ => _i;
+
+ @$core.pragma('dart2js:noInline')
+ static BorderSideData create() => BorderSideData._();
+ BorderSideData createEmptyInstance() => create();
+ static $pb.PbList createRepeated() =>
+ $pb.PbList();
+ @$core.pragma('dart2js:noInline')
+ static BorderSideData getDefault() => _defaultInstance ??=
+ $pb.GeneratedMessage.$_defaultFor(create);
+ static BorderSideData? _defaultInstance;
+
+ @$pb.TagNumber(1)
+ ColorData get color => $_getN(0);
+ @$pb.TagNumber(1)
+ set color(ColorData v) {
+ $_setField(1, v);
+ }
+
+ @$pb.TagNumber(1)
+ $core.bool hasColor() => $_has(0);
+ @$pb.TagNumber(1)
+ void clearColor() => $_clearField(1);
+ @$pb.TagNumber(1)
+ ColorData ensureColor() => $_ensure(0);
+
+ @$pb.TagNumber(2)
+ $core.double get width => $_getN(1);
+ @$pb.TagNumber(2)
+ set width($core.double v) {
+ $_setDouble(1, v);
+ }
+
+ @$pb.TagNumber(2)
+ $core.bool hasWidth() => $_has(1);
+ @$pb.TagNumber(2)
+ void clearWidth() => $_clearField(2);
+
+ @$pb.TagNumber(3)
+ BorderStyleProto get style => $_getN(2);
+ @$pb.TagNumber(3)
+ set style(BorderStyleProto v) {
+ $_setField(3, v);
+ }
+
+ @$pb.TagNumber(3)
+ $core.bool hasStyle() => $_has(2);
+ @$pb.TagNumber(3)
+ void clearStyle() => $_clearField(3);
+}
+
+/// Message for Border
+class BorderData extends $pb.GeneratedMessage {
+ factory BorderData({
+ BorderSideData? top,
+ BorderSideData? right,
+ BorderSideData? bottom,
+ BorderSideData? left,
+ BorderSideData? all,
+ }) {
+ final $result = create();
+ if (top != null) {
+ $result.top = top;
+ }
+ if (right != null) {
+ $result.right = right;
+ }
+ if (bottom != null) {
+ $result.bottom = bottom;
+ }
+ if (left != null) {
+ $result.left = left;
+ }
+ if (all != null) {
+ $result.all = all;
+ }
+ return $result;
+ }
+ BorderData._() : super();
+ factory BorderData.fromBuffer($core.List<$core.int> i,
+ [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
+ create()..mergeFromBuffer(i, r);
+ factory BorderData.fromJson($core.String i,
+ [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
+ create()..mergeFromJson(i, r);
+
+ static final $pb.BuilderInfo _i = $pb.BuilderInfo(
+ _omitMessageNames ? '' : 'BorderData',
+ package: const $pb.PackageName(_omitMessageNames ? '' : 'flutter_sdui'),
+ createEmptyInstance: create)
+ ..aOM(1, _omitFieldNames ? '' : 'top',
+ subBuilder: BorderSideData.create)
+ ..aOM(2, _omitFieldNames ? '' : 'right',
+ subBuilder: BorderSideData.create)
+ ..aOM(3, _omitFieldNames ? '' : 'bottom',
+ subBuilder: BorderSideData.create)
+ ..aOM(4, _omitFieldNames ? '' : 'left',
+ subBuilder: BorderSideData.create)
+ ..aOM(5, _omitFieldNames ? '' : 'all',
+ subBuilder: BorderSideData.create)
+ ..hasRequiredFields = false;
+
+ @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
+ BorderData clone() => BorderData()..mergeFromMessage(this);
+ @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
+ BorderData copyWith(void Function(BorderData) updates) =>
+ super.copyWith((message) => updates(message as BorderData)) as BorderData;
+
+ $pb.BuilderInfo get info_ => _i;
+
+ @$core.pragma('dart2js:noInline')
+ static BorderData create() => BorderData._();
+ BorderData createEmptyInstance() => create();
+ static $pb.PbList createRepeated() => $pb.PbList();
+ @$core.pragma('dart2js:noInline')
+ static BorderData getDefault() => _defaultInstance ??=
+ $pb.GeneratedMessage.$_defaultFor(create);
+ static BorderData? _defaultInstance;
+
+ @$pb.TagNumber(1)
+ BorderSideData get top => $_getN(0);
+ @$pb.TagNumber(1)
+ set top(BorderSideData v) {
+ $_setField(1, v);
+ }
+
+ @$pb.TagNumber(1)
+ $core.bool hasTop() => $_has(0);
+ @$pb.TagNumber(1)
+ void clearTop() => $_clearField(1);
+ @$pb.TagNumber(1)
+ BorderSideData ensureTop() => $_ensure(0);
+
+ @$pb.TagNumber(2)
+ BorderSideData get right => $_getN(1);
+ @$pb.TagNumber(2)
+ set right(BorderSideData v) {
+ $_setField(2, v);
+ }
+
+ @$pb.TagNumber(2)
+ $core.bool hasRight() => $_has(1);
+ @$pb.TagNumber(2)
+ void clearRight() => $_clearField(2);
+ @$pb.TagNumber(2)
+ BorderSideData ensureRight() => $_ensure(1);
+
+ @$pb.TagNumber(3)
+ BorderSideData get bottom => $_getN(2);
+ @$pb.TagNumber(3)
+ set bottom(BorderSideData v) {
+ $_setField(3, v);
+ }
+
+ @$pb.TagNumber(3)
+ $core.bool hasBottom() => $_has(2);
+ @$pb.TagNumber(3)
+ void clearBottom() => $_clearField(3);
+ @$pb.TagNumber(3)
+ BorderSideData ensureBottom() => $_ensure(2);
+
+ @$pb.TagNumber(4)
+ BorderSideData get left => $_getN(3);
+ @$pb.TagNumber(4)
+ set left(BorderSideData v) {
+ $_setField(4, v);
+ }
+
+ @$pb.TagNumber(4)
+ $core.bool hasLeft() => $_has(3);
+ @$pb.TagNumber(4)
+ void clearLeft() => $_clearField(4);
+ @$pb.TagNumber(4)
+ BorderSideData ensureLeft() => $_ensure(3);
+
+ @$pb.TagNumber(5)
+ BorderSideData get all => $_getN(4);
+ @$pb.TagNumber(5)
+ set all(BorderSideData v) {
+ $_setField(5, v);
+ }
+
+ @$pb.TagNumber(5)
+ $core.bool hasAll() => $_has(4);
+ @$pb.TagNumber(5)
+ void clearAll() => $_clearField(5);
+ @$pb.TagNumber(5)
+ BorderSideData ensureAll() => $_ensure(4);
+}
+
+/// Message for BoxShadow
+class BoxShadowData extends $pb.GeneratedMessage {
+ factory BoxShadowData({
+ ColorData? color,
+ $core.double? offsetX,
+ $core.double? offsetY,
+ $core.double? blurRadius,
+ $core.double? spreadRadius,
+ }) {
+ final $result = create();
+ if (color != null) {
+ $result.color = color;
+ }
+ if (offsetX != null) {
+ $result.offsetX = offsetX;
+ }
+ if (offsetY != null) {
+ $result.offsetY = offsetY;
+ }
+ if (blurRadius != null) {
+ $result.blurRadius = blurRadius;
+ }
+ if (spreadRadius != null) {
+ $result.spreadRadius = spreadRadius;
+ }
+ return $result;
+ }
+ BoxShadowData._() : super();
+ factory BoxShadowData.fromBuffer($core.List<$core.int> i,
+ [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
+ create()..mergeFromBuffer(i, r);
+ factory BoxShadowData.fromJson($core.String i,
+ [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
+ create()..mergeFromJson(i, r);
+
+ static final $pb.BuilderInfo _i = $pb.BuilderInfo(
+ _omitMessageNames ? '' : 'BoxShadowData',
+ package: const $pb.PackageName(_omitMessageNames ? '' : 'flutter_sdui'),
+ createEmptyInstance: create)
+ ..aOM(1, _omitFieldNames ? '' : 'color',
+ subBuilder: ColorData.create)
+ ..a<$core.double>(2, _omitFieldNames ? '' : 'offsetX', $pb.PbFieldType.OD)
+ ..a<$core.double>(3, _omitFieldNames ? '' : 'offsetY', $pb.PbFieldType.OD)
+ ..a<$core.double>(
+ 4, _omitFieldNames ? '' : 'blurRadius', $pb.PbFieldType.OD)
+ ..a<$core.double>(
+ 5, _omitFieldNames ? '' : 'spreadRadius', $pb.PbFieldType.OD)
+ ..hasRequiredFields = false;
+
+ @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
+ BoxShadowData clone() => BoxShadowData()..mergeFromMessage(this);
+ @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
+ BoxShadowData copyWith(void Function(BoxShadowData) updates) =>
+ super.copyWith((message) => updates(message as BoxShadowData))
+ as BoxShadowData;
+
+ $pb.BuilderInfo get info_ => _i;
+
+ @$core.pragma('dart2js:noInline')
+ static BoxShadowData create() => BoxShadowData._();
+ BoxShadowData createEmptyInstance() => create();
+ static $pb.PbList createRepeated() =>
+ $pb.PbList();
+ @$core.pragma('dart2js:noInline')
+ static BoxShadowData getDefault() => _defaultInstance ??=
+ $pb.GeneratedMessage.$_defaultFor(create);
+ static BoxShadowData? _defaultInstance;
+
+ @$pb.TagNumber(1)
+ ColorData get color => $_getN(0);
+ @$pb.TagNumber(1)
+ set color(ColorData v) {
+ $_setField(1, v);
+ }
+
+ @$pb.TagNumber(1)
+ $core.bool hasColor() => $_has(0);
+ @$pb.TagNumber(1)
+ void clearColor() => $_clearField(1);
+ @$pb.TagNumber(1)
+ ColorData ensureColor() => $_ensure(0);
+
+ @$pb.TagNumber(2)
+ $core.double get offsetX => $_getN(1);
+ @$pb.TagNumber(2)
+ set offsetX($core.double v) {
+ $_setDouble(1, v);
+ }
+
+ @$pb.TagNumber(2)
+ $core.bool hasOffsetX() => $_has(1);
+ @$pb.TagNumber(2)
+ void clearOffsetX() => $_clearField(2);
+
+ @$pb.TagNumber(3)
+ $core.double get offsetY => $_getN(2);
+ @$pb.TagNumber(3)
+ set offsetY($core.double v) {
+ $_setDouble(2, v);
+ }
+
+ @$pb.TagNumber(3)
+ $core.bool hasOffsetY() => $_has(2);
+ @$pb.TagNumber(3)
+ void clearOffsetY() => $_clearField(3);
+
+ @$pb.TagNumber(4)
+ $core.double get blurRadius => $_getN(3);
+ @$pb.TagNumber(4)
+ set blurRadius($core.double v) {
+ $_setDouble(3, v);
+ }
+
+ @$pb.TagNumber(4)
+ $core.bool hasBlurRadius() => $_has(3);
+ @$pb.TagNumber(4)
+ void clearBlurRadius() => $_clearField(4);
+
+ @$pb.TagNumber(5)
+ $core.double get spreadRadius => $_getN(4);
+ @$pb.TagNumber(5)
+ set spreadRadius($core.double v) {
+ $_setDouble(4, v);
+ }
+
+ @$pb.TagNumber(5)
+ $core.bool hasSpreadRadius() => $_has(4);
+ @$pb.TagNumber(5)
+ void clearSpreadRadius() => $_clearField(5);
+}
+
+/// Message for Gradient
+class GradientData extends $pb.GeneratedMessage {
+ factory GradientData({
+ GradientData_GradientType? type,
+ $core.Iterable? colors,
+ $core.Iterable<$core.double>? stops,
+ AlignmentData? begin,
+ AlignmentData? end,
+ AlignmentData? center,
+ $core.double? radius,
+ $core.double? startAngle,
+ $core.double? endAngle,
+ }) {
+ final $result = create();
+ if (type != null) {
+ $result.type = type;
+ }
+ if (colors != null) {
+ $result.colors.addAll(colors);
+ }
+ if (stops != null) {
+ $result.stops.addAll(stops);
+ }
+ if (begin != null) {
+ $result.begin = begin;
+ }
+ if (end != null) {
+ $result.end = end;
+ }
+ if (center != null) {
+ $result.center = center;
+ }
+ if (radius != null) {
+ $result.radius = radius;
+ }
+ if (startAngle != null) {
+ $result.startAngle = startAngle;
+ }
+ if (endAngle != null) {
+ $result.endAngle = endAngle;
+ }
+ return $result;
+ }
+ GradientData._() : super();
+ factory GradientData.fromBuffer($core.List<$core.int> i,
+ [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
+ create()..mergeFromBuffer(i, r);
+ factory GradientData.fromJson($core.String i,
+ [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
+ create()..mergeFromJson(i, r);
+
+ static final $pb.BuilderInfo _i = $pb.BuilderInfo(
+ _omitMessageNames ? '' : 'GradientData',
+ package: const $pb.PackageName(_omitMessageNames ? '' : 'flutter_sdui'),
+ createEmptyInstance: create)
+ ..e(
+ 1, _omitFieldNames ? '' : 'type', $pb.PbFieldType.OE,
+ defaultOrMaker: GradientData_GradientType.GRADIENT_TYPE_UNSPECIFIED,
+ valueOf: GradientData_GradientType.valueOf,
+ enumValues: GradientData_GradientType.values)
+ ..pc(2, _omitFieldNames ? '' : 'colors', $pb.PbFieldType.PM,
+ subBuilder: ColorData.create)
+ ..p<$core.double>(3, _omitFieldNames ? '' : 'stops', $pb.PbFieldType.KD)
+ ..aOM(4, _omitFieldNames ? '' : 'begin',
+ subBuilder: AlignmentData.create)
+ ..aOM(5, _omitFieldNames ? '' : 'end',
+ subBuilder: AlignmentData.create)
+ ..aOM(6, _omitFieldNames ? '' : 'center',
+ subBuilder: AlignmentData.create)
+ ..a<$core.double>(7, _omitFieldNames ? '' : 'radius', $pb.PbFieldType.OD)
+ ..a<$core.double>(
+ 8, _omitFieldNames ? '' : 'startAngle', $pb.PbFieldType.OD)
+ ..a<$core.double>(9, _omitFieldNames ? '' : 'endAngle', $pb.PbFieldType.OD)
+ ..hasRequiredFields = false;
+
+ @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
+ GradientData clone() => GradientData()..mergeFromMessage(this);
+ @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
+ GradientData copyWith(void Function(GradientData) updates) =>
+ super.copyWith((message) => updates(message as GradientData))
+ as GradientData;
+
+ $pb.BuilderInfo get info_ => _i;
+
+ @$core.pragma('dart2js:noInline')
+ static GradientData create() => GradientData._();
+ GradientData createEmptyInstance() => create();
+ static $pb.PbList createRepeated() =>
+ $pb.PbList();
+ @$core.pragma('dart2js:noInline')
+ static GradientData getDefault() => _defaultInstance ??=
+ $pb.GeneratedMessage.$_defaultFor(create);
+ static GradientData? _defaultInstance;
+
+ @$pb.TagNumber(1)
+ GradientData_GradientType get type => $_getN(0);
+ @$pb.TagNumber(1)
+ set type(GradientData_GradientType v) {
+ $_setField(1, v);
+ }
+
+ @$pb.TagNumber(1)
+ $core.bool hasType() => $_has(0);
+ @$pb.TagNumber(1)
+ void clearType() => $_clearField(1);
+
+ @$pb.TagNumber(2)
+ $pb.PbList get colors => $_getList(1);
+
+ @$pb.TagNumber(3)
+ $pb.PbList<$core.double> get stops => $_getList(2);
+
+ @$pb.TagNumber(4)
+ AlignmentData get begin => $_getN(3);
+ @$pb.TagNumber(4)
+ set begin(AlignmentData v) {
+ $_setField(4, v);
+ }
+
+ @$pb.TagNumber(4)
+ $core.bool hasBegin() => $_has(3);
+ @$pb.TagNumber(4)
+ void clearBegin() => $_clearField(4);
+ @$pb.TagNumber(4)
+ AlignmentData ensureBegin() => $_ensure(3);
+
+ @$pb.TagNumber(5)
+ AlignmentData get end => $_getN(4);
+ @$pb.TagNumber(5)
+ set end(AlignmentData v) {
+ $_setField(5, v);
+ }
+
+ @$pb.TagNumber(5)
+ $core.bool hasEnd() => $_has(4);
+ @$pb.TagNumber(5)
+ void clearEnd() => $_clearField(5);
+ @$pb.TagNumber(5)
+ AlignmentData ensureEnd() => $_ensure(4);
+
+ @$pb.TagNumber(6)
+ AlignmentData get center => $_getN(5);
+ @$pb.TagNumber(6)
+ set center(AlignmentData v) {
+ $_setField(6, v);
+ }
+
+ @$pb.TagNumber(6)
+ $core.bool hasCenter() => $_has(5);
+ @$pb.TagNumber(6)
+ void clearCenter() => $_clearField(6);
+ @$pb.TagNumber(6)
+ AlignmentData ensureCenter() => $_ensure(5);
+
+ @$pb.TagNumber(7)
+ $core.double get radius => $_getN(6);
+ @$pb.TagNumber(7)
+ set radius($core.double v) {
+ $_setDouble(6, v);
+ }
+
+ @$pb.TagNumber(7)
+ $core.bool hasRadius() => $_has(6);
+ @$pb.TagNumber(7)
+ void clearRadius() => $_clearField(7);
+
+ @$pb.TagNumber(8)
+ $core.double get startAngle => $_getN(7);
+ @$pb.TagNumber(8)
+ set startAngle($core.double v) {
+ $_setDouble(7, v);
+ }
+
+ @$pb.TagNumber(8)
+ $core.bool hasStartAngle() => $_has(7);
+ @$pb.TagNumber(8)
+ void clearStartAngle() => $_clearField(8);
+
+ @$pb.TagNumber(9)
+ $core.double get endAngle => $_getN(8);
+ @$pb.TagNumber(9)
+ set endAngle($core.double v) {
+ $_setDouble(8, v);
+ }
+
+ @$pb.TagNumber(9)
+ $core.bool hasEndAngle() => $_has(8);
+ @$pb.TagNumber(9)
+ void clearEndAngle() => $_clearField(9);
+}
+
+enum AlignmentData_AlignmentType { predefined, xy, notSet }
+
+/// Message for Alignment (used in Gradient, DecorationImage)
+class AlignmentData extends $pb.GeneratedMessage {
+ factory AlignmentData({
+ AlignmentData_PredefinedAlignment? predefined,
+ XYAlignment? xy,
+ }) {
+ final $result = create();
+ if (predefined != null) {
+ $result.predefined = predefined;
+ }
+ if (xy != null) {
+ $result.xy = xy;
+ }
+ return $result;
+ }
+ AlignmentData._() : super();
+ factory AlignmentData.fromBuffer($core.List<$core.int> i,
+ [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
+ create()..mergeFromBuffer(i, r);
+ factory AlignmentData.fromJson($core.String i,
+ [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
+ create()..mergeFromJson(i, r);
+
+ static const $core.Map<$core.int, AlignmentData_AlignmentType>
+ _AlignmentData_AlignmentTypeByTag = {
+ 1: AlignmentData_AlignmentType.predefined,
+ 2: AlignmentData_AlignmentType.xy,
+ 0: AlignmentData_AlignmentType.notSet
+ };
+ static final $pb.BuilderInfo _i = $pb.BuilderInfo(
+ _omitMessageNames ? '' : 'AlignmentData',
+ package: const $pb.PackageName(_omitMessageNames ? '' : 'flutter_sdui'),
+ createEmptyInstance: create)
+ ..oo(0, [1, 2])
+ ..e(
+ 1, _omitFieldNames ? '' : 'predefined', $pb.PbFieldType.OE,
+ defaultOrMaker:
+ AlignmentData_PredefinedAlignment.PREDEFINED_ALIGNMENT_UNSPECIFIED,
+ valueOf: AlignmentData_PredefinedAlignment.valueOf,
+ enumValues: AlignmentData_PredefinedAlignment.values)
+ ..aOM(2, _omitFieldNames ? '' : 'xy',
+ subBuilder: XYAlignment.create)
+ ..hasRequiredFields = false;
+
+ @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
+ AlignmentData clone() => AlignmentData()..mergeFromMessage(this);
+ @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
+ AlignmentData copyWith(void Function(AlignmentData) updates) =>
+ super.copyWith((message) => updates(message as AlignmentData))
+ as AlignmentData;
+
+ $pb.BuilderInfo get info_ => _i;
+
+ @$core.pragma('dart2js:noInline')
+ static AlignmentData create() => AlignmentData._();
+ AlignmentData createEmptyInstance() => create();
+ static $pb.PbList createRepeated() =>
+ $pb.PbList();
+ @$core.pragma('dart2js:noInline')
+ static AlignmentData getDefault() => _defaultInstance ??=
+ $pb.GeneratedMessage.$_defaultFor(create);
+ static AlignmentData? _defaultInstance;
+
+ AlignmentData_AlignmentType whichAlignmentType() =>
+ _AlignmentData_AlignmentTypeByTag[$_whichOneof(0)]!;
+ void clearAlignmentType() => $_clearField($_whichOneof(0));
+
+ @$pb.TagNumber(1)
+ AlignmentData_PredefinedAlignment get predefined => $_getN(0);
+ @$pb.TagNumber(1)
+ set predefined(AlignmentData_PredefinedAlignment v) {
+ $_setField(1, v);
+ }
+
+ @$pb.TagNumber(1)
+ $core.bool hasPredefined() => $_has(0);
+ @$pb.TagNumber(1)
+ void clearPredefined() => $_clearField(1);
+
+ @$pb.TagNumber(2)
+ XYAlignment get xy => $_getN(1);
+ @$pb.TagNumber(2)
+ set xy(XYAlignment v) {
+ $_setField(2, v);
+ }
+
+ @$pb.TagNumber(2)
+ $core.bool hasXy() => $_has(1);
+ @$pb.TagNumber(2)
+ void clearXy() => $_clearField(2);
+ @$pb.TagNumber(2)
+ XYAlignment ensureXy() => $_ensure(1);
+}
+
+class XYAlignment extends $pb.GeneratedMessage {
+ factory XYAlignment({
+ $core.double? x,
+ $core.double? y,
+ }) {
+ final $result = create();
+ if (x != null) {
+ $result.x = x;
+ }
+ if (y != null) {
+ $result.y = y;
+ }
+ return $result;
+ }
+ XYAlignment._() : super();
+ factory XYAlignment.fromBuffer($core.List<$core.int> i,
+ [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
+ create()..mergeFromBuffer(i, r);
+ factory XYAlignment.fromJson($core.String i,
+ [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
+ create()..mergeFromJson(i, r);
+
+ static final $pb.BuilderInfo _i = $pb.BuilderInfo(
+ _omitMessageNames ? '' : 'XYAlignment',
+ package: const $pb.PackageName(_omitMessageNames ? '' : 'flutter_sdui'),
+ createEmptyInstance: create)
+ ..a<$core.double>(1, _omitFieldNames ? '' : 'x', $pb.PbFieldType.OD)
+ ..a<$core.double>(2, _omitFieldNames ? '' : 'y', $pb.PbFieldType.OD)
+ ..hasRequiredFields = false;
+
+ @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
+ XYAlignment clone() => XYAlignment()..mergeFromMessage(this);
+ @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
+ XYAlignment copyWith(void Function(XYAlignment) updates) =>
+ super.copyWith((message) => updates(message as XYAlignment))
+ as XYAlignment;
+
+ $pb.BuilderInfo get info_ => _i;
+
+ @$core.pragma('dart2js:noInline')
+ static XYAlignment create() => XYAlignment._();
+ XYAlignment createEmptyInstance() => create();
+ static $pb.PbList createRepeated() => $pb.PbList();
+ @$core.pragma('dart2js:noInline')
+ static XYAlignment getDefault() => _defaultInstance ??=
+ $pb.GeneratedMessage.$_defaultFor(create);
+ static XYAlignment? _defaultInstance;
+
+ @$pb.TagNumber(1)
+ $core.double get x => $_getN(0);
+ @$pb.TagNumber(1)
+ set x($core.double v) {
+ $_setDouble(0, v);
+ }
+
+ @$pb.TagNumber(1)
+ $core.bool hasX() => $_has(0);
+ @$pb.TagNumber(1)
+ void clearX() => $_clearField(1);
+
+ @$pb.TagNumber(2)
+ $core.double get y => $_getN(1);
+ @$pb.TagNumber(2)
+ set y($core.double v) {
+ $_setDouble(1, v);
+ }
+
+ @$pb.TagNumber(2)
+ $core.bool hasY() => $_has(1);
+ @$pb.TagNumber(2)
+ void clearY() => $_clearField(2);
+}
+
+/// Message for DecorationImage
+class DecorationImageData extends $pb.GeneratedMessage {
+ factory DecorationImageData({
+ $core.String? src,
+ BoxFitProto? fit,
+ AlignmentData? alignment,
+ ImageRepeatProto? repeat,
+ $core.bool? matchTextDirection,
+ $core.double? scale,
+ $core.double? opacity,
+ FilterQualityProto? filterQuality,
+ $core.bool? invertColors,
+ $core.bool? isAntiAlias,
+ }) {
+ final $result = create();
+ if (src != null) {
+ $result.src = src;
+ }
+ if (fit != null) {
+ $result.fit = fit;
+ }
+ if (alignment != null) {
+ $result.alignment = alignment;
+ }
+ if (repeat != null) {
+ $result.repeat = repeat;
+ }
+ if (matchTextDirection != null) {
+ $result.matchTextDirection = matchTextDirection;
+ }
+ if (scale != null) {
+ $result.scale = scale;
+ }
+ if (opacity != null) {
+ $result.opacity = opacity;
+ }
+ if (filterQuality != null) {
+ $result.filterQuality = filterQuality;
+ }
+ if (invertColors != null) {
+ $result.invertColors = invertColors;
+ }
+ if (isAntiAlias != null) {
+ $result.isAntiAlias = isAntiAlias;
+ }
+ return $result;
+ }
+ DecorationImageData._() : super();
+ factory DecorationImageData.fromBuffer($core.List<$core.int> i,
+ [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
+ create()..mergeFromBuffer(i, r);
+ factory DecorationImageData.fromJson($core.String i,
+ [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
+ create()..mergeFromJson(i, r);
+
+ static final $pb.BuilderInfo _i = $pb.BuilderInfo(
+ _omitMessageNames ? '' : 'DecorationImageData',
+ package: const $pb.PackageName(_omitMessageNames ? '' : 'flutter_sdui'),
+ createEmptyInstance: create)
+ ..aOS(1, _omitFieldNames ? '' : 'src')
+ ..e(2, _omitFieldNames ? '' : 'fit', $pb.PbFieldType.OE,
+ defaultOrMaker: BoxFitProto.BOX_FIT_UNSPECIFIED,
+ valueOf: BoxFitProto.valueOf,
+ enumValues: BoxFitProto.values)
+ ..aOM(3, _omitFieldNames ? '' : 'alignment',
+ subBuilder: AlignmentData.create)
+ ..e(
+ 4, _omitFieldNames ? '' : 'repeat', $pb.PbFieldType.OE,
+ defaultOrMaker: ImageRepeatProto.IMAGE_REPEAT_UNSPECIFIED,
+ valueOf: ImageRepeatProto.valueOf,
+ enumValues: ImageRepeatProto.values)
+ ..aOB(5, _omitFieldNames ? '' : 'matchTextDirection')
+ ..a<$core.double>(6, _omitFieldNames ? '' : 'scale', $pb.PbFieldType.OD)
+ ..a<$core.double>(7, _omitFieldNames ? '' : 'opacity', $pb.PbFieldType.OD)
+ ..e(
+ 8, _omitFieldNames ? '' : 'filterQuality', $pb.PbFieldType.OE,
+ defaultOrMaker: FilterQualityProto.FILTER_QUALITY_UNSPECIFIED,
+ valueOf: FilterQualityProto.valueOf,
+ enumValues: FilterQualityProto.values)
+ ..aOB(9, _omitFieldNames ? '' : 'invertColors')
+ ..aOB(10, _omitFieldNames ? '' : 'isAntiAlias')
+ ..hasRequiredFields = false;
+
+ @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
+ DecorationImageData clone() => DecorationImageData()..mergeFromMessage(this);
+ @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
+ DecorationImageData copyWith(void Function(DecorationImageData) updates) =>
+ super.copyWith((message) => updates(message as DecorationImageData))
+ as DecorationImageData;
+
+ $pb.BuilderInfo get info_ => _i;
+
+ @$core.pragma('dart2js:noInline')
+ static DecorationImageData create() => DecorationImageData._();
+ DecorationImageData createEmptyInstance() => create();
+ static $pb.PbList createRepeated() =>
+ $pb.PbList();
+ @$core.pragma('dart2js:noInline')
+ static DecorationImageData getDefault() => _defaultInstance ??=
+ $pb.GeneratedMessage.$_defaultFor(create);
+ static DecorationImageData? _defaultInstance;
+
+ @$pb.TagNumber(1)
+ $core.String get src => $_getSZ(0);
+ @$pb.TagNumber(1)
+ set src($core.String v) {
+ $_setString(0, v);
+ }
+
+ @$pb.TagNumber(1)
+ $core.bool hasSrc() => $_has(0);
+ @$pb.TagNumber(1)
+ void clearSrc() => $_clearField(1);
+
+ @$pb.TagNumber(2)
+ BoxFitProto get fit => $_getN(1);
+ @$pb.TagNumber(2)
+ set fit(BoxFitProto v) {
+ $_setField(2, v);
+ }
+
+ @$pb.TagNumber(2)
+ $core.bool hasFit() => $_has(1);
+ @$pb.TagNumber(2)
+ void clearFit() => $_clearField(2);
+
+ @$pb.TagNumber(3)
+ AlignmentData get alignment => $_getN(2);
+ @$pb.TagNumber(3)
+ set alignment(AlignmentData v) {
+ $_setField(3, v);
+ }
+
+ @$pb.TagNumber(3)
+ $core.bool hasAlignment() => $_has(2);
+ @$pb.TagNumber(3)
+ void clearAlignment() => $_clearField(3);
+ @$pb.TagNumber(3)
+ AlignmentData ensureAlignment() => $_ensure(2);
+
+ @$pb.TagNumber(4)
+ ImageRepeatProto get repeat => $_getN(3);
+ @$pb.TagNumber(4)
+ set repeat(ImageRepeatProto v) {
+ $_setField(4, v);
+ }
+
+ @$pb.TagNumber(4)
+ $core.bool hasRepeat() => $_has(3);
+ @$pb.TagNumber(4)
+ void clearRepeat() => $_clearField(4);
+
+ @$pb.TagNumber(5)
+ $core.bool get matchTextDirection => $_getBF(4);
+ @$pb.TagNumber(5)
+ set matchTextDirection($core.bool v) {
+ $_setBool(4, v);
+ }
+
+ @$pb.TagNumber(5)
+ $core.bool hasMatchTextDirection() => $_has(4);
+ @$pb.TagNumber(5)
+ void clearMatchTextDirection() => $_clearField(5);
+
+ @$pb.TagNumber(6)
+ $core.double get scale => $_getN(5);
+ @$pb.TagNumber(6)
+ set scale($core.double v) {
+ $_setDouble(5, v);
+ }
+
+ @$pb.TagNumber(6)
+ $core.bool hasScale() => $_has(5);
+ @$pb.TagNumber(6)
+ void clearScale() => $_clearField(6);
+
+ @$pb.TagNumber(7)
+ $core.double get opacity => $_getN(6);
+ @$pb.TagNumber(7)
+ set opacity($core.double v) {
+ $_setDouble(6, v);
+ }
+
+ @$pb.TagNumber(7)
+ $core.bool hasOpacity() => $_has(6);
+ @$pb.TagNumber(7)
+ void clearOpacity() => $_clearField(7);
+
+ @$pb.TagNumber(8)
+ FilterQualityProto get filterQuality => $_getN(7);
+ @$pb.TagNumber(8)
+ set filterQuality(FilterQualityProto v) {
+ $_setField(8, v);
+ }
+
+ @$pb.TagNumber(8)
+ $core.bool hasFilterQuality() => $_has(7);
+ @$pb.TagNumber(8)
+ void clearFilterQuality() => $_clearField(8);
+
+ @$pb.TagNumber(9)
+ $core.bool get invertColors => $_getBF(8);
+ @$pb.TagNumber(9)
+ set invertColors($core.bool v) {
+ $_setBool(8, v);
+ }
+
+ @$pb.TagNumber(9)
+ $core.bool hasInvertColors() => $_has(8);
+ @$pb.TagNumber(9)
+ void clearInvertColors() => $_clearField(9);
+
+ @$pb.TagNumber(10)
+ $core.bool get isAntiAlias => $_getBF(9);
+ @$pb.TagNumber(10)
+ set isAntiAlias($core.bool v) {
+ $_setBool(9, v);
+ }
+
+ @$pb.TagNumber(10)
+ $core.bool hasIsAntiAlias() => $_has(9);
+ @$pb.TagNumber(10)
+ void clearIsAntiAlias() => $_clearField(10);
+}
+
+/// New message for Box Constraints
+class BoxConstraintsData extends $pb.GeneratedMessage {
+ factory BoxConstraintsData({
+ $core.double? minWidth,
+ $core.double? maxWidth,
+ $core.double? minHeight,
+ $core.double? maxHeight,
+ }) {
+ final $result = create();
+ if (minWidth != null) {
+ $result.minWidth = minWidth;
+ }
+ if (maxWidth != null) {
+ $result.maxWidth = maxWidth;
+ }
+ if (minHeight != null) {
+ $result.minHeight = minHeight;
+ }
+ if (maxHeight != null) {
+ $result.maxHeight = maxHeight;
+ }
+ return $result;
+ }
+ BoxConstraintsData._() : super();
+ factory BoxConstraintsData.fromBuffer($core.List<$core.int> i,
+ [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
+ create()..mergeFromBuffer(i, r);
+ factory BoxConstraintsData.fromJson($core.String i,
+ [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
+ create()..mergeFromJson(i, r);
+
+ static final $pb.BuilderInfo _i = $pb.BuilderInfo(
+ _omitMessageNames ? '' : 'BoxConstraintsData',
+ package: const $pb.PackageName(_omitMessageNames ? '' : 'flutter_sdui'),
+ createEmptyInstance: create)
+ ..a<$core.double>(1, _omitFieldNames ? '' : 'minWidth', $pb.PbFieldType.OD)
+ ..a<$core.double>(2, _omitFieldNames ? '' : 'maxWidth', $pb.PbFieldType.OD)
+ ..a<$core.double>(3, _omitFieldNames ? '' : 'minHeight', $pb.PbFieldType.OD)
+ ..a<$core.double>(4, _omitFieldNames ? '' : 'maxHeight', $pb.PbFieldType.OD)
+ ..hasRequiredFields = false;
+
+ @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
+ BoxConstraintsData clone() => BoxConstraintsData()..mergeFromMessage(this);
+ @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
+ BoxConstraintsData copyWith(void Function(BoxConstraintsData) updates) =>
+ super.copyWith((message) => updates(message as BoxConstraintsData))
+ as BoxConstraintsData;
+
+ $pb.BuilderInfo get info_ => _i;
+
+ @$core.pragma('dart2js:noInline')
+ static BoxConstraintsData create() => BoxConstraintsData._();
+ BoxConstraintsData createEmptyInstance() => create();
+ static $pb.PbList createRepeated() =>
+ $pb.PbList();
+ @$core.pragma('dart2js:noInline')
+ static BoxConstraintsData getDefault() => _defaultInstance ??=
+ $pb.GeneratedMessage.$_defaultFor(create);
+ static BoxConstraintsData? _defaultInstance;
+
+ @$pb.TagNumber(1)
+ $core.double get minWidth => $_getN(0);
+ @$pb.TagNumber(1)
+ set minWidth($core.double v) {
+ $_setDouble(0, v);
+ }
+
+ @$pb.TagNumber(1)
+ $core.bool hasMinWidth() => $_has(0);
+ @$pb.TagNumber(1)
+ void clearMinWidth() => $_clearField(1);
+
+ @$pb.TagNumber(2)
+ $core.double get maxWidth => $_getN(1);
+ @$pb.TagNumber(2)
+ set maxWidth($core.double v) {
+ $_setDouble(1, v);
+ }
+
+ @$pb.TagNumber(2)
+ $core.bool hasMaxWidth() => $_has(1);
+ @$pb.TagNumber(2)
+ void clearMaxWidth() => $_clearField(2);
+
+ @$pb.TagNumber(3)
+ $core.double get minHeight => $_getN(2);
+ @$pb.TagNumber(3)
+ set minHeight($core.double v) {
+ $_setDouble(2, v);
+ }
+
+ @$pb.TagNumber(3)
+ $core.bool hasMinHeight() => $_has(2);
+ @$pb.TagNumber(3)
+ void clearMinHeight() => $_clearField(3);
+
+ @$pb.TagNumber(4)
+ $core.double get maxHeight => $_getN(3);
+ @$pb.TagNumber(4)
+ set maxHeight($core.double v) {
+ $_setDouble(3, v);
+ }
+
+ @$pb.TagNumber(4)
+ $core.bool hasMaxHeight() => $_has(3);
+ @$pb.TagNumber(4)
+ void clearMaxHeight() => $_clearField(4);
+}
+
+/// New message for Transform
+class TransformData extends $pb.GeneratedMessage {
+ factory TransformData({
+ TransformData_TransformType? type,
+ $core.Iterable<$core.double>? matrixValues,
+ $core.double? translateX,
+ $core.double? translateY,
+ $core.double? translateZ,
+ $core.double? rotationAngle,
+ $core.double? rotationX,
+ $core.double? rotationY,
+ $core.double? rotationZ,
+ $core.double? scaleX,
+ $core.double? scaleY,
+ $core.double? scaleZ,
+ }) {
+ final $result = create();
+ if (type != null) {
+ $result.type = type;
+ }
+ if (matrixValues != null) {
+ $result.matrixValues.addAll(matrixValues);
+ }
+ if (translateX != null) {
+ $result.translateX = translateX;
+ }
+ if (translateY != null) {
+ $result.translateY = translateY;
+ }
+ if (translateZ != null) {
+ $result.translateZ = translateZ;
+ }
+ if (rotationAngle != null) {
+ $result.rotationAngle = rotationAngle;
+ }
+ if (rotationX != null) {
+ $result.rotationX = rotationX;
+ }
+ if (rotationY != null) {
+ $result.rotationY = rotationY;
+ }
+ if (rotationZ != null) {
+ $result.rotationZ = rotationZ;
+ }
+ if (scaleX != null) {
+ $result.scaleX = scaleX;
+ }
+ if (scaleY != null) {
+ $result.scaleY = scaleY;
+ }
+ if (scaleZ != null) {
+ $result.scaleZ = scaleZ;
+ }
+ return $result;
+ }
+ TransformData._() : super();
+ factory TransformData.fromBuffer($core.List<$core.int> i,
+ [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
+ create()..mergeFromBuffer(i, r);
+ factory TransformData.fromJson($core.String i,
+ [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
+ create()..mergeFromJson(i, r);
+
+ static final $pb.BuilderInfo _i = $pb.BuilderInfo(
+ _omitMessageNames ? '' : 'TransformData',
+ package: const $pb.PackageName(_omitMessageNames ? '' : 'flutter_sdui'),
+ createEmptyInstance: create)
+ ..e(
+ 1, _omitFieldNames ? '' : 'type', $pb.PbFieldType.OE,
+ defaultOrMaker: TransformData_TransformType.TRANSFORM_TYPE_UNSPECIFIED,
+ valueOf: TransformData_TransformType.valueOf,
+ enumValues: TransformData_TransformType.values)
+ ..p<$core.double>(
+ 2, _omitFieldNames ? '' : 'matrixValues', $pb.PbFieldType.KD)
+ ..a<$core.double>(
+ 3, _omitFieldNames ? '' : 'translateX', $pb.PbFieldType.OD)
+ ..a<$core.double>(
+ 4, _omitFieldNames ? '' : 'translateY', $pb.PbFieldType.OD)
+ ..a<$core.double>(
+ 5, _omitFieldNames ? '' : 'translateZ', $pb.PbFieldType.OD)
+ ..a<$core.double>(
+ 6, _omitFieldNames ? '' : 'rotationAngle', $pb.PbFieldType.OD)
+ ..a<$core.double>(7, _omitFieldNames ? '' : 'rotationX', $pb.PbFieldType.OD)
+ ..a<$core.double>(8, _omitFieldNames ? '' : 'rotationY', $pb.PbFieldType.OD)
+ ..a<$core.double>(9, _omitFieldNames ? '' : 'rotationZ', $pb.PbFieldType.OD)
+ ..a<$core.double>(10, _omitFieldNames ? '' : 'scaleX', $pb.PbFieldType.OD)
+ ..a<$core.double>(11, _omitFieldNames ? '' : 'scaleY', $pb.PbFieldType.OD)
+ ..a<$core.double>(12, _omitFieldNames ? '' : 'scaleZ', $pb.PbFieldType.OD)
+ ..hasRequiredFields = false;
+
+ @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
+ TransformData clone() => TransformData()..mergeFromMessage(this);
+ @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
+ TransformData copyWith(void Function(TransformData) updates) =>
+ super.copyWith((message) => updates(message as TransformData))
+ as TransformData;
+
+ $pb.BuilderInfo get info_ => _i;
+
+ @$core.pragma('dart2js:noInline')
+ static TransformData create() => TransformData._();
+ TransformData createEmptyInstance() => create();
+ static $pb.PbList createRepeated() =>
+ $pb.PbList();
+ @$core.pragma('dart2js:noInline')
+ static TransformData getDefault() => _defaultInstance ??=
+ $pb.GeneratedMessage.$_defaultFor(create);
+ static TransformData? _defaultInstance;
+
+ @$pb.TagNumber(1)
+ TransformData_TransformType get type => $_getN(0);
+ @$pb.TagNumber(1)
+ set type(TransformData_TransformType v) {
+ $_setField(1, v);
+ }
+
+ @$pb.TagNumber(1)
+ $core.bool hasType() => $_has(0);
+ @$pb.TagNumber(1)
+ void clearType() => $_clearField(1);
+
+ /// Matrix 4x4 (row-major order)
+ @$pb.TagNumber(2)
+ $pb.PbList<$core.double> get matrixValues => $_getList(1);
+
+ /// Translation
+ @$pb.TagNumber(3)
+ $core.double get translateX => $_getN(2);
+ @$pb.TagNumber(3)
+ set translateX($core.double v) {
+ $_setDouble(2, v);
+ }
+
+ @$pb.TagNumber(3)
+ $core.bool hasTranslateX() => $_has(2);
+ @$pb.TagNumber(3)
+ void clearTranslateX() => $_clearField(3);
+
+ @$pb.TagNumber(4)
+ $core.double get translateY => $_getN(3);
+ @$pb.TagNumber(4)
+ set translateY($core.double v) {
+ $_setDouble(3, v);
+ }
+
+ @$pb.TagNumber(4)
+ $core.bool hasTranslateY() => $_has(3);
+ @$pb.TagNumber(4)
+ void clearTranslateY() => $_clearField(4);
+
+ @$pb.TagNumber(5)
+ $core.double get translateZ => $_getN(4);
+ @$pb.TagNumber(5)
+ set translateZ($core.double v) {
+ $_setDouble(4, v);
+ }
+
+ @$pb.TagNumber(5)
+ $core.bool hasTranslateZ() => $_has(4);
+ @$pb.TagNumber(5)
+ void clearTranslateZ() => $_clearField(5);
+
+ /// Rotation
+ @$pb.TagNumber(6)
+ $core.double get rotationAngle => $_getN(5);
+ @$pb.TagNumber(6)
+ set rotationAngle($core.double v) {
+ $_setDouble(5, v);
+ }
+
+ @$pb.TagNumber(6)
+ $core.bool hasRotationAngle() => $_has(5);
+ @$pb.TagNumber(6)
+ void clearRotationAngle() => $_clearField(6);
+
+ @$pb.TagNumber(7)
+ $core.double get rotationX => $_getN(6);
+ @$pb.TagNumber(7)
+ set rotationX($core.double v) {
+ $_setDouble(6, v);
+ }
+
+ @$pb.TagNumber(7)
+ $core.bool hasRotationX() => $_has(6);
+ @$pb.TagNumber(7)
+ void clearRotationX() => $_clearField(7);
+
+ @$pb.TagNumber(8)
+ $core.double get rotationY => $_getN(7);
+ @$pb.TagNumber(8)
+ set rotationY($core.double v) {
+ $_setDouble(7, v);
+ }
+
+ @$pb.TagNumber(8)
+ $core.bool hasRotationY() => $_has(7);
+ @$pb.TagNumber(8)
+ void clearRotationY() => $_clearField(8);
+
+ @$pb.TagNumber(9)
+ $core.double get rotationZ => $_getN(8);
+ @$pb.TagNumber(9)
+ set rotationZ($core.double v) {
+ $_setDouble(8, v);
+ }
+
+ @$pb.TagNumber(9)
+ $core.bool hasRotationZ() => $_has(8);
+ @$pb.TagNumber(9)
+ void clearRotationZ() => $_clearField(9);
+
+ /// Scale
+ @$pb.TagNumber(10)
+ $core.double get scaleX => $_getN(9);
+ @$pb.TagNumber(10)
+ set scaleX($core.double v) {
+ $_setDouble(9, v);
+ }
+
+ @$pb.TagNumber(10)
+ $core.bool hasScaleX() => $_has(9);
+ @$pb.TagNumber(10)
+ void clearScaleX() => $_clearField(10);
+
+ @$pb.TagNumber(11)
+ $core.double get scaleY => $_getN(10);
+ @$pb.TagNumber(11)
+ set scaleY($core.double v) {
+ $_setDouble(10, v);
+ }
+
+ @$pb.TagNumber(11)
+ $core.bool hasScaleY() => $_has(10);
+ @$pb.TagNumber(11)
+ void clearScaleY() => $_clearField(11);
+
+ @$pb.TagNumber(12)
+ $core.double get scaleZ => $_getN(11);
+ @$pb.TagNumber(12)
+ set scaleZ($core.double v) {
+ $_setDouble(11, v);
+ }
+
+ @$pb.TagNumber(12)
+ $core.bool hasScaleZ() => $_has(11);
+ @$pb.TagNumber(12)
+ void clearScaleZ() => $_clearField(12);
+}
+
+/// New message for Rectangle data
+class RectData extends $pb.GeneratedMessage {
+ factory RectData({
+ $core.double? left,
+ $core.double? top,
+ $core.double? right,
+ $core.double? bottom,
+ }) {
+ final $result = create();
+ if (left != null) {
+ $result.left = left;
+ }
+ if (top != null) {
+ $result.top = top;
+ }
+ if (right != null) {
+ $result.right = right;
+ }
+ if (bottom != null) {
+ $result.bottom = bottom;
+ }
+ return $result;
+ }
+ RectData._() : super();
+ factory RectData.fromBuffer($core.List<$core.int> i,
+ [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
+ create()..mergeFromBuffer(i, r);
+ factory RectData.fromJson($core.String i,
+ [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
+ create()..mergeFromJson(i, r);
+
+ static final $pb.BuilderInfo _i = $pb.BuilderInfo(
+ _omitMessageNames ? '' : 'RectData',
+ package: const $pb.PackageName(_omitMessageNames ? '' : 'flutter_sdui'),
+ createEmptyInstance: create)
+ ..a<$core.double>(1, _omitFieldNames ? '' : 'left', $pb.PbFieldType.OD)
+ ..a<$core.double>(2, _omitFieldNames ? '' : 'top', $pb.PbFieldType.OD)
+ ..a<$core.double>(3, _omitFieldNames ? '' : 'right', $pb.PbFieldType.OD)
+ ..a<$core.double>(4, _omitFieldNames ? '' : 'bottom', $pb.PbFieldType.OD)
+ ..hasRequiredFields = false;
+
+ @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
+ RectData clone() => RectData()..mergeFromMessage(this);
+ @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
+ RectData copyWith(void Function(RectData) updates) =>
+ super.copyWith((message) => updates(message as RectData)) as RectData;
+
+ $pb.BuilderInfo get info_ => _i;
+
+ @$core.pragma('dart2js:noInline')
+ static RectData create() => RectData._();
+ RectData createEmptyInstance() => create();
+ static $pb.PbList createRepeated() => $pb.PbList();
+ @$core.pragma('dart2js:noInline')
+ static RectData getDefault() =>
+ _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor(create);
+ static RectData? _defaultInstance;
+
+ @$pb.TagNumber(1)
+ $core.double get left => $_getN(0);
+ @$pb.TagNumber(1)
+ set left($core.double v) {
+ $_setDouble(0, v);
+ }
+
+ @$pb.TagNumber(1)
+ $core.bool hasLeft() => $_has(0);
+ @$pb.TagNumber(1)
+ void clearLeft() => $_clearField(1);
+
+ @$pb.TagNumber(2)
+ $core.double get top => $_getN(1);
+ @$pb.TagNumber(2)
+ set top($core.double v) {
+ $_setDouble(1, v);
+ }
+
+ @$pb.TagNumber(2)
+ $core.bool hasTop() => $_has(1);
+ @$pb.TagNumber(2)
+ void clearTop() => $_clearField(2);
+
+ @$pb.TagNumber(3)
+ $core.double get right => $_getN(2);
+ @$pb.TagNumber(3)
+ set right($core.double v) {
+ $_setDouble(2, v);
+ }
+
+ @$pb.TagNumber(3)
+ $core.bool hasRight() => $_has(2);
+ @$pb.TagNumber(3)
+ void clearRight() => $_clearField(3);
+
+ @$pb.TagNumber(4)
+ $core.double get bottom => $_getN(3);
+ @$pb.TagNumber(4)
+ set bottom($core.double v) {
+ $_setDouble(3, v);
+ }
+
+ @$pb.TagNumber(4)
+ $core.bool hasBottom() => $_has(3);
+ @$pb.TagNumber(4)
+ void clearBottom() => $_clearField(4);
+}
+
+/// New message for Shadow
+class ShadowData extends $pb.GeneratedMessage {
+ factory ShadowData({
+ ColorData? color,
+ $core.double? offsetX,
+ $core.double? offsetY,
+ $core.double? blurRadius,
+ }) {
+ final $result = create();
+ if (color != null) {
+ $result.color = color;
+ }
+ if (offsetX != null) {
+ $result.offsetX = offsetX;
+ }
+ if (offsetY != null) {
+ $result.offsetY = offsetY;
+ }
+ if (blurRadius != null) {
+ $result.blurRadius = blurRadius;
+ }
+ return $result;
+ }
+ ShadowData._() : super();
+ factory ShadowData.fromBuffer($core.List<$core.int> i,
+ [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
+ create()..mergeFromBuffer(i, r);
+ factory ShadowData.fromJson($core.String i,
+ [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
+ create()..mergeFromJson(i, r);
+
+ static final $pb.BuilderInfo _i = $pb.BuilderInfo(
+ _omitMessageNames ? '' : 'ShadowData',
+ package: const $pb.PackageName(_omitMessageNames ? '' : 'flutter_sdui'),
+ createEmptyInstance: create)
+ ..aOM(1, _omitFieldNames ? '' : 'color',
+ subBuilder: ColorData.create)
+ ..a<$core.double>(2, _omitFieldNames ? '' : 'offsetX', $pb.PbFieldType.OD)
+ ..a<$core.double>(3, _omitFieldNames ? '' : 'offsetY', $pb.PbFieldType.OD)
+ ..a<$core.double>(
+ 4, _omitFieldNames ? '' : 'blurRadius', $pb.PbFieldType.OD)
+ ..hasRequiredFields = false;
+
+ @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
+ ShadowData clone() => ShadowData()..mergeFromMessage(this);
+ @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
+ ShadowData copyWith(void Function(ShadowData) updates) =>
+ super.copyWith((message) => updates(message as ShadowData)) as ShadowData;
+
+ $pb.BuilderInfo get info_ => _i;
+
+ @$core.pragma('dart2js:noInline')
+ static ShadowData create() => ShadowData._();
+ ShadowData createEmptyInstance() => create();
+ static $pb.PbList createRepeated() => $pb.PbList();
+ @$core.pragma('dart2js:noInline')
+ static ShadowData getDefault() => _defaultInstance ??=
+ $pb.GeneratedMessage.$_defaultFor(create);
+ static ShadowData? _defaultInstance;
+
+ @$pb.TagNumber(1)
+ ColorData get color => $_getN(0);
+ @$pb.TagNumber(1)
+ set color(ColorData v) {
+ $_setField(1, v);
+ }
+
+ @$pb.TagNumber(1)
+ $core.bool hasColor() => $_has(0);
+ @$pb.TagNumber(1)
+ void clearColor() => $_clearField(1);
+ @$pb.TagNumber(1)
+ ColorData ensureColor() => $_ensure(0);
+
+ @$pb.TagNumber(2)
+ $core.double get offsetX => $_getN(1);
+ @$pb.TagNumber(2)
+ set offsetX($core.double v) {
+ $_setDouble(1, v);
+ }
+
+ @$pb.TagNumber(2)
+ $core.bool hasOffsetX() => $_has(1);
+ @$pb.TagNumber(2)
+ void clearOffsetX() => $_clearField(2);
+
+ @$pb.TagNumber(3)
+ $core.double get offsetY => $_getN(2);
+ @$pb.TagNumber(3)
+ set offsetY($core.double v) {
+ $_setDouble(2, v);
+ }
+
+ @$pb.TagNumber(3)
+ $core.bool hasOffsetY() => $_has(2);
+ @$pb.TagNumber(3)
+ void clearOffsetY() => $_clearField(3);
+
+ @$pb.TagNumber(4)
+ $core.double get blurRadius => $_getN(3);
+ @$pb.TagNumber(4)
+ set blurRadius($core.double v) {
+ $_setDouble(3, v);
+ }
+
+ @$pb.TagNumber(4)
+ $core.bool hasBlurRadius() => $_has(3);
+ @$pb.TagNumber(4)
+ void clearBlurRadius() => $_clearField(4);
+}
+
+class SduiRequest extends $pb.GeneratedMessage {
+ factory SduiRequest({
+ $core.String? screenId,
+ }) {
+ final $result = create();
+ if (screenId != null) {
+ $result.screenId = screenId;
+ }
+ return $result;
+ }
+ SduiRequest._() : super();
+ factory SduiRequest.fromBuffer($core.List<$core.int> i,
+ [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
+ create()..mergeFromBuffer(i, r);
+ factory SduiRequest.fromJson($core.String i,
+ [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
+ create()..mergeFromJson(i, r);
+
+ static final $pb.BuilderInfo _i = $pb.BuilderInfo(
+ _omitMessageNames ? '' : 'SduiRequest',
+ package: const $pb.PackageName(_omitMessageNames ? '' : 'flutter_sdui'),
+ createEmptyInstance: create)
+ ..aOS(1, _omitFieldNames ? '' : 'screenId')
+ ..hasRequiredFields = false;
+
+ @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
+ SduiRequest clone() => SduiRequest()..mergeFromMessage(this);
+ @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
+ SduiRequest copyWith(void Function(SduiRequest) updates) =>
+ super.copyWith((message) => updates(message as SduiRequest))
+ as SduiRequest;
+
+ $pb.BuilderInfo get info_ => _i;
+
+ @$core.pragma('dart2js:noInline')
+ static SduiRequest create() => SduiRequest._();
+ SduiRequest createEmptyInstance() => create();
+ static $pb.PbList createRepeated() => $pb.PbList();
+ @$core.pragma('dart2js:noInline')
+ static SduiRequest getDefault() => _defaultInstance ??=
+ $pb.GeneratedMessage.$_defaultFor(create);
+ static SduiRequest? _defaultInstance;
+
+ @$pb.TagNumber(1)
+ $core.String get screenId => $_getSZ(0);
+ @$pb.TagNumber(1)
+ set screenId($core.String v) {
+ $_setString(0, v);
+ }
+
+ @$pb.TagNumber(1)
+ $core.bool hasScreenId() => $_has(0);
+ @$pb.TagNumber(1)
+ void clearScreenId() => $_clearField(1);
+}
+
+const _omitFieldNames = $core.bool.fromEnvironment('protobuf.omit_field_names');
+const _omitMessageNames =
+ $core.bool.fromEnvironment('protobuf.omit_message_names');
diff --git a/lib/src/generated/sdui.pbenum.dart b/lib/src/generated/sdui.pbenum.dart
new file mode 100644
index 0000000..cd5fe13
--- /dev/null
+++ b/lib/src/generated/sdui.pbenum.dart
@@ -0,0 +1,796 @@
+//
+// Generated code. Do not modify.
+// source: sdui.proto
+//
+// @dart = 3.3
+
+// ignore_for_file: annotate_overrides, camel_case_types, comment_references
+// ignore_for_file: constant_identifier_names, library_prefixes
+// ignore_for_file: non_constant_identifier_names, prefer_final_fields
+// ignore_for_file: unnecessary_import, unnecessary_this, unused_import
+
+import 'dart:core' as $core;
+
+import 'package:protobuf/protobuf.dart' as $pb;
+
+/// Enum for Widget Types
+class WidgetType extends $pb.ProtobufEnum {
+ static const WidgetType WIDGET_TYPE_UNSPECIFIED =
+ WidgetType._(0, _omitEnumNames ? '' : 'WIDGET_TYPE_UNSPECIFIED');
+ static const WidgetType COLUMN =
+ WidgetType._(1, _omitEnumNames ? '' : 'COLUMN');
+ static const WidgetType ROW = WidgetType._(2, _omitEnumNames ? '' : 'ROW');
+ static const WidgetType TEXT = WidgetType._(3, _omitEnumNames ? '' : 'TEXT');
+ static const WidgetType IMAGE =
+ WidgetType._(4, _omitEnumNames ? '' : 'IMAGE');
+ static const WidgetType SIZED_BOX =
+ WidgetType._(5, _omitEnumNames ? '' : 'SIZED_BOX');
+ static const WidgetType CONTAINER =
+ WidgetType._(6, _omitEnumNames ? '' : 'CONTAINER');
+ static const WidgetType SCAFFOLD =
+ WidgetType._(7, _omitEnumNames ? '' : 'SCAFFOLD');
+ static const WidgetType SPACER =
+ WidgetType._(8, _omitEnumNames ? '' : 'SPACER');
+ static const WidgetType ICON = WidgetType._(9, _omitEnumNames ? '' : 'ICON');
+
+ static const $core.List values = [
+ WIDGET_TYPE_UNSPECIFIED,
+ COLUMN,
+ ROW,
+ TEXT,
+ IMAGE,
+ SIZED_BOX,
+ CONTAINER,
+ SCAFFOLD,
+ SPACER,
+ ICON,
+ ];
+
+ static final $core.List _byValue =
+ $pb.ProtobufEnum.$_initByValueList(values, 9);
+ static WidgetType? valueOf($core.int value) =>
+ value < 0 || value >= _byValue.length ? null : _byValue[value];
+
+ const WidgetType._(super.v, super.n);
+}
+
+/// Message for BoxFit
+class BoxFitProto extends $pb.ProtobufEnum {
+ static const BoxFitProto BOX_FIT_UNSPECIFIED =
+ BoxFitProto._(0, _omitEnumNames ? '' : 'BOX_FIT_UNSPECIFIED');
+ static const BoxFitProto FILL =
+ BoxFitProto._(1, _omitEnumNames ? '' : 'FILL');
+ static const BoxFitProto CONTAIN =
+ BoxFitProto._(2, _omitEnumNames ? '' : 'CONTAIN');
+ static const BoxFitProto COVER =
+ BoxFitProto._(3, _omitEnumNames ? '' : 'COVER');
+ static const BoxFitProto FIT_WIDTH =
+ BoxFitProto._(4, _omitEnumNames ? '' : 'FIT_WIDTH');
+ static const BoxFitProto FIT_HEIGHT =
+ BoxFitProto._(5, _omitEnumNames ? '' : 'FIT_HEIGHT');
+ static const BoxFitProto NONE_BOX_FIT =
+ BoxFitProto._(6, _omitEnumNames ? '' : 'NONE_BOX_FIT');
+ static const BoxFitProto SCALE_DOWN =
+ BoxFitProto._(7, _omitEnumNames ? '' : 'SCALE_DOWN');
+
+ static const $core.List values = [
+ BOX_FIT_UNSPECIFIED,
+ FILL,
+ CONTAIN,
+ COVER,
+ FIT_WIDTH,
+ FIT_HEIGHT,
+ NONE_BOX_FIT,
+ SCALE_DOWN,
+ ];
+
+ static final $core.List _byValue =
+ $pb.ProtobufEnum.$_initByValueList(values, 7);
+ static BoxFitProto? valueOf($core.int value) =>
+ value < 0 || value >= _byValue.length ? null : _byValue[value];
+
+ const BoxFitProto._(super.v, super.n);
+}
+
+/// Enum for BorderStyle
+class BorderStyleProto extends $pb.ProtobufEnum {
+ static const BorderStyleProto BORDER_STYLE_UNSPECIFIED =
+ BorderStyleProto._(0, _omitEnumNames ? '' : 'BORDER_STYLE_UNSPECIFIED');
+ static const BorderStyleProto SOLID =
+ BorderStyleProto._(1, _omitEnumNames ? '' : 'SOLID');
+ static const BorderStyleProto NONE_BORDER =
+ BorderStyleProto._(2, _omitEnumNames ? '' : 'NONE_BORDER');
+
+ static const $core.List values = [
+ BORDER_STYLE_UNSPECIFIED,
+ SOLID,
+ NONE_BORDER,
+ ];
+
+ static final $core.List _byValue =
+ $pb.ProtobufEnum.$_initByValueList(values, 2);
+ static BorderStyleProto? valueOf($core.int value) =>
+ value < 0 || value >= _byValue.length ? null : _byValue[value];
+
+ const BorderStyleProto._(super.v, super.n);
+}
+
+/// Enum for BoxShape
+class BoxShapeProto extends $pb.ProtobufEnum {
+ static const BoxShapeProto BOX_SHAPE_UNSPECIFIED =
+ BoxShapeProto._(0, _omitEnumNames ? '' : 'BOX_SHAPE_UNSPECIFIED');
+ static const BoxShapeProto RECTANGLE =
+ BoxShapeProto._(1, _omitEnumNames ? '' : 'RECTANGLE');
+ static const BoxShapeProto CIRCLE =
+ BoxShapeProto._(2, _omitEnumNames ? '' : 'CIRCLE');
+
+ static const $core.List values = [
+ BOX_SHAPE_UNSPECIFIED,
+ RECTANGLE,
+ CIRCLE,
+ ];
+
+ static final $core.List _byValue =
+ $pb.ProtobufEnum.$_initByValueList(values, 2);
+ static BoxShapeProto? valueOf($core.int value) =>
+ value < 0 || value >= _byValue.length ? null : _byValue[value];
+
+ const BoxShapeProto._(super.v, super.n);
+}
+
+/// Enum for ImageRepeat
+class ImageRepeatProto extends $pb.ProtobufEnum {
+ static const ImageRepeatProto IMAGE_REPEAT_UNSPECIFIED =
+ ImageRepeatProto._(0, _omitEnumNames ? '' : 'IMAGE_REPEAT_UNSPECIFIED');
+ static const ImageRepeatProto REPEAT =
+ ImageRepeatProto._(1, _omitEnumNames ? '' : 'REPEAT');
+ static const ImageRepeatProto REPEAT_X =
+ ImageRepeatProto._(2, _omitEnumNames ? '' : 'REPEAT_X');
+ static const ImageRepeatProto REPEAT_Y =
+ ImageRepeatProto._(3, _omitEnumNames ? '' : 'REPEAT_Y');
+ static const ImageRepeatProto NO_REPEAT =
+ ImageRepeatProto._(4, _omitEnumNames ? '' : 'NO_REPEAT');
+
+ static const $core.List values = [
+ IMAGE_REPEAT_UNSPECIFIED,
+ REPEAT,
+ REPEAT_X,
+ REPEAT_Y,
+ NO_REPEAT,
+ ];
+
+ static final $core.List _byValue =
+ $pb.ProtobufEnum.$_initByValueList(values, 4);
+ static ImageRepeatProto? valueOf($core.int value) =>
+ value < 0 || value >= _byValue.length ? null : _byValue[value];
+
+ const ImageRepeatProto._(super.v, super.n);
+}
+
+/// Enum for FilterQuality
+class FilterQualityProto extends $pb.ProtobufEnum {
+ static const FilterQualityProto FILTER_QUALITY_UNSPECIFIED =
+ FilterQualityProto._(
+ 0, _omitEnumNames ? '' : 'FILTER_QUALITY_UNSPECIFIED');
+ static const FilterQualityProto NONE_FQ =
+ FilterQualityProto._(1, _omitEnumNames ? '' : 'NONE_FQ');
+ static const FilterQualityProto LOW =
+ FilterQualityProto._(2, _omitEnumNames ? '' : 'LOW');
+ static const FilterQualityProto MEDIUM =
+ FilterQualityProto._(3, _omitEnumNames ? '' : 'MEDIUM');
+ static const FilterQualityProto HIGH =
+ FilterQualityProto._(4, _omitEnumNames ? '' : 'HIGH');
+
+ static const $core.List values = [
+ FILTER_QUALITY_UNSPECIFIED,
+ NONE_FQ,
+ LOW,
+ MEDIUM,
+ HIGH,
+ ];
+
+ static final $core.List _byValue =
+ $pb.ProtobufEnum.$_initByValueList(values, 4);
+ static FilterQualityProto? valueOf($core.int value) =>
+ value < 0 || value >= _byValue.length ? null : _byValue[value];
+
+ const FilterQualityProto._(super.v, super.n);
+}
+
+/// New enums for Row and Column properties
+class MainAxisAlignmentProto extends $pb.ProtobufEnum {
+ static const MainAxisAlignmentProto MAIN_AXIS_ALIGNMENT_UNSPECIFIED =
+ MainAxisAlignmentProto._(
+ 0, _omitEnumNames ? '' : 'MAIN_AXIS_ALIGNMENT_UNSPECIFIED');
+ static const MainAxisAlignmentProto MAIN_AXIS_START =
+ MainAxisAlignmentProto._(1, _omitEnumNames ? '' : 'MAIN_AXIS_START');
+ static const MainAxisAlignmentProto MAIN_AXIS_END =
+ MainAxisAlignmentProto._(2, _omitEnumNames ? '' : 'MAIN_AXIS_END');
+ static const MainAxisAlignmentProto MAIN_AXIS_CENTER =
+ MainAxisAlignmentProto._(3, _omitEnumNames ? '' : 'MAIN_AXIS_CENTER');
+ static const MainAxisAlignmentProto SPACE_BETWEEN =
+ MainAxisAlignmentProto._(4, _omitEnumNames ? '' : 'SPACE_BETWEEN');
+ static const MainAxisAlignmentProto SPACE_AROUND =
+ MainAxisAlignmentProto._(5, _omitEnumNames ? '' : 'SPACE_AROUND');
+ static const MainAxisAlignmentProto SPACE_EVENLY =
+ MainAxisAlignmentProto._(6, _omitEnumNames ? '' : 'SPACE_EVENLY');
+
+ static const $core.List values =
+ [
+ MAIN_AXIS_ALIGNMENT_UNSPECIFIED,
+ MAIN_AXIS_START,
+ MAIN_AXIS_END,
+ MAIN_AXIS_CENTER,
+ SPACE_BETWEEN,
+ SPACE_AROUND,
+ SPACE_EVENLY,
+ ];
+
+ static final $core.List _byValue =
+ $pb.ProtobufEnum.$_initByValueList(values, 6);
+ static MainAxisAlignmentProto? valueOf($core.int value) =>
+ value < 0 || value >= _byValue.length ? null : _byValue[value];
+
+ const MainAxisAlignmentProto._(super.v, super.n);
+}
+
+class CrossAxisAlignmentProto extends $pb.ProtobufEnum {
+ static const CrossAxisAlignmentProto CROSS_AXIS_ALIGNMENT_UNSPECIFIED =
+ CrossAxisAlignmentProto._(
+ 0, _omitEnumNames ? '' : 'CROSS_AXIS_ALIGNMENT_UNSPECIFIED');
+ static const CrossAxisAlignmentProto CROSS_AXIS_START =
+ CrossAxisAlignmentProto._(1, _omitEnumNames ? '' : 'CROSS_AXIS_START');
+ static const CrossAxisAlignmentProto CROSS_AXIS_END =
+ CrossAxisAlignmentProto._(2, _omitEnumNames ? '' : 'CROSS_AXIS_END');
+ static const CrossAxisAlignmentProto CROSS_AXIS_CENTER =
+ CrossAxisAlignmentProto._(3, _omitEnumNames ? '' : 'CROSS_AXIS_CENTER');
+ static const CrossAxisAlignmentProto STRETCH =
+ CrossAxisAlignmentProto._(4, _omitEnumNames ? '' : 'STRETCH');
+ static const CrossAxisAlignmentProto BASELINE =
+ CrossAxisAlignmentProto._(5, _omitEnumNames ? '' : 'BASELINE');
+
+ static const $core.List values =
+ [
+ CROSS_AXIS_ALIGNMENT_UNSPECIFIED,
+ CROSS_AXIS_START,
+ CROSS_AXIS_END,
+ CROSS_AXIS_CENTER,
+ STRETCH,
+ BASELINE,
+ ];
+
+ static final $core.List _byValue =
+ $pb.ProtobufEnum.$_initByValueList(values, 5);
+ static CrossAxisAlignmentProto? valueOf($core.int value) =>
+ value < 0 || value >= _byValue.length ? null : _byValue[value];
+
+ const CrossAxisAlignmentProto._(super.v, super.n);
+}
+
+class MainAxisSizeProto extends $pb.ProtobufEnum {
+ static const MainAxisSizeProto MAIN_AXIS_SIZE_UNSPECIFIED =
+ MainAxisSizeProto._(
+ 0, _omitEnumNames ? '' : 'MAIN_AXIS_SIZE_UNSPECIFIED');
+ static const MainAxisSizeProto MIN =
+ MainAxisSizeProto._(1, _omitEnumNames ? '' : 'MIN');
+ static const MainAxisSizeProto MAX =
+ MainAxisSizeProto._(2, _omitEnumNames ? '' : 'MAX');
+
+ static const $core.List values = [
+ MAIN_AXIS_SIZE_UNSPECIFIED,
+ MIN,
+ MAX,
+ ];
+
+ static final $core.List _byValue =
+ $pb.ProtobufEnum.$_initByValueList(values, 2);
+ static MainAxisSizeProto? valueOf($core.int value) =>
+ value < 0 || value >= _byValue.length ? null : _byValue[value];
+
+ const MainAxisSizeProto._(super.v, super.n);
+}
+
+class TextDirectionProto extends $pb.ProtobufEnum {
+ static const TextDirectionProto TEXT_DIRECTION_UNSPECIFIED =
+ TextDirectionProto._(
+ 0, _omitEnumNames ? '' : 'TEXT_DIRECTION_UNSPECIFIED');
+ static const TextDirectionProto LTR =
+ TextDirectionProto._(1, _omitEnumNames ? '' : 'LTR');
+ static const TextDirectionProto RTL =
+ TextDirectionProto._(2, _omitEnumNames ? '' : 'RTL');
+
+ static const $core.List values = [
+ TEXT_DIRECTION_UNSPECIFIED,
+ LTR,
+ RTL,
+ ];
+
+ static final $core.List _byValue =
+ $pb.ProtobufEnum.$_initByValueList(values, 2);
+ static TextDirectionProto? valueOf($core.int value) =>
+ value < 0 || value >= _byValue.length ? null : _byValue[value];
+
+ const TextDirectionProto._(super.v, super.n);
+}
+
+class VerticalDirectionProto extends $pb.ProtobufEnum {
+ static const VerticalDirectionProto VERTICAL_DIRECTION_UNSPECIFIED =
+ VerticalDirectionProto._(
+ 0, _omitEnumNames ? '' : 'VERTICAL_DIRECTION_UNSPECIFIED');
+ static const VerticalDirectionProto UP =
+ VerticalDirectionProto._(1, _omitEnumNames ? '' : 'UP');
+ static const VerticalDirectionProto DOWN =
+ VerticalDirectionProto._(2, _omitEnumNames ? '' : 'DOWN');
+
+ static const $core.List values =
+ [
+ VERTICAL_DIRECTION_UNSPECIFIED,
+ UP,
+ DOWN,
+ ];
+
+ static final $core.List _byValue =
+ $pb.ProtobufEnum.$_initByValueList(values, 2);
+ static VerticalDirectionProto? valueOf($core.int value) =>
+ value < 0 || value >= _byValue.length ? null : _byValue[value];
+
+ const VerticalDirectionProto._(super.v, super.n);
+}
+
+class TextBaselineProto extends $pb.ProtobufEnum {
+ static const TextBaselineProto TEXT_BASELINE_UNSPECIFIED =
+ TextBaselineProto._(0, _omitEnumNames ? '' : 'TEXT_BASELINE_UNSPECIFIED');
+ static const TextBaselineProto ALPHABETIC =
+ TextBaselineProto._(1, _omitEnumNames ? '' : 'ALPHABETIC');
+ static const TextBaselineProto IDEOGRAPHIC =
+ TextBaselineProto._(2, _omitEnumNames ? '' : 'IDEOGRAPHIC');
+
+ static const $core.List values = [
+ TEXT_BASELINE_UNSPECIFIED,
+ ALPHABETIC,
+ IDEOGRAPHIC,
+ ];
+
+ static final $core.List _byValue =
+ $pb.ProtobufEnum.$_initByValueList(values, 2);
+ static TextBaselineProto? valueOf($core.int value) =>
+ value < 0 || value >= _byValue.length ? null : _byValue[value];
+
+ const TextBaselineProto._(super.v, super.n);
+}
+
+/// New enum for Clip behavior
+class ClipProto extends $pb.ProtobufEnum {
+ static const ClipProto CLIP_UNSPECIFIED =
+ ClipProto._(0, _omitEnumNames ? '' : 'CLIP_UNSPECIFIED');
+ static const ClipProto CLIP_NONE =
+ ClipProto._(1, _omitEnumNames ? '' : 'CLIP_NONE');
+ static const ClipProto HARD_EDGE =
+ ClipProto._(2, _omitEnumNames ? '' : 'HARD_EDGE');
+ static const ClipProto ANTI_ALIAS =
+ ClipProto._(3, _omitEnumNames ? '' : 'ANTI_ALIAS');
+ static const ClipProto ANTI_ALIAS_WITH_SAVE_LAYER =
+ ClipProto._(4, _omitEnumNames ? '' : 'ANTI_ALIAS_WITH_SAVE_LAYER');
+
+ static const $core.List values = [
+ CLIP_UNSPECIFIED,
+ CLIP_NONE,
+ HARD_EDGE,
+ ANTI_ALIAS,
+ ANTI_ALIAS_WITH_SAVE_LAYER,
+ ];
+
+ static final $core.List _byValue =
+ $pb.ProtobufEnum.$_initByValueList(values, 4);
+ static ClipProto? valueOf($core.int value) =>
+ value < 0 || value >= _byValue.length ? null : _byValue[value];
+
+ const ClipProto._(super.v, super.n);
+}
+
+/// New enums for Text properties
+class TextAlignProto extends $pb.ProtobufEnum {
+ static const TextAlignProto TEXT_ALIGN_UNSPECIFIED =
+ TextAlignProto._(0, _omitEnumNames ? '' : 'TEXT_ALIGN_UNSPECIFIED');
+ static const TextAlignProto LEFT =
+ TextAlignProto._(1, _omitEnumNames ? '' : 'LEFT');
+ static const TextAlignProto RIGHT =
+ TextAlignProto._(2, _omitEnumNames ? '' : 'RIGHT');
+ static const TextAlignProto TEXT_ALIGN_CENTER =
+ TextAlignProto._(3, _omitEnumNames ? '' : 'TEXT_ALIGN_CENTER');
+ static const TextAlignProto JUSTIFY =
+ TextAlignProto._(4, _omitEnumNames ? '' : 'JUSTIFY');
+ static const TextAlignProto TEXT_ALIGN_START =
+ TextAlignProto._(5, _omitEnumNames ? '' : 'TEXT_ALIGN_START');
+ static const TextAlignProto TEXT_ALIGN_END =
+ TextAlignProto._(6, _omitEnumNames ? '' : 'TEXT_ALIGN_END');
+
+ static const $core.List values = [
+ TEXT_ALIGN_UNSPECIFIED,
+ LEFT,
+ RIGHT,
+ TEXT_ALIGN_CENTER,
+ JUSTIFY,
+ TEXT_ALIGN_START,
+ TEXT_ALIGN_END,
+ ];
+
+ static final $core.List _byValue =
+ $pb.ProtobufEnum.$_initByValueList(values, 6);
+ static TextAlignProto? valueOf($core.int value) =>
+ value < 0 || value >= _byValue.length ? null : _byValue[value];
+
+ const TextAlignProto._(super.v, super.n);
+}
+
+class TextOverflowProto extends $pb.ProtobufEnum {
+ static const TextOverflowProto TEXT_OVERFLOW_UNSPECIFIED =
+ TextOverflowProto._(0, _omitEnumNames ? '' : 'TEXT_OVERFLOW_UNSPECIFIED');
+ static const TextOverflowProto CLIP =
+ TextOverflowProto._(1, _omitEnumNames ? '' : 'CLIP');
+ static const TextOverflowProto ELLIPSIS =
+ TextOverflowProto._(2, _omitEnumNames ? '' : 'ELLIPSIS');
+ static const TextOverflowProto FADE =
+ TextOverflowProto._(3, _omitEnumNames ? '' : 'FADE');
+ static const TextOverflowProto VISIBLE =
+ TextOverflowProto._(4, _omitEnumNames ? '' : 'VISIBLE');
+
+ static const $core.List values = [
+ TEXT_OVERFLOW_UNSPECIFIED,
+ CLIP,
+ ELLIPSIS,
+ FADE,
+ VISIBLE,
+ ];
+
+ static final $core.List _byValue =
+ $pb.ProtobufEnum.$_initByValueList(values, 4);
+ static TextOverflowProto? valueOf($core.int value) =>
+ value < 0 || value >= _byValue.length ? null : _byValue[value];
+
+ const TextOverflowProto._(super.v, super.n);
+}
+
+class TextDecorationProto extends $pb.ProtobufEnum {
+ static const TextDecorationProto TEXT_DECORATION_UNSPECIFIED =
+ TextDecorationProto._(
+ 0, _omitEnumNames ? '' : 'TEXT_DECORATION_UNSPECIFIED');
+ static const TextDecorationProto TEXT_DECORATION_NONE =
+ TextDecorationProto._(1, _omitEnumNames ? '' : 'TEXT_DECORATION_NONE');
+ static const TextDecorationProto UNDERLINE =
+ TextDecorationProto._(2, _omitEnumNames ? '' : 'UNDERLINE');
+ static const TextDecorationProto OVERLINE =
+ TextDecorationProto._(3, _omitEnumNames ? '' : 'OVERLINE');
+ static const TextDecorationProto LINE_THROUGH =
+ TextDecorationProto._(4, _omitEnumNames ? '' : 'LINE_THROUGH');
+
+ static const $core.List values = [
+ TEXT_DECORATION_UNSPECIFIED,
+ TEXT_DECORATION_NONE,
+ UNDERLINE,
+ OVERLINE,
+ LINE_THROUGH,
+ ];
+
+ static final $core.List _byValue =
+ $pb.ProtobufEnum.$_initByValueList(values, 4);
+ static TextDecorationProto? valueOf($core.int value) =>
+ value < 0 || value >= _byValue.length ? null : _byValue[value];
+
+ const TextDecorationProto._(super.v, super.n);
+}
+
+class FontStyleProto extends $pb.ProtobufEnum {
+ static const FontStyleProto FONT_STYLE_UNSPECIFIED =
+ FontStyleProto._(0, _omitEnumNames ? '' : 'FONT_STYLE_UNSPECIFIED');
+ static const FontStyleProto NORMAL =
+ FontStyleProto._(1, _omitEnumNames ? '' : 'NORMAL');
+ static const FontStyleProto ITALIC =
+ FontStyleProto._(2, _omitEnumNames ? '' : 'ITALIC');
+
+ static const $core.List values = [
+ FONT_STYLE_UNSPECIFIED,
+ NORMAL,
+ ITALIC,
+ ];
+
+ static final $core.List _byValue =
+ $pb.ProtobufEnum.$_initByValueList(values, 2);
+ static FontStyleProto? valueOf($core.int value) =>
+ value < 0 || value >= _byValue.length ? null : _byValue[value];
+
+ const FontStyleProto._(super.v, super.n);
+}
+
+/// New enum for Blend modes
+class BlendModeProto extends $pb.ProtobufEnum {
+ static const BlendModeProto BLEND_MODE_UNSPECIFIED =
+ BlendModeProto._(0, _omitEnumNames ? '' : 'BLEND_MODE_UNSPECIFIED');
+ static const BlendModeProto CLEAR =
+ BlendModeProto._(1, _omitEnumNames ? '' : 'CLEAR');
+ static const BlendModeProto SRC =
+ BlendModeProto._(2, _omitEnumNames ? '' : 'SRC');
+ static const BlendModeProto DST =
+ BlendModeProto._(3, _omitEnumNames ? '' : 'DST');
+ static const BlendModeProto SRC_OVER =
+ BlendModeProto._(4, _omitEnumNames ? '' : 'SRC_OVER');
+ static const BlendModeProto DST_OVER =
+ BlendModeProto._(5, _omitEnumNames ? '' : 'DST_OVER');
+ static const BlendModeProto SRC_IN =
+ BlendModeProto._(6, _omitEnumNames ? '' : 'SRC_IN');
+ static const BlendModeProto DST_IN =
+ BlendModeProto._(7, _omitEnumNames ? '' : 'DST_IN');
+ static const BlendModeProto SRC_OUT =
+ BlendModeProto._(8, _omitEnumNames ? '' : 'SRC_OUT');
+ static const BlendModeProto DST_OUT =
+ BlendModeProto._(9, _omitEnumNames ? '' : 'DST_OUT');
+ static const BlendModeProto SRC_ATOP =
+ BlendModeProto._(10, _omitEnumNames ? '' : 'SRC_ATOP');
+ static const BlendModeProto DST_ATOP =
+ BlendModeProto._(11, _omitEnumNames ? '' : 'DST_ATOP');
+ static const BlendModeProto XOR =
+ BlendModeProto._(12, _omitEnumNames ? '' : 'XOR');
+ static const BlendModeProto PLUS =
+ BlendModeProto._(13, _omitEnumNames ? '' : 'PLUS');
+ static const BlendModeProto MODULATE =
+ BlendModeProto._(14, _omitEnumNames ? '' : 'MODULATE');
+ static const BlendModeProto SCREEN =
+ BlendModeProto._(15, _omitEnumNames ? '' : 'SCREEN');
+ static const BlendModeProto OVERLAY =
+ BlendModeProto._(16, _omitEnumNames ? '' : 'OVERLAY');
+ static const BlendModeProto DARKEN =
+ BlendModeProto._(17, _omitEnumNames ? '' : 'DARKEN');
+ static const BlendModeProto LIGHTEN =
+ BlendModeProto._(18, _omitEnumNames ? '' : 'LIGHTEN');
+ static const BlendModeProto COLOR_DODGE =
+ BlendModeProto._(19, _omitEnumNames ? '' : 'COLOR_DODGE');
+ static const BlendModeProto COLOR_BURN =
+ BlendModeProto._(20, _omitEnumNames ? '' : 'COLOR_BURN');
+ static const BlendModeProto HARD_LIGHT =
+ BlendModeProto._(21, _omitEnumNames ? '' : 'HARD_LIGHT');
+ static const BlendModeProto SOFT_LIGHT =
+ BlendModeProto._(22, _omitEnumNames ? '' : 'SOFT_LIGHT');
+ static const BlendModeProto DIFFERENCE =
+ BlendModeProto._(23, _omitEnumNames ? '' : 'DIFFERENCE');
+ static const BlendModeProto EXCLUSION =
+ BlendModeProto._(24, _omitEnumNames ? '' : 'EXCLUSION');
+ static const BlendModeProto MULTIPLY =
+ BlendModeProto._(25, _omitEnumNames ? '' : 'MULTIPLY');
+ static const BlendModeProto HUE =
+ BlendModeProto._(26, _omitEnumNames ? '' : 'HUE');
+ static const BlendModeProto SATURATION =
+ BlendModeProto._(27, _omitEnumNames ? '' : 'SATURATION');
+ static const BlendModeProto COLOR =
+ BlendModeProto._(28, _omitEnumNames ? '' : 'COLOR');
+ static const BlendModeProto LUMINOSITY =
+ BlendModeProto._(29, _omitEnumNames ? '' : 'LUMINOSITY');
+
+ static const $core.List values = [
+ BLEND_MODE_UNSPECIFIED,
+ CLEAR,
+ SRC,
+ DST,
+ SRC_OVER,
+ DST_OVER,
+ SRC_IN,
+ DST_IN,
+ SRC_OUT,
+ DST_OUT,
+ SRC_ATOP,
+ DST_ATOP,
+ XOR,
+ PLUS,
+ MODULATE,
+ SCREEN,
+ OVERLAY,
+ DARKEN,
+ LIGHTEN,
+ COLOR_DODGE,
+ COLOR_BURN,
+ HARD_LIGHT,
+ SOFT_LIGHT,
+ DIFFERENCE,
+ EXCLUSION,
+ MULTIPLY,
+ HUE,
+ SATURATION,
+ COLOR,
+ LUMINOSITY,
+ ];
+
+ static final $core.List _byValue =
+ $pb.ProtobufEnum.$_initByValueList(values, 29);
+ static BlendModeProto? valueOf($core.int value) =>
+ value < 0 || value >= _byValue.length ? null : _byValue[value];
+
+ const BlendModeProto._(super.v, super.n);
+}
+
+/// New enum for FloatingActionButtonLocation
+class FloatingActionButtonLocationProto extends $pb.ProtobufEnum {
+ static const FloatingActionButtonLocationProto FAB_LOCATION_UNSPECIFIED =
+ FloatingActionButtonLocationProto._(
+ 0, _omitEnumNames ? '' : 'FAB_LOCATION_UNSPECIFIED');
+ static const FloatingActionButtonLocationProto FAB_START_TOP =
+ FloatingActionButtonLocationProto._(
+ 1, _omitEnumNames ? '' : 'FAB_START_TOP');
+ static const FloatingActionButtonLocationProto FAB_START =
+ FloatingActionButtonLocationProto._(2, _omitEnumNames ? '' : 'FAB_START');
+ static const FloatingActionButtonLocationProto FAB_START_FLOAT =
+ FloatingActionButtonLocationProto._(
+ 3, _omitEnumNames ? '' : 'FAB_START_FLOAT');
+ static const FloatingActionButtonLocationProto FAB_CENTER_TOP =
+ FloatingActionButtonLocationProto._(
+ 4, _omitEnumNames ? '' : 'FAB_CENTER_TOP');
+ static const FloatingActionButtonLocationProto FAB_CENTER =
+ FloatingActionButtonLocationProto._(
+ 5, _omitEnumNames ? '' : 'FAB_CENTER');
+ static const FloatingActionButtonLocationProto FAB_CENTER_FLOAT =
+ FloatingActionButtonLocationProto._(
+ 6, _omitEnumNames ? '' : 'FAB_CENTER_FLOAT');
+ static const FloatingActionButtonLocationProto FAB_END_TOP =
+ FloatingActionButtonLocationProto._(
+ 7, _omitEnumNames ? '' : 'FAB_END_TOP');
+ static const FloatingActionButtonLocationProto FAB_END =
+ FloatingActionButtonLocationProto._(8, _omitEnumNames ? '' : 'FAB_END');
+ static const FloatingActionButtonLocationProto FAB_END_FLOAT =
+ FloatingActionButtonLocationProto._(
+ 9, _omitEnumNames ? '' : 'FAB_END_FLOAT');
+ static const FloatingActionButtonLocationProto FAB_MINI_CENTER_TOP =
+ FloatingActionButtonLocationProto._(
+ 10, _omitEnumNames ? '' : 'FAB_MINI_CENTER_TOP');
+ static const FloatingActionButtonLocationProto FAB_MINI_CENTER_FLOAT =
+ FloatingActionButtonLocationProto._(
+ 11, _omitEnumNames ? '' : 'FAB_MINI_CENTER_FLOAT');
+ static const FloatingActionButtonLocationProto FAB_MINI_START_TOP =
+ FloatingActionButtonLocationProto._(
+ 12, _omitEnumNames ? '' : 'FAB_MINI_START_TOP');
+ static const FloatingActionButtonLocationProto FAB_MINI_START_FLOAT =
+ FloatingActionButtonLocationProto._(
+ 13, _omitEnumNames ? '' : 'FAB_MINI_START_FLOAT');
+ static const FloatingActionButtonLocationProto FAB_MINI_END_TOP =
+ FloatingActionButtonLocationProto._(
+ 14, _omitEnumNames ? '' : 'FAB_MINI_END_TOP');
+ static const FloatingActionButtonLocationProto FAB_MINI_END_FLOAT =
+ FloatingActionButtonLocationProto._(
+ 15, _omitEnumNames ? '' : 'FAB_MINI_END_FLOAT');
+
+ static const $core.List values =
+ [
+ FAB_LOCATION_UNSPECIFIED,
+ FAB_START_TOP,
+ FAB_START,
+ FAB_START_FLOAT,
+ FAB_CENTER_TOP,
+ FAB_CENTER,
+ FAB_CENTER_FLOAT,
+ FAB_END_TOP,
+ FAB_END,
+ FAB_END_FLOAT,
+ FAB_MINI_CENTER_TOP,
+ FAB_MINI_CENTER_FLOAT,
+ FAB_MINI_START_TOP,
+ FAB_MINI_START_FLOAT,
+ FAB_MINI_END_TOP,
+ FAB_MINI_END_FLOAT,
+ ];
+
+ static final $core.List _byValue =
+ $pb.ProtobufEnum.$_initByValueList(values, 15);
+ static FloatingActionButtonLocationProto? valueOf($core.int value) =>
+ value < 0 || value >= _byValue.length ? null : _byValue[value];
+
+ const FloatingActionButtonLocationProto._(super.v, super.n);
+}
+
+class GradientData_GradientType extends $pb.ProtobufEnum {
+ static const GradientData_GradientType GRADIENT_TYPE_UNSPECIFIED =
+ GradientData_GradientType._(
+ 0, _omitEnumNames ? '' : 'GRADIENT_TYPE_UNSPECIFIED');
+ static const GradientData_GradientType LINEAR =
+ GradientData_GradientType._(1, _omitEnumNames ? '' : 'LINEAR');
+ static const GradientData_GradientType RADIAL =
+ GradientData_GradientType._(2, _omitEnumNames ? '' : 'RADIAL');
+ static const GradientData_GradientType SWEEP =
+ GradientData_GradientType._(3, _omitEnumNames ? '' : 'SWEEP');
+
+ static const $core.List values =
+ [
+ GRADIENT_TYPE_UNSPECIFIED,
+ LINEAR,
+ RADIAL,
+ SWEEP,
+ ];
+
+ static final $core.List _byValue =
+ $pb.ProtobufEnum.$_initByValueList(values, 3);
+ static GradientData_GradientType? valueOf($core.int value) =>
+ value < 0 || value >= _byValue.length ? null : _byValue[value];
+
+ const GradientData_GradientType._(super.v, super.n);
+}
+
+/// Predefined alignments
+class AlignmentData_PredefinedAlignment extends $pb.ProtobufEnum {
+ static const AlignmentData_PredefinedAlignment
+ PREDEFINED_ALIGNMENT_UNSPECIFIED = AlignmentData_PredefinedAlignment._(
+ 0, _omitEnumNames ? '' : 'PREDEFINED_ALIGNMENT_UNSPECIFIED');
+ static const AlignmentData_PredefinedAlignment BOTTOM_CENTER =
+ AlignmentData_PredefinedAlignment._(
+ 1, _omitEnumNames ? '' : 'BOTTOM_CENTER');
+ static const AlignmentData_PredefinedAlignment BOTTOM_LEFT =
+ AlignmentData_PredefinedAlignment._(
+ 2, _omitEnumNames ? '' : 'BOTTOM_LEFT');
+ static const AlignmentData_PredefinedAlignment BOTTOM_RIGHT =
+ AlignmentData_PredefinedAlignment._(
+ 3, _omitEnumNames ? '' : 'BOTTOM_RIGHT');
+ static const AlignmentData_PredefinedAlignment CENTER_ALIGN =
+ AlignmentData_PredefinedAlignment._(
+ 4, _omitEnumNames ? '' : 'CENTER_ALIGN');
+ static const AlignmentData_PredefinedAlignment CENTER_LEFT =
+ AlignmentData_PredefinedAlignment._(
+ 5, _omitEnumNames ? '' : 'CENTER_LEFT');
+ static const AlignmentData_PredefinedAlignment CENTER_RIGHT =
+ AlignmentData_PredefinedAlignment._(
+ 6, _omitEnumNames ? '' : 'CENTER_RIGHT');
+ static const AlignmentData_PredefinedAlignment TOP_CENTER =
+ AlignmentData_PredefinedAlignment._(
+ 7, _omitEnumNames ? '' : 'TOP_CENTER');
+ static const AlignmentData_PredefinedAlignment TOP_LEFT =
+ AlignmentData_PredefinedAlignment._(8, _omitEnumNames ? '' : 'TOP_LEFT');
+ static const AlignmentData_PredefinedAlignment TOP_RIGHT =
+ AlignmentData_PredefinedAlignment._(9, _omitEnumNames ? '' : 'TOP_RIGHT');
+
+ static const $core.List values =
+ [
+ PREDEFINED_ALIGNMENT_UNSPECIFIED,
+ BOTTOM_CENTER,
+ BOTTOM_LEFT,
+ BOTTOM_RIGHT,
+ CENTER_ALIGN,
+ CENTER_LEFT,
+ CENTER_RIGHT,
+ TOP_CENTER,
+ TOP_LEFT,
+ TOP_RIGHT,
+ ];
+
+ static final $core.List _byValue =
+ $pb.ProtobufEnum.$_initByValueList(values, 9);
+ static AlignmentData_PredefinedAlignment? valueOf($core.int value) =>
+ value < 0 || value >= _byValue.length ? null : _byValue[value];
+
+ const AlignmentData_PredefinedAlignment._(super.v, super.n);
+}
+
+class TransformData_TransformType extends $pb.ProtobufEnum {
+ static const TransformData_TransformType TRANSFORM_TYPE_UNSPECIFIED =
+ TransformData_TransformType._(
+ 0, _omitEnumNames ? '' : 'TRANSFORM_TYPE_UNSPECIFIED');
+ static const TransformData_TransformType MATRIX_4X4 =
+ TransformData_TransformType._(1, _omitEnumNames ? '' : 'MATRIX_4X4');
+ static const TransformData_TransformType TRANSLATE =
+ TransformData_TransformType._(2, _omitEnumNames ? '' : 'TRANSLATE');
+ static const TransformData_TransformType ROTATE =
+ TransformData_TransformType._(3, _omitEnumNames ? '' : 'ROTATE');
+ static const TransformData_TransformType SCALE =
+ TransformData_TransformType._(4, _omitEnumNames ? '' : 'SCALE');
+
+ static const $core.List values =
+ [
+ TRANSFORM_TYPE_UNSPECIFIED,
+ MATRIX_4X4,
+ TRANSLATE,
+ ROTATE,
+ SCALE,
+ ];
+
+ static final $core.List _byValue =
+ $pb.ProtobufEnum.$_initByValueList(values, 4);
+ static TransformData_TransformType? valueOf($core.int value) =>
+ value < 0 || value >= _byValue.length ? null : _byValue[value];
+
+ const TransformData_TransformType._(super.v, super.n);
+}
+
+const _omitEnumNames = $core.bool.fromEnvironment('protobuf.omit_enum_names');
diff --git a/lib/src/generated/sdui.pbgrpc.dart b/lib/src/generated/sdui.pbgrpc.dart
new file mode 100644
index 0000000..57a2a75
--- /dev/null
+++ b/lib/src/generated/sdui.pbgrpc.dart
@@ -0,0 +1,68 @@
+//
+// Generated code. Do not modify.
+// source: sdui.proto
+//
+// @dart = 3.3
+
+// ignore_for_file: annotate_overrides, camel_case_types, comment_references
+// ignore_for_file: constant_identifier_names, library_prefixes
+// ignore_for_file: non_constant_identifier_names, prefer_final_fields
+// ignore_for_file: unnecessary_import, unnecessary_this, unused_import
+
+import 'dart:async' as $async;
+import 'dart:core' as $core;
+
+import 'package:grpc/service_api.dart' as $grpc;
+import 'package:protobuf/protobuf.dart' as $pb;
+
+import 'sdui.pb.dart' as $0;
+
+export 'sdui.pb.dart';
+
+/// Service definition
+@$pb.GrpcServiceName('flutter_sdui.SduiService')
+class SduiServiceClient extends $grpc.Client {
+ /// The hostname for this service.
+ static const $core.String defaultHost = '';
+
+ /// OAuth scopes needed for the client.
+ static const $core.List<$core.String> oauthScopes = [
+ '',
+ ];
+
+ static final _$getSduiWidget =
+ $grpc.ClientMethod<$0.SduiRequest, $0.SduiWidgetData>(
+ '/flutter_sdui.SduiService/GetSduiWidget',
+ ($0.SduiRequest value) => value.writeToBuffer(),
+ ($core.List<$core.int> value) => $0.SduiWidgetData.fromBuffer(value));
+
+ SduiServiceClient(super.channel, {super.options, super.interceptors});
+
+ $grpc.ResponseFuture<$0.SduiWidgetData> getSduiWidget($0.SduiRequest request,
+ {$grpc.CallOptions? options}) {
+ return $createUnaryCall(_$getSduiWidget, request, options: options);
+ }
+}
+
+@$pb.GrpcServiceName('flutter_sdui.SduiService')
+abstract class SduiServiceBase extends $grpc.Service {
+ $core.String get $name => 'flutter_sdui.SduiService';
+
+ SduiServiceBase() {
+ $addMethod($grpc.ServiceMethod<$0.SduiRequest, $0.SduiWidgetData>(
+ 'GetSduiWidget',
+ getSduiWidget_Pre,
+ false,
+ false,
+ ($core.List<$core.int> value) => $0.SduiRequest.fromBuffer(value),
+ ($0.SduiWidgetData value) => value.writeToBuffer()));
+ }
+
+ $async.Future<$0.SduiWidgetData> getSduiWidget_Pre(
+ $grpc.ServiceCall $call, $async.Future<$0.SduiRequest> $request) async {
+ return getSduiWidget($call, await $request);
+ }
+
+ $async.Future<$0.SduiWidgetData> getSduiWidget(
+ $grpc.ServiceCall call, $0.SduiRequest request);
+}
diff --git a/lib/src/generated/sdui.pbjson.dart b/lib/src/generated/sdui.pbjson.dart
new file mode 100644
index 0000000..14b1ae9
--- /dev/null
+++ b/lib/src/generated/sdui.pbjson.dart
@@ -0,0 +1,2011 @@
+//
+// Generated code. Do not modify.
+// source: sdui.proto
+//
+// @dart = 3.3
+
+// ignore_for_file: annotate_overrides, camel_case_types, comment_references
+// ignore_for_file: constant_identifier_names, library_prefixes
+// ignore_for_file: non_constant_identifier_names, prefer_final_fields
+// ignore_for_file: unnecessary_import, unnecessary_this, unused_import
+
+import 'dart:convert' as $convert;
+import 'dart:core' as $core;
+import 'dart:typed_data' as $typed_data;
+
+@$core.Deprecated('Use widgetTypeDescriptor instead')
+const WidgetType$json = {
+ '1': 'WidgetType',
+ '2': [
+ {'1': 'WIDGET_TYPE_UNSPECIFIED', '2': 0},
+ {'1': 'COLUMN', '2': 1},
+ {'1': 'ROW', '2': 2},
+ {'1': 'TEXT', '2': 3},
+ {'1': 'IMAGE', '2': 4},
+ {'1': 'SIZED_BOX', '2': 5},
+ {'1': 'CONTAINER', '2': 6},
+ {'1': 'SCAFFOLD', '2': 7},
+ {'1': 'SPACER', '2': 8},
+ {'1': 'ICON', '2': 9},
+ ],
+};
+
+/// Descriptor for `WidgetType`. Decode as a `google.protobuf.EnumDescriptorProto`.
+final $typed_data.Uint8List widgetTypeDescriptor = $convert.base64Decode(
+ 'CgpXaWRnZXRUeXBlEhsKF1dJREdFVF9UWVBFX1VOU1BFQ0lGSUVEEAASCgoGQ09MVU1OEAESBw'
+ 'oDUk9XEAISCAoEVEVYVBADEgkKBUlNQUdFEAQSDQoJU0laRURfQk9YEAUSDQoJQ09OVEFJTkVS'
+ 'EAYSDAoIU0NBRkZPTEQQBxIKCgZTUEFDRVIQCBIICgRJQ09OEAk=');
+
+@$core.Deprecated('Use boxFitProtoDescriptor instead')
+const BoxFitProto$json = {
+ '1': 'BoxFitProto',
+ '2': [
+ {'1': 'BOX_FIT_UNSPECIFIED', '2': 0},
+ {'1': 'FILL', '2': 1},
+ {'1': 'CONTAIN', '2': 2},
+ {'1': 'COVER', '2': 3},
+ {'1': 'FIT_WIDTH', '2': 4},
+ {'1': 'FIT_HEIGHT', '2': 5},
+ {'1': 'NONE_BOX_FIT', '2': 6},
+ {'1': 'SCALE_DOWN', '2': 7},
+ ],
+};
+
+/// Descriptor for `BoxFitProto`. Decode as a `google.protobuf.EnumDescriptorProto`.
+final $typed_data.Uint8List boxFitProtoDescriptor = $convert.base64Decode(
+ 'CgtCb3hGaXRQcm90bxIXChNCT1hfRklUX1VOU1BFQ0lGSUVEEAASCAoERklMTBABEgsKB0NPTl'
+ 'RBSU4QAhIJCgVDT1ZFUhADEg0KCUZJVF9XSURUSBAEEg4KCkZJVF9IRUlHSFQQBRIQCgxOT05F'
+ 'X0JPWF9GSVQQBhIOCgpTQ0FMRV9ET1dOEAc=');
+
+@$core.Deprecated('Use borderStyleProtoDescriptor instead')
+const BorderStyleProto$json = {
+ '1': 'BorderStyleProto',
+ '2': [
+ {'1': 'BORDER_STYLE_UNSPECIFIED', '2': 0},
+ {'1': 'SOLID', '2': 1},
+ {'1': 'NONE_BORDER', '2': 2},
+ ],
+};
+
+/// Descriptor for `BorderStyleProto`. Decode as a `google.protobuf.EnumDescriptorProto`.
+final $typed_data.Uint8List borderStyleProtoDescriptor = $convert.base64Decode(
+ 'ChBCb3JkZXJTdHlsZVByb3RvEhwKGEJPUkRFUl9TVFlMRV9VTlNQRUNJRklFRBAAEgkKBVNPTE'
+ 'lEEAESDwoLTk9ORV9CT1JERVIQAg==');
+
+@$core.Deprecated('Use boxShapeProtoDescriptor instead')
+const BoxShapeProto$json = {
+ '1': 'BoxShapeProto',
+ '2': [
+ {'1': 'BOX_SHAPE_UNSPECIFIED', '2': 0},
+ {'1': 'RECTANGLE', '2': 1},
+ {'1': 'CIRCLE', '2': 2},
+ ],
+};
+
+/// Descriptor for `BoxShapeProto`. Decode as a `google.protobuf.EnumDescriptorProto`.
+final $typed_data.Uint8List boxShapeProtoDescriptor = $convert.base64Decode(
+ 'Cg1Cb3hTaGFwZVByb3RvEhkKFUJPWF9TSEFQRV9VTlNQRUNJRklFRBAAEg0KCVJFQ1RBTkdMRR'
+ 'ABEgoKBkNJUkNMRRAC');
+
+@$core.Deprecated('Use imageRepeatProtoDescriptor instead')
+const ImageRepeatProto$json = {
+ '1': 'ImageRepeatProto',
+ '2': [
+ {'1': 'IMAGE_REPEAT_UNSPECIFIED', '2': 0},
+ {'1': 'REPEAT', '2': 1},
+ {'1': 'REPEAT_X', '2': 2},
+ {'1': 'REPEAT_Y', '2': 3},
+ {'1': 'NO_REPEAT', '2': 4},
+ ],
+};
+
+/// Descriptor for `ImageRepeatProto`. Decode as a `google.protobuf.EnumDescriptorProto`.
+final $typed_data.Uint8List imageRepeatProtoDescriptor = $convert.base64Decode(
+ 'ChBJbWFnZVJlcGVhdFByb3RvEhwKGElNQUdFX1JFUEVBVF9VTlNQRUNJRklFRBAAEgoKBlJFUE'
+ 'VBVBABEgwKCFJFUEVBVF9YEAISDAoIUkVQRUFUX1kQAxINCglOT19SRVBFQVQQBA==');
+
+@$core.Deprecated('Use filterQualityProtoDescriptor instead')
+const FilterQualityProto$json = {
+ '1': 'FilterQualityProto',
+ '2': [
+ {'1': 'FILTER_QUALITY_UNSPECIFIED', '2': 0},
+ {'1': 'NONE_FQ', '2': 1},
+ {'1': 'LOW', '2': 2},
+ {'1': 'MEDIUM', '2': 3},
+ {'1': 'HIGH', '2': 4},
+ ],
+};
+
+/// Descriptor for `FilterQualityProto`. Decode as a `google.protobuf.EnumDescriptorProto`.
+final $typed_data.Uint8List filterQualityProtoDescriptor = $convert.base64Decode(
+ 'ChJGaWx0ZXJRdWFsaXR5UHJvdG8SHgoaRklMVEVSX1FVQUxJVFlfVU5TUEVDSUZJRUQQABILCg'
+ 'dOT05FX0ZREAESBwoDTE9XEAISCgoGTUVESVVNEAMSCAoESElHSBAE');
+
+@$core.Deprecated('Use mainAxisAlignmentProtoDescriptor instead')
+const MainAxisAlignmentProto$json = {
+ '1': 'MainAxisAlignmentProto',
+ '2': [
+ {'1': 'MAIN_AXIS_ALIGNMENT_UNSPECIFIED', '2': 0},
+ {'1': 'MAIN_AXIS_START', '2': 1},
+ {'1': 'MAIN_AXIS_END', '2': 2},
+ {'1': 'MAIN_AXIS_CENTER', '2': 3},
+ {'1': 'SPACE_BETWEEN', '2': 4},
+ {'1': 'SPACE_AROUND', '2': 5},
+ {'1': 'SPACE_EVENLY', '2': 6},
+ ],
+};
+
+/// Descriptor for `MainAxisAlignmentProto`. Decode as a `google.protobuf.EnumDescriptorProto`.
+final $typed_data.Uint8List mainAxisAlignmentProtoDescriptor = $convert.base64Decode(
+ 'ChZNYWluQXhpc0FsaWdubWVudFByb3RvEiMKH01BSU5fQVhJU19BTElHTk1FTlRfVU5TUEVDSU'
+ 'ZJRUQQABITCg9NQUlOX0FYSVNfU1RBUlQQARIRCg1NQUlOX0FYSVNfRU5EEAISFAoQTUFJTl9B'
+ 'WElTX0NFTlRFUhADEhEKDVNQQUNFX0JFVFdFRU4QBBIQCgxTUEFDRV9BUk9VTkQQBRIQCgxTUE'
+ 'FDRV9FVkVOTFkQBg==');
+
+@$core.Deprecated('Use crossAxisAlignmentProtoDescriptor instead')
+const CrossAxisAlignmentProto$json = {
+ '1': 'CrossAxisAlignmentProto',
+ '2': [
+ {'1': 'CROSS_AXIS_ALIGNMENT_UNSPECIFIED', '2': 0},
+ {'1': 'CROSS_AXIS_START', '2': 1},
+ {'1': 'CROSS_AXIS_END', '2': 2},
+ {'1': 'CROSS_AXIS_CENTER', '2': 3},
+ {'1': 'STRETCH', '2': 4},
+ {'1': 'BASELINE', '2': 5},
+ ],
+};
+
+/// Descriptor for `CrossAxisAlignmentProto`. Decode as a `google.protobuf.EnumDescriptorProto`.
+final $typed_data.Uint8List crossAxisAlignmentProtoDescriptor = $convert.base64Decode(
+ 'ChdDcm9zc0F4aXNBbGlnbm1lbnRQcm90bxIkCiBDUk9TU19BWElTX0FMSUdOTUVOVF9VTlNQRU'
+ 'NJRklFRBAAEhQKEENST1NTX0FYSVNfU1RBUlQQARISCg5DUk9TU19BWElTX0VORBACEhUKEUNS'
+ 'T1NTX0FYSVNfQ0VOVEVSEAMSCwoHU1RSRVRDSBAEEgwKCEJBU0VMSU5FEAU=');
+
+@$core.Deprecated('Use mainAxisSizeProtoDescriptor instead')
+const MainAxisSizeProto$json = {
+ '1': 'MainAxisSizeProto',
+ '2': [
+ {'1': 'MAIN_AXIS_SIZE_UNSPECIFIED', '2': 0},
+ {'1': 'MIN', '2': 1},
+ {'1': 'MAX', '2': 2},
+ ],
+};
+
+/// Descriptor for `MainAxisSizeProto`. Decode as a `google.protobuf.EnumDescriptorProto`.
+final $typed_data.Uint8List mainAxisSizeProtoDescriptor = $convert.base64Decode(
+ 'ChFNYWluQXhpc1NpemVQcm90bxIeChpNQUlOX0FYSVNfU0laRV9VTlNQRUNJRklFRBAAEgcKA0'
+ '1JThABEgcKA01BWBAC');
+
+@$core.Deprecated('Use textDirectionProtoDescriptor instead')
+const TextDirectionProto$json = {
+ '1': 'TextDirectionProto',
+ '2': [
+ {'1': 'TEXT_DIRECTION_UNSPECIFIED', '2': 0},
+ {'1': 'LTR', '2': 1},
+ {'1': 'RTL', '2': 2},
+ ],
+};
+
+/// Descriptor for `TextDirectionProto`. Decode as a `google.protobuf.EnumDescriptorProto`.
+final $typed_data.Uint8List textDirectionProtoDescriptor = $convert.base64Decode(
+ 'ChJUZXh0RGlyZWN0aW9uUHJvdG8SHgoaVEVYVF9ESVJFQ1RJT05fVU5TUEVDSUZJRUQQABIHCg'
+ 'NMVFIQARIHCgNSVEwQAg==');
+
+@$core.Deprecated('Use verticalDirectionProtoDescriptor instead')
+const VerticalDirectionProto$json = {
+ '1': 'VerticalDirectionProto',
+ '2': [
+ {'1': 'VERTICAL_DIRECTION_UNSPECIFIED', '2': 0},
+ {'1': 'UP', '2': 1},
+ {'1': 'DOWN', '2': 2},
+ ],
+};
+
+/// Descriptor for `VerticalDirectionProto`. Decode as a `google.protobuf.EnumDescriptorProto`.
+final $typed_data.Uint8List verticalDirectionProtoDescriptor =
+ $convert.base64Decode(
+ 'ChZWZXJ0aWNhbERpcmVjdGlvblByb3RvEiIKHlZFUlRJQ0FMX0RJUkVDVElPTl9VTlNQRUNJRk'
+ 'lFRBAAEgYKAlVQEAESCAoERE9XThAC');
+
+@$core.Deprecated('Use textBaselineProtoDescriptor instead')
+const TextBaselineProto$json = {
+ '1': 'TextBaselineProto',
+ '2': [
+ {'1': 'TEXT_BASELINE_UNSPECIFIED', '2': 0},
+ {'1': 'ALPHABETIC', '2': 1},
+ {'1': 'IDEOGRAPHIC', '2': 2},
+ ],
+};
+
+/// Descriptor for `TextBaselineProto`. Decode as a `google.protobuf.EnumDescriptorProto`.
+final $typed_data.Uint8List textBaselineProtoDescriptor = $convert.base64Decode(
+ 'ChFUZXh0QmFzZWxpbmVQcm90bxIdChlURVhUX0JBU0VMSU5FX1VOU1BFQ0lGSUVEEAASDgoKQU'
+ 'xQSEFCRVRJQxABEg8KC0lERU9HUkFQSElDEAI=');
+
+@$core.Deprecated('Use clipProtoDescriptor instead')
+const ClipProto$json = {
+ '1': 'ClipProto',
+ '2': [
+ {'1': 'CLIP_UNSPECIFIED', '2': 0},
+ {'1': 'CLIP_NONE', '2': 1},
+ {'1': 'HARD_EDGE', '2': 2},
+ {'1': 'ANTI_ALIAS', '2': 3},
+ {'1': 'ANTI_ALIAS_WITH_SAVE_LAYER', '2': 4},
+ ],
+};
+
+/// Descriptor for `ClipProto`. Decode as a `google.protobuf.EnumDescriptorProto`.
+final $typed_data.Uint8List clipProtoDescriptor = $convert.base64Decode(
+ 'CglDbGlwUHJvdG8SFAoQQ0xJUF9VTlNQRUNJRklFRBAAEg0KCUNMSVBfTk9ORRABEg0KCUhBUk'
+ 'RfRURHRRACEg4KCkFOVElfQUxJQVMQAxIeChpBTlRJX0FMSUFTX1dJVEhfU0FWRV9MQVlFUhAE');
+
+@$core.Deprecated('Use textAlignProtoDescriptor instead')
+const TextAlignProto$json = {
+ '1': 'TextAlignProto',
+ '2': [
+ {'1': 'TEXT_ALIGN_UNSPECIFIED', '2': 0},
+ {'1': 'LEFT', '2': 1},
+ {'1': 'RIGHT', '2': 2},
+ {'1': 'TEXT_ALIGN_CENTER', '2': 3},
+ {'1': 'JUSTIFY', '2': 4},
+ {'1': 'TEXT_ALIGN_START', '2': 5},
+ {'1': 'TEXT_ALIGN_END', '2': 6},
+ ],
+};
+
+/// Descriptor for `TextAlignProto`. Decode as a `google.protobuf.EnumDescriptorProto`.
+final $typed_data.Uint8List textAlignProtoDescriptor = $convert.base64Decode(
+ 'Cg5UZXh0QWxpZ25Qcm90bxIaChZURVhUX0FMSUdOX1VOU1BFQ0lGSUVEEAASCAoETEVGVBABEg'
+ 'kKBVJJR0hUEAISFQoRVEVYVF9BTElHTl9DRU5URVIQAxILCgdKVVNUSUZZEAQSFAoQVEVYVF9B'
+ 'TElHTl9TVEFSVBAFEhIKDlRFWFRfQUxJR05fRU5EEAY=');
+
+@$core.Deprecated('Use textOverflowProtoDescriptor instead')
+const TextOverflowProto$json = {
+ '1': 'TextOverflowProto',
+ '2': [
+ {'1': 'TEXT_OVERFLOW_UNSPECIFIED', '2': 0},
+ {'1': 'CLIP', '2': 1},
+ {'1': 'ELLIPSIS', '2': 2},
+ {'1': 'FADE', '2': 3},
+ {'1': 'VISIBLE', '2': 4},
+ ],
+};
+
+/// Descriptor for `TextOverflowProto`. Decode as a `google.protobuf.EnumDescriptorProto`.
+final $typed_data.Uint8List textOverflowProtoDescriptor = $convert.base64Decode(
+ 'ChFUZXh0T3ZlcmZsb3dQcm90bxIdChlURVhUX09WRVJGTE9XX1VOU1BFQ0lGSUVEEAASCAoEQ0'
+ 'xJUBABEgwKCEVMTElQU0lTEAISCAoERkFERRADEgsKB1ZJU0lCTEUQBA==');
+
+@$core.Deprecated('Use textDecorationProtoDescriptor instead')
+const TextDecorationProto$json = {
+ '1': 'TextDecorationProto',
+ '2': [
+ {'1': 'TEXT_DECORATION_UNSPECIFIED', '2': 0},
+ {'1': 'TEXT_DECORATION_NONE', '2': 1},
+ {'1': 'UNDERLINE', '2': 2},
+ {'1': 'OVERLINE', '2': 3},
+ {'1': 'LINE_THROUGH', '2': 4},
+ ],
+};
+
+/// Descriptor for `TextDecorationProto`. Decode as a `google.protobuf.EnumDescriptorProto`.
+final $typed_data.Uint8List textDecorationProtoDescriptor = $convert.base64Decode(
+ 'ChNUZXh0RGVjb3JhdGlvblByb3RvEh8KG1RFWFRfREVDT1JBVElPTl9VTlNQRUNJRklFRBAAEh'
+ 'gKFFRFWFRfREVDT1JBVElPTl9OT05FEAESDQoJVU5ERVJMSU5FEAISDAoIT1ZFUkxJTkUQAxIQ'
+ 'CgxMSU5FX1RIUk9VR0gQBA==');
+
+@$core.Deprecated('Use fontStyleProtoDescriptor instead')
+const FontStyleProto$json = {
+ '1': 'FontStyleProto',
+ '2': [
+ {'1': 'FONT_STYLE_UNSPECIFIED', '2': 0},
+ {'1': 'NORMAL', '2': 1},
+ {'1': 'ITALIC', '2': 2},
+ ],
+};
+
+/// Descriptor for `FontStyleProto`. Decode as a `google.protobuf.EnumDescriptorProto`.
+final $typed_data.Uint8List fontStyleProtoDescriptor = $convert.base64Decode(
+ 'Cg5Gb250U3R5bGVQcm90bxIaChZGT05UX1NUWUxFX1VOU1BFQ0lGSUVEEAASCgoGTk9STUFMEA'
+ 'ESCgoGSVRBTElDEAI=');
+
+@$core.Deprecated('Use blendModeProtoDescriptor instead')
+const BlendModeProto$json = {
+ '1': 'BlendModeProto',
+ '2': [
+ {'1': 'BLEND_MODE_UNSPECIFIED', '2': 0},
+ {'1': 'CLEAR', '2': 1},
+ {'1': 'SRC', '2': 2},
+ {'1': 'DST', '2': 3},
+ {'1': 'SRC_OVER', '2': 4},
+ {'1': 'DST_OVER', '2': 5},
+ {'1': 'SRC_IN', '2': 6},
+ {'1': 'DST_IN', '2': 7},
+ {'1': 'SRC_OUT', '2': 8},
+ {'1': 'DST_OUT', '2': 9},
+ {'1': 'SRC_ATOP', '2': 10},
+ {'1': 'DST_ATOP', '2': 11},
+ {'1': 'XOR', '2': 12},
+ {'1': 'PLUS', '2': 13},
+ {'1': 'MODULATE', '2': 14},
+ {'1': 'SCREEN', '2': 15},
+ {'1': 'OVERLAY', '2': 16},
+ {'1': 'DARKEN', '2': 17},
+ {'1': 'LIGHTEN', '2': 18},
+ {'1': 'COLOR_DODGE', '2': 19},
+ {'1': 'COLOR_BURN', '2': 20},
+ {'1': 'HARD_LIGHT', '2': 21},
+ {'1': 'SOFT_LIGHT', '2': 22},
+ {'1': 'DIFFERENCE', '2': 23},
+ {'1': 'EXCLUSION', '2': 24},
+ {'1': 'MULTIPLY', '2': 25},
+ {'1': 'HUE', '2': 26},
+ {'1': 'SATURATION', '2': 27},
+ {'1': 'COLOR', '2': 28},
+ {'1': 'LUMINOSITY', '2': 29},
+ ],
+};
+
+/// Descriptor for `BlendModeProto`. Decode as a `google.protobuf.EnumDescriptorProto`.
+final $typed_data.Uint8List blendModeProtoDescriptor = $convert.base64Decode(
+ 'Cg5CbGVuZE1vZGVQcm90bxIaChZCTEVORF9NT0RFX1VOU1BFQ0lGSUVEEAASCQoFQ0xFQVIQAR'
+ 'IHCgNTUkMQAhIHCgNEU1QQAxIMCghTUkNfT1ZFUhAEEgwKCERTVF9PVkVSEAUSCgoGU1JDX0lO'
+ 'EAYSCgoGRFNUX0lOEAcSCwoHU1JDX09VVBAIEgsKB0RTVF9PVVQQCRIMCghTUkNfQVRPUBAKEg'
+ 'wKCERTVF9BVE9QEAsSBwoDWE9SEAwSCAoEUExVUxANEgwKCE1PRFVMQVRFEA4SCgoGU0NSRUVO'
+ 'EA8SCwoHT1ZFUkxBWRAQEgoKBkRBUktFThAREgsKB0xJR0hURU4QEhIPCgtDT0xPUl9ET0RHRR'
+ 'ATEg4KCkNPTE9SX0JVUk4QFBIOCgpIQVJEX0xJR0hUEBUSDgoKU09GVF9MSUdIVBAWEg4KCkRJ'
+ 'RkZFUkVOQ0UQFxINCglFWENMVVNJT04QGBIMCghNVUxUSVBMWRAZEgcKA0hVRRAaEg4KClNBVF'
+ 'VSQVRJT04QGxIJCgVDT0xPUhAcEg4KCkxVTUlOT1NJVFkQHQ==');
+
+@$core.Deprecated('Use floatingActionButtonLocationProtoDescriptor instead')
+const FloatingActionButtonLocationProto$json = {
+ '1': 'FloatingActionButtonLocationProto',
+ '2': [
+ {'1': 'FAB_LOCATION_UNSPECIFIED', '2': 0},
+ {'1': 'FAB_START_TOP', '2': 1},
+ {'1': 'FAB_START', '2': 2},
+ {'1': 'FAB_START_FLOAT', '2': 3},
+ {'1': 'FAB_CENTER_TOP', '2': 4},
+ {'1': 'FAB_CENTER', '2': 5},
+ {'1': 'FAB_CENTER_FLOAT', '2': 6},
+ {'1': 'FAB_END_TOP', '2': 7},
+ {'1': 'FAB_END', '2': 8},
+ {'1': 'FAB_END_FLOAT', '2': 9},
+ {'1': 'FAB_MINI_CENTER_TOP', '2': 10},
+ {'1': 'FAB_MINI_CENTER_FLOAT', '2': 11},
+ {'1': 'FAB_MINI_START_TOP', '2': 12},
+ {'1': 'FAB_MINI_START_FLOAT', '2': 13},
+ {'1': 'FAB_MINI_END_TOP', '2': 14},
+ {'1': 'FAB_MINI_END_FLOAT', '2': 15},
+ ],
+};
+
+/// Descriptor for `FloatingActionButtonLocationProto`. Decode as a `google.protobuf.EnumDescriptorProto`.
+final $typed_data.Uint8List floatingActionButtonLocationProtoDescriptor = $convert.base64Decode(
+ 'CiFGbG9hdGluZ0FjdGlvbkJ1dHRvbkxvY2F0aW9uUHJvdG8SHAoYRkFCX0xPQ0FUSU9OX1VOU1'
+ 'BFQ0lGSUVEEAASEQoNRkFCX1NUQVJUX1RPUBABEg0KCUZBQl9TVEFSVBACEhMKD0ZBQl9TVEFS'
+ 'VF9GTE9BVBADEhIKDkZBQl9DRU5URVJfVE9QEAQSDgoKRkFCX0NFTlRFUhAFEhQKEEZBQl9DRU'
+ '5URVJfRkxPQVQQBhIPCgtGQUJfRU5EX1RPUBAHEgsKB0ZBQl9FTkQQCBIRCg1GQUJfRU5EX0ZM'
+ 'T0FUEAkSFwoTRkFCX01JTklfQ0VOVEVSX1RPUBAKEhkKFUZBQl9NSU5JX0NFTlRFUl9GTE9BVB'
+ 'ALEhYKEkZBQl9NSU5JX1NUQVJUX1RPUBAMEhgKFEZBQl9NSU5JX1NUQVJUX0ZMT0FUEA0SFAoQ'
+ 'RkFCX01JTklfRU5EX1RPUBAOEhYKEkZBQl9NSU5JX0VORF9GTE9BVBAP');
+
+@$core.Deprecated('Use sduiWidgetDataDescriptor instead')
+const SduiWidgetData$json = {
+ '1': 'SduiWidgetData',
+ '2': [
+ {
+ '1': 'type',
+ '3': 1,
+ '4': 1,
+ '5': 14,
+ '6': '.flutter_sdui.WidgetType',
+ '10': 'type'
+ },
+ {
+ '1': 'string_attributes',
+ '3': 2,
+ '4': 3,
+ '5': 11,
+ '6': '.flutter_sdui.SduiWidgetData.StringAttributesEntry',
+ '10': 'stringAttributes'
+ },
+ {
+ '1': 'double_attributes',
+ '3': 3,
+ '4': 3,
+ '5': 11,
+ '6': '.flutter_sdui.SduiWidgetData.DoubleAttributesEntry',
+ '10': 'doubleAttributes'
+ },
+ {
+ '1': 'bool_attributes',
+ '3': 4,
+ '4': 3,
+ '5': 11,
+ '6': '.flutter_sdui.SduiWidgetData.BoolAttributesEntry',
+ '10': 'boolAttributes'
+ },
+ {
+ '1': 'int_attributes',
+ '3': 5,
+ '4': 3,
+ '5': 11,
+ '6': '.flutter_sdui.SduiWidgetData.IntAttributesEntry',
+ '10': 'intAttributes'
+ },
+ {
+ '1': 'text_style',
+ '3': 6,
+ '4': 1,
+ '5': 11,
+ '6': '.flutter_sdui.TextStyleData',
+ '10': 'textStyle'
+ },
+ {
+ '1': 'padding',
+ '3': 7,
+ '4': 1,
+ '5': 11,
+ '6': '.flutter_sdui.EdgeInsetsData',
+ '10': 'padding'
+ },
+ {
+ '1': 'margin',
+ '3': 8,
+ '4': 1,
+ '5': 11,
+ '6': '.flutter_sdui.EdgeInsetsData',
+ '10': 'margin'
+ },
+ {
+ '1': 'color',
+ '3': 9,
+ '4': 1,
+ '5': 11,
+ '6': '.flutter_sdui.ColorData',
+ '10': 'color'
+ },
+ {
+ '1': 'icon',
+ '3': 10,
+ '4': 1,
+ '5': 11,
+ '6': '.flutter_sdui.IconDataMessage',
+ '10': 'icon'
+ },
+ {
+ '1': 'box_decoration',
+ '3': 11,
+ '4': 1,
+ '5': 11,
+ '6': '.flutter_sdui.BoxDecorationData',
+ '10': 'boxDecoration'
+ },
+ {
+ '1': 'children',
+ '3': 12,
+ '4': 3,
+ '5': 11,
+ '6': '.flutter_sdui.SduiWidgetData',
+ '10': 'children'
+ },
+ {
+ '1': 'child',
+ '3': 13,
+ '4': 1,
+ '5': 11,
+ '6': '.flutter_sdui.SduiWidgetData',
+ '10': 'child'
+ },
+ {
+ '1': 'app_bar',
+ '3': 14,
+ '4': 1,
+ '5': 11,
+ '6': '.flutter_sdui.SduiWidgetData',
+ '10': 'appBar'
+ },
+ {
+ '1': 'body',
+ '3': 15,
+ '4': 1,
+ '5': 11,
+ '6': '.flutter_sdui.SduiWidgetData',
+ '10': 'body'
+ },
+ {
+ '1': 'floating_action_button',
+ '3': 16,
+ '4': 1,
+ '5': 11,
+ '6': '.flutter_sdui.SduiWidgetData',
+ '10': 'floatingActionButton'
+ },
+ {
+ '1': 'background_color',
+ '3': 17,
+ '4': 1,
+ '5': 11,
+ '6': '.flutter_sdui.ColorData',
+ '10': 'backgroundColor'
+ },
+ {
+ '1': 'bottom_navigation_bar',
+ '3': 18,
+ '4': 1,
+ '5': 11,
+ '6': '.flutter_sdui.SduiWidgetData',
+ '10': 'bottomNavigationBar'
+ },
+ {
+ '1': 'drawer',
+ '3': 19,
+ '4': 1,
+ '5': 11,
+ '6': '.flutter_sdui.SduiWidgetData',
+ '10': 'drawer'
+ },
+ {
+ '1': 'end_drawer',
+ '3': 20,
+ '4': 1,
+ '5': 11,
+ '6': '.flutter_sdui.SduiWidgetData',
+ '10': 'endDrawer'
+ },
+ {
+ '1': 'bottom_sheet',
+ '3': 21,
+ '4': 1,
+ '5': 11,
+ '6': '.flutter_sdui.SduiWidgetData',
+ '10': 'bottomSheet'
+ },
+ {
+ '1': 'resize_to_avoid_bottom_inset',
+ '3': 22,
+ '4': 1,
+ '5': 8,
+ '10': 'resizeToAvoidBottomInset'
+ },
+ {'1': 'primary', '3': 23, '4': 1, '5': 8, '10': 'primary'},
+ {
+ '1': 'floating_action_button_location',
+ '3': 24,
+ '4': 1,
+ '5': 14,
+ '6': '.flutter_sdui.FloatingActionButtonLocationProto',
+ '10': 'floatingActionButtonLocation'
+ },
+ {'1': 'extend_body', '3': 25, '4': 1, '5': 8, '10': 'extendBody'},
+ {
+ '1': 'extend_body_behind_app_bar',
+ '3': 26,
+ '4': 1,
+ '5': 8,
+ '10': 'extendBodyBehindAppBar'
+ },
+ {
+ '1': 'drawer_scrim_color',
+ '3': 27,
+ '4': 1,
+ '5': 11,
+ '6': '.flutter_sdui.ColorData',
+ '10': 'drawerScrimColor'
+ },
+ {
+ '1': 'drawer_edge_drag_width',
+ '3': 28,
+ '4': 1,
+ '5': 1,
+ '10': 'drawerEdgeDragWidth'
+ },
+ {
+ '1': 'drawer_enable_open_drag_gesture',
+ '3': 29,
+ '4': 1,
+ '5': 8,
+ '10': 'drawerEnableOpenDragGesture'
+ },
+ {
+ '1': 'end_drawer_enable_open_drag_gesture',
+ '3': 30,
+ '4': 1,
+ '5': 8,
+ '10': 'endDrawerEnableOpenDragGesture'
+ },
+ {
+ '1': 'main_axis_alignment',
+ '3': 31,
+ '4': 1,
+ '5': 14,
+ '6': '.flutter_sdui.MainAxisAlignmentProto',
+ '10': 'mainAxisAlignment'
+ },
+ {
+ '1': 'cross_axis_alignment',
+ '3': 32,
+ '4': 1,
+ '5': 14,
+ '6': '.flutter_sdui.CrossAxisAlignmentProto',
+ '10': 'crossAxisAlignment'
+ },
+ {
+ '1': 'main_axis_size',
+ '3': 33,
+ '4': 1,
+ '5': 14,
+ '6': '.flutter_sdui.MainAxisSizeProto',
+ '10': 'mainAxisSize'
+ },
+ {
+ '1': 'text_direction',
+ '3': 34,
+ '4': 1,
+ '5': 14,
+ '6': '.flutter_sdui.TextDirectionProto',
+ '10': 'textDirection'
+ },
+ {
+ '1': 'vertical_direction',
+ '3': 35,
+ '4': 1,
+ '5': 14,
+ '6': '.flutter_sdui.VerticalDirectionProto',
+ '10': 'verticalDirection'
+ },
+ {
+ '1': 'text_baseline',
+ '3': 36,
+ '4': 1,
+ '5': 14,
+ '6': '.flutter_sdui.TextBaselineProto',
+ '10': 'textBaseline'
+ },
+ {
+ '1': 'alignment',
+ '3': 37,
+ '4': 1,
+ '5': 11,
+ '6': '.flutter_sdui.AlignmentData',
+ '10': 'alignment'
+ },
+ {
+ '1': 'constraints',
+ '3': 38,
+ '4': 1,
+ '5': 11,
+ '6': '.flutter_sdui.BoxConstraintsData',
+ '10': 'constraints'
+ },
+ {
+ '1': 'transform',
+ '3': 39,
+ '4': 1,
+ '5': 11,
+ '6': '.flutter_sdui.TransformData',
+ '10': 'transform'
+ },
+ {
+ '1': 'transform_alignment',
+ '3': 40,
+ '4': 1,
+ '5': 11,
+ '6': '.flutter_sdui.AlignmentData',
+ '10': 'transformAlignment'
+ },
+ {
+ '1': 'clip_behavior',
+ '3': 41,
+ '4': 1,
+ '5': 14,
+ '6': '.flutter_sdui.ClipProto',
+ '10': 'clipBehavior'
+ },
+ {
+ '1': 'text_align',
+ '3': 42,
+ '4': 1,
+ '5': 14,
+ '6': '.flutter_sdui.TextAlignProto',
+ '10': 'textAlign'
+ },
+ {
+ '1': 'overflow',
+ '3': 43,
+ '4': 1,
+ '5': 14,
+ '6': '.flutter_sdui.TextOverflowProto',
+ '10': 'overflow'
+ },
+ {'1': 'max_lines', '3': 44, '4': 1, '5': 5, '10': 'maxLines'},
+ {'1': 'soft_wrap', '3': 45, '4': 1, '5': 8, '10': 'softWrap'},
+ {'1': 'letter_spacing', '3': 46, '4': 1, '5': 1, '10': 'letterSpacing'},
+ {'1': 'word_spacing', '3': 47, '4': 1, '5': 1, '10': 'wordSpacing'},
+ {'1': 'height', '3': 48, '4': 1, '5': 1, '10': 'height'},
+ {'1': 'font_family', '3': 49, '4': 1, '5': 9, '10': 'fontFamily'},
+ {
+ '1': 'repeat',
+ '3': 50,
+ '4': 1,
+ '5': 14,
+ '6': '.flutter_sdui.ImageRepeatProto',
+ '10': 'repeat'
+ },
+ {
+ '1': 'color_blend_mode',
+ '3': 51,
+ '4': 1,
+ '5': 14,
+ '6': '.flutter_sdui.BlendModeProto',
+ '10': 'colorBlendMode'
+ },
+ {
+ '1': 'center_slice',
+ '3': 52,
+ '4': 1,
+ '5': 11,
+ '6': '.flutter_sdui.RectData',
+ '10': 'centerSlice'
+ },
+ {
+ '1': 'match_text_direction',
+ '3': 53,
+ '4': 1,
+ '5': 8,
+ '10': 'matchTextDirection'
+ },
+ {'1': 'gapless_playback', '3': 54, '4': 1, '5': 8, '10': 'gaplessPlayback'},
+ {
+ '1': 'filter_quality',
+ '3': 55,
+ '4': 1,
+ '5': 14,
+ '6': '.flutter_sdui.FilterQualityProto',
+ '10': 'filterQuality'
+ },
+ {'1': 'cache_width', '3': 56, '4': 1, '5': 5, '10': 'cacheWidth'},
+ {'1': 'cache_height', '3': 57, '4': 1, '5': 5, '10': 'cacheHeight'},
+ {'1': 'scale', '3': 58, '4': 1, '5': 1, '10': 'scale'},
+ {'1': 'semantic_label', '3': 59, '4': 1, '5': 9, '10': 'semanticLabel'},
+ {
+ '1': 'error_widget',
+ '3': 60,
+ '4': 1,
+ '5': 11,
+ '6': '.flutter_sdui.SduiWidgetData',
+ '10': 'errorWidget'
+ },
+ {
+ '1': 'loading_widget',
+ '3': 61,
+ '4': 1,
+ '5': 11,
+ '6': '.flutter_sdui.SduiWidgetData',
+ '10': 'loadingWidget'
+ },
+ {'1': 'opacity', '3': 62, '4': 1, '5': 1, '10': 'opacity'},
+ {
+ '1': 'apply_text_scaling',
+ '3': 63,
+ '4': 1,
+ '5': 8,
+ '10': 'applyTextScaling'
+ },
+ {
+ '1': 'shadows',
+ '3': 64,
+ '4': 3,
+ '5': 11,
+ '6': '.flutter_sdui.ShadowData',
+ '10': 'shadows'
+ },
+ ],
+ '3': [
+ SduiWidgetData_StringAttributesEntry$json,
+ SduiWidgetData_DoubleAttributesEntry$json,
+ SduiWidgetData_BoolAttributesEntry$json,
+ SduiWidgetData_IntAttributesEntry$json
+ ],
+};
+
+@$core.Deprecated('Use sduiWidgetDataDescriptor instead')
+const SduiWidgetData_StringAttributesEntry$json = {
+ '1': 'StringAttributesEntry',
+ '2': [
+ {'1': 'key', '3': 1, '4': 1, '5': 9, '10': 'key'},
+ {'1': 'value', '3': 2, '4': 1, '5': 9, '10': 'value'},
+ ],
+ '7': {'7': true},
+};
+
+@$core.Deprecated('Use sduiWidgetDataDescriptor instead')
+const SduiWidgetData_DoubleAttributesEntry$json = {
+ '1': 'DoubleAttributesEntry',
+ '2': [
+ {'1': 'key', '3': 1, '4': 1, '5': 9, '10': 'key'},
+ {'1': 'value', '3': 2, '4': 1, '5': 1, '10': 'value'},
+ ],
+ '7': {'7': true},
+};
+
+@$core.Deprecated('Use sduiWidgetDataDescriptor instead')
+const SduiWidgetData_BoolAttributesEntry$json = {
+ '1': 'BoolAttributesEntry',
+ '2': [
+ {'1': 'key', '3': 1, '4': 1, '5': 9, '10': 'key'},
+ {'1': 'value', '3': 2, '4': 1, '5': 8, '10': 'value'},
+ ],
+ '7': {'7': true},
+};
+
+@$core.Deprecated('Use sduiWidgetDataDescriptor instead')
+const SduiWidgetData_IntAttributesEntry$json = {
+ '1': 'IntAttributesEntry',
+ '2': [
+ {'1': 'key', '3': 1, '4': 1, '5': 9, '10': 'key'},
+ {'1': 'value', '3': 2, '4': 1, '5': 5, '10': 'value'},
+ ],
+ '7': {'7': true},
+};
+
+/// Descriptor for `SduiWidgetData`. Decode as a `google.protobuf.DescriptorProto`.
+final $typed_data.Uint8List sduiWidgetDataDescriptor = $convert.base64Decode(
+ 'Cg5TZHVpV2lkZ2V0RGF0YRIsCgR0eXBlGAEgASgOMhguZmx1dHRlcl9zZHVpLldpZGdldFR5cG'
+ 'VSBHR5cGUSXwoRc3RyaW5nX2F0dHJpYnV0ZXMYAiADKAsyMi5mbHV0dGVyX3NkdWkuU2R1aVdp'
+ 'ZGdldERhdGEuU3RyaW5nQXR0cmlidXRlc0VudHJ5UhBzdHJpbmdBdHRyaWJ1dGVzEl8KEWRvdW'
+ 'JsZV9hdHRyaWJ1dGVzGAMgAygLMjIuZmx1dHRlcl9zZHVpLlNkdWlXaWRnZXREYXRhLkRvdWJs'
+ 'ZUF0dHJpYnV0ZXNFbnRyeVIQZG91YmxlQXR0cmlidXRlcxJZCg9ib29sX2F0dHJpYnV0ZXMYBC'
+ 'ADKAsyMC5mbHV0dGVyX3NkdWkuU2R1aVdpZGdldERhdGEuQm9vbEF0dHJpYnV0ZXNFbnRyeVIO'
+ 'Ym9vbEF0dHJpYnV0ZXMSVgoOaW50X2F0dHJpYnV0ZXMYBSADKAsyLy5mbHV0dGVyX3NkdWkuU2'
+ 'R1aVdpZGdldERhdGEuSW50QXR0cmlidXRlc0VudHJ5Ug1pbnRBdHRyaWJ1dGVzEjoKCnRleHRf'
+ 'c3R5bGUYBiABKAsyGy5mbHV0dGVyX3NkdWkuVGV4dFN0eWxlRGF0YVIJdGV4dFN0eWxlEjYKB3'
+ 'BhZGRpbmcYByABKAsyHC5mbHV0dGVyX3NkdWkuRWRnZUluc2V0c0RhdGFSB3BhZGRpbmcSNAoG'
+ 'bWFyZ2luGAggASgLMhwuZmx1dHRlcl9zZHVpLkVkZ2VJbnNldHNEYXRhUgZtYXJnaW4SLQoFY2'
+ '9sb3IYCSABKAsyFy5mbHV0dGVyX3NkdWkuQ29sb3JEYXRhUgVjb2xvchIxCgRpY29uGAogASgL'
+ 'Mh0uZmx1dHRlcl9zZHVpLkljb25EYXRhTWVzc2FnZVIEaWNvbhJGCg5ib3hfZGVjb3JhdGlvbh'
+ 'gLIAEoCzIfLmZsdXR0ZXJfc2R1aS5Cb3hEZWNvcmF0aW9uRGF0YVINYm94RGVjb3JhdGlvbhI4'
+ 'CghjaGlsZHJlbhgMIAMoCzIcLmZsdXR0ZXJfc2R1aS5TZHVpV2lkZ2V0RGF0YVIIY2hpbGRyZW'
+ '4SMgoFY2hpbGQYDSABKAsyHC5mbHV0dGVyX3NkdWkuU2R1aVdpZGdldERhdGFSBWNoaWxkEjUK'
+ 'B2FwcF9iYXIYDiABKAsyHC5mbHV0dGVyX3NkdWkuU2R1aVdpZGdldERhdGFSBmFwcEJhchIwCg'
+ 'Rib2R5GA8gASgLMhwuZmx1dHRlcl9zZHVpLlNkdWlXaWRnZXREYXRhUgRib2R5ElIKFmZsb2F0'
+ 'aW5nX2FjdGlvbl9idXR0b24YECABKAsyHC5mbHV0dGVyX3NkdWkuU2R1aVdpZGdldERhdGFSFG'
+ 'Zsb2F0aW5nQWN0aW9uQnV0dG9uEkIKEGJhY2tncm91bmRfY29sb3IYESABKAsyFy5mbHV0dGVy'
+ 'X3NkdWkuQ29sb3JEYXRhUg9iYWNrZ3JvdW5kQ29sb3ISUAoVYm90dG9tX25hdmlnYXRpb25fYm'
+ 'FyGBIgASgLMhwuZmx1dHRlcl9zZHVpLlNkdWlXaWRnZXREYXRhUhNib3R0b21OYXZpZ2F0aW9u'
+ 'QmFyEjQKBmRyYXdlchgTIAEoCzIcLmZsdXR0ZXJfc2R1aS5TZHVpV2lkZ2V0RGF0YVIGZHJhd2'
+ 'VyEjsKCmVuZF9kcmF3ZXIYFCABKAsyHC5mbHV0dGVyX3NkdWkuU2R1aVdpZGdldERhdGFSCWVu'
+ 'ZERyYXdlchI/Cgxib3R0b21fc2hlZXQYFSABKAsyHC5mbHV0dGVyX3NkdWkuU2R1aVdpZGdldE'
+ 'RhdGFSC2JvdHRvbVNoZWV0Ej4KHHJlc2l6ZV90b19hdm9pZF9ib3R0b21faW5zZXQYFiABKAhS'
+ 'GHJlc2l6ZVRvQXZvaWRCb3R0b21JbnNldBIYCgdwcmltYXJ5GBcgASgIUgdwcmltYXJ5EnYKH2'
+ 'Zsb2F0aW5nX2FjdGlvbl9idXR0b25fbG9jYXRpb24YGCABKA4yLy5mbHV0dGVyX3NkdWkuRmxv'
+ 'YXRpbmdBY3Rpb25CdXR0b25Mb2NhdGlvblByb3RvUhxmbG9hdGluZ0FjdGlvbkJ1dHRvbkxvY2'
+ 'F0aW9uEh8KC2V4dGVuZF9ib2R5GBkgASgIUgpleHRlbmRCb2R5EjoKGmV4dGVuZF9ib2R5X2Jl'
+ 'aGluZF9hcHBfYmFyGBogASgIUhZleHRlbmRCb2R5QmVoaW5kQXBwQmFyEkUKEmRyYXdlcl9zY3'
+ 'JpbV9jb2xvchgbIAEoCzIXLmZsdXR0ZXJfc2R1aS5Db2xvckRhdGFSEGRyYXdlclNjcmltQ29s'
+ 'b3ISMwoWZHJhd2VyX2VkZ2VfZHJhZ193aWR0aBgcIAEoAVITZHJhd2VyRWRnZURyYWdXaWR0aB'
+ 'JECh9kcmF3ZXJfZW5hYmxlX29wZW5fZHJhZ19nZXN0dXJlGB0gASgIUhtkcmF3ZXJFbmFibGVP'
+ 'cGVuRHJhZ0dlc3R1cmUSSwojZW5kX2RyYXdlcl9lbmFibGVfb3Blbl9kcmFnX2dlc3R1cmUYHi'
+ 'ABKAhSHmVuZERyYXdlckVuYWJsZU9wZW5EcmFnR2VzdHVyZRJUChNtYWluX2F4aXNfYWxpZ25t'
+ 'ZW50GB8gASgOMiQuZmx1dHRlcl9zZHVpLk1haW5BeGlzQWxpZ25tZW50UHJvdG9SEW1haW5BeG'
+ 'lzQWxpZ25tZW50ElcKFGNyb3NzX2F4aXNfYWxpZ25tZW50GCAgASgOMiUuZmx1dHRlcl9zZHVp'
+ 'LkNyb3NzQXhpc0FsaWdubWVudFByb3RvUhJjcm9zc0F4aXNBbGlnbm1lbnQSRQoObWFpbl9heG'
+ 'lzX3NpemUYISABKA4yHy5mbHV0dGVyX3NkdWkuTWFpbkF4aXNTaXplUHJvdG9SDG1haW5BeGlz'
+ 'U2l6ZRJHCg50ZXh0X2RpcmVjdGlvbhgiIAEoDjIgLmZsdXR0ZXJfc2R1aS5UZXh0RGlyZWN0aW'
+ '9uUHJvdG9SDXRleHREaXJlY3Rpb24SUwoSdmVydGljYWxfZGlyZWN0aW9uGCMgASgOMiQuZmx1'
+ 'dHRlcl9zZHVpLlZlcnRpY2FsRGlyZWN0aW9uUHJvdG9SEXZlcnRpY2FsRGlyZWN0aW9uEkQKDX'
+ 'RleHRfYmFzZWxpbmUYJCABKA4yHy5mbHV0dGVyX3NkdWkuVGV4dEJhc2VsaW5lUHJvdG9SDHRl'
+ 'eHRCYXNlbGluZRI5CglhbGlnbm1lbnQYJSABKAsyGy5mbHV0dGVyX3NkdWkuQWxpZ25tZW50RG'
+ 'F0YVIJYWxpZ25tZW50EkIKC2NvbnN0cmFpbnRzGCYgASgLMiAuZmx1dHRlcl9zZHVpLkJveENv'
+ 'bnN0cmFpbnRzRGF0YVILY29uc3RyYWludHMSOQoJdHJhbnNmb3JtGCcgASgLMhsuZmx1dHRlcl'
+ '9zZHVpLlRyYW5zZm9ybURhdGFSCXRyYW5zZm9ybRJMChN0cmFuc2Zvcm1fYWxpZ25tZW50GCgg'
+ 'ASgLMhsuZmx1dHRlcl9zZHVpLkFsaWdubWVudERhdGFSEnRyYW5zZm9ybUFsaWdubWVudBI8Cg'
+ '1jbGlwX2JlaGF2aW9yGCkgASgOMhcuZmx1dHRlcl9zZHVpLkNsaXBQcm90b1IMY2xpcEJlaGF2'
+ 'aW9yEjsKCnRleHRfYWxpZ24YKiABKA4yHC5mbHV0dGVyX3NkdWkuVGV4dEFsaWduUHJvdG9SCX'
+ 'RleHRBbGlnbhI7CghvdmVyZmxvdxgrIAEoDjIfLmZsdXR0ZXJfc2R1aS5UZXh0T3ZlcmZsb3dQ'
+ 'cm90b1IIb3ZlcmZsb3cSGwoJbWF4X2xpbmVzGCwgASgFUghtYXhMaW5lcxIbCglzb2Z0X3dyYX'
+ 'AYLSABKAhSCHNvZnRXcmFwEiUKDmxldHRlcl9zcGFjaW5nGC4gASgBUg1sZXR0ZXJTcGFjaW5n'
+ 'EiEKDHdvcmRfc3BhY2luZxgvIAEoAVILd29yZFNwYWNpbmcSFgoGaGVpZ2h0GDAgASgBUgZoZW'
+ 'lnaHQSHwoLZm9udF9mYW1pbHkYMSABKAlSCmZvbnRGYW1pbHkSNgoGcmVwZWF0GDIgASgOMh4u'
+ 'Zmx1dHRlcl9zZHVpLkltYWdlUmVwZWF0UHJvdG9SBnJlcGVhdBJGChBjb2xvcl9ibGVuZF9tb2'
+ 'RlGDMgASgOMhwuZmx1dHRlcl9zZHVpLkJsZW5kTW9kZVByb3RvUg5jb2xvckJsZW5kTW9kZRI5'
+ 'CgxjZW50ZXJfc2xpY2UYNCABKAsyFi5mbHV0dGVyX3NkdWkuUmVjdERhdGFSC2NlbnRlclNsaW'
+ 'NlEjAKFG1hdGNoX3RleHRfZGlyZWN0aW9uGDUgASgIUhJtYXRjaFRleHREaXJlY3Rpb24SKQoQ'
+ 'Z2FwbGVzc19wbGF5YmFjaxg2IAEoCFIPZ2FwbGVzc1BsYXliYWNrEkcKDmZpbHRlcl9xdWFsaX'
+ 'R5GDcgASgOMiAuZmx1dHRlcl9zZHVpLkZpbHRlclF1YWxpdHlQcm90b1INZmlsdGVyUXVhbGl0'
+ 'eRIfCgtjYWNoZV93aWR0aBg4IAEoBVIKY2FjaGVXaWR0aBIhCgxjYWNoZV9oZWlnaHQYOSABKA'
+ 'VSC2NhY2hlSGVpZ2h0EhQKBXNjYWxlGDogASgBUgVzY2FsZRIlCg5zZW1hbnRpY19sYWJlbBg7'
+ 'IAEoCVINc2VtYW50aWNMYWJlbBI/CgxlcnJvcl93aWRnZXQYPCABKAsyHC5mbHV0dGVyX3NkdW'
+ 'kuU2R1aVdpZGdldERhdGFSC2Vycm9yV2lkZ2V0EkMKDmxvYWRpbmdfd2lkZ2V0GD0gASgLMhwu'
+ 'Zmx1dHRlcl9zZHVpLlNkdWlXaWRnZXREYXRhUg1sb2FkaW5nV2lkZ2V0EhgKB29wYWNpdHkYPi'
+ 'ABKAFSB29wYWNpdHkSLAoSYXBwbHlfdGV4dF9zY2FsaW5nGD8gASgIUhBhcHBseVRleHRTY2Fs'
+ 'aW5nEjIKB3NoYWRvd3MYQCADKAsyGC5mbHV0dGVyX3NkdWkuU2hhZG93RGF0YVIHc2hhZG93cx'
+ 'pDChVTdHJpbmdBdHRyaWJ1dGVzRW50cnkSEAoDa2V5GAEgASgJUgNrZXkSFAoFdmFsdWUYAiAB'
+ 'KAlSBXZhbHVlOgI4ARpDChVEb3VibGVBdHRyaWJ1dGVzRW50cnkSEAoDa2V5GAEgASgJUgNrZX'
+ 'kSFAoFdmFsdWUYAiABKAFSBXZhbHVlOgI4ARpBChNCb29sQXR0cmlidXRlc0VudHJ5EhAKA2tl'
+ 'eRgBIAEoCVIDa2V5EhQKBXZhbHVlGAIgASgIUgV2YWx1ZToCOAEaQAoSSW50QXR0cmlidXRlc0'
+ 'VudHJ5EhAKA2tleRgBIAEoCVIDa2V5EhQKBXZhbHVlGAIgASgFUgV2YWx1ZToCOAE=');
+
+@$core.Deprecated('Use colorDataDescriptor instead')
+const ColorData$json = {
+ '1': 'ColorData',
+ '2': [
+ {'1': 'alpha', '3': 1, '4': 1, '5': 5, '10': 'alpha'},
+ {'1': 'red', '3': 2, '4': 1, '5': 5, '10': 'red'},
+ {'1': 'green', '3': 3, '4': 1, '5': 5, '10': 'green'},
+ {'1': 'blue', '3': 4, '4': 1, '5': 5, '10': 'blue'},
+ ],
+};
+
+/// Descriptor for `ColorData`. Decode as a `google.protobuf.DescriptorProto`.
+final $typed_data.Uint8List colorDataDescriptor = $convert.base64Decode(
+ 'CglDb2xvckRhdGESFAoFYWxwaGEYASABKAVSBWFscGhhEhAKA3JlZBgCIAEoBVIDcmVkEhQKBW'
+ 'dyZWVuGAMgASgFUgVncmVlbhISCgRibHVlGAQgASgFUgRibHVl');
+
+@$core.Deprecated('Use edgeInsetsDataDescriptor instead')
+const EdgeInsetsData$json = {
+ '1': 'EdgeInsetsData',
+ '2': [
+ {'1': 'left', '3': 1, '4': 1, '5': 1, '9': 0, '10': 'left', '17': true},
+ {'1': 'top', '3': 2, '4': 1, '5': 1, '9': 1, '10': 'top', '17': true},
+ {'1': 'right', '3': 3, '4': 1, '5': 1, '9': 2, '10': 'right', '17': true},
+ {'1': 'bottom', '3': 4, '4': 1, '5': 1, '9': 3, '10': 'bottom', '17': true},
+ {'1': 'all', '3': 5, '4': 1, '5': 1, '9': 4, '10': 'all', '17': true},
+ ],
+ '8': [
+ {'1': '_left'},
+ {'1': '_top'},
+ {'1': '_right'},
+ {'1': '_bottom'},
+ {'1': '_all'},
+ ],
+};
+
+/// Descriptor for `EdgeInsetsData`. Decode as a `google.protobuf.DescriptorProto`.
+final $typed_data.Uint8List edgeInsetsDataDescriptor = $convert.base64Decode(
+ 'Cg5FZGdlSW5zZXRzRGF0YRIXCgRsZWZ0GAEgASgBSABSBGxlZnSIAQESFQoDdG9wGAIgASgBSA'
+ 'FSA3RvcIgBARIZCgVyaWdodBgDIAEoAUgCUgVyaWdodIgBARIbCgZib3R0b20YBCABKAFIA1IG'
+ 'Ym90dG9tiAEBEhUKA2FsbBgFIAEoAUgEUgNhbGyIAQFCBwoFX2xlZnRCBgoEX3RvcEIICgZfcm'
+ 'lnaHRCCQoHX2JvdHRvbUIGCgRfYWxs');
+
+@$core.Deprecated('Use textStyleDataDescriptor instead')
+const TextStyleData$json = {
+ '1': 'TextStyleData',
+ '2': [
+ {
+ '1': 'color',
+ '3': 1,
+ '4': 1,
+ '5': 11,
+ '6': '.flutter_sdui.ColorData',
+ '9': 0,
+ '10': 'color',
+ '17': true
+ },
+ {
+ '1': 'font_size',
+ '3': 2,
+ '4': 1,
+ '5': 1,
+ '9': 1,
+ '10': 'fontSize',
+ '17': true
+ },
+ {
+ '1': 'font_weight',
+ '3': 3,
+ '4': 1,
+ '5': 9,
+ '9': 2,
+ '10': 'fontWeight',
+ '17': true
+ },
+ {
+ '1': 'decoration',
+ '3': 4,
+ '4': 1,
+ '5': 14,
+ '6': '.flutter_sdui.TextDecorationProto',
+ '9': 3,
+ '10': 'decoration',
+ '17': true
+ },
+ {
+ '1': 'letter_spacing',
+ '3': 5,
+ '4': 1,
+ '5': 1,
+ '9': 4,
+ '10': 'letterSpacing',
+ '17': true
+ },
+ {
+ '1': 'word_spacing',
+ '3': 6,
+ '4': 1,
+ '5': 1,
+ '9': 5,
+ '10': 'wordSpacing',
+ '17': true
+ },
+ {'1': 'height', '3': 7, '4': 1, '5': 1, '9': 6, '10': 'height', '17': true},
+ {
+ '1': 'font_family',
+ '3': 8,
+ '4': 1,
+ '5': 9,
+ '9': 7,
+ '10': 'fontFamily',
+ '17': true
+ },
+ {
+ '1': 'font_style',
+ '3': 9,
+ '4': 1,
+ '5': 14,
+ '6': '.flutter_sdui.FontStyleProto',
+ '9': 8,
+ '10': 'fontStyle',
+ '17': true
+ },
+ ],
+ '8': [
+ {'1': '_color'},
+ {'1': '_font_size'},
+ {'1': '_font_weight'},
+ {'1': '_decoration'},
+ {'1': '_letter_spacing'},
+ {'1': '_word_spacing'},
+ {'1': '_height'},
+ {'1': '_font_family'},
+ {'1': '_font_style'},
+ ],
+};
+
+/// Descriptor for `TextStyleData`. Decode as a `google.protobuf.DescriptorProto`.
+final $typed_data.Uint8List textStyleDataDescriptor = $convert.base64Decode(
+ 'Cg1UZXh0U3R5bGVEYXRhEjIKBWNvbG9yGAEgASgLMhcuZmx1dHRlcl9zZHVpLkNvbG9yRGF0YU'
+ 'gAUgVjb2xvcogBARIgCglmb250X3NpemUYAiABKAFIAVIIZm9udFNpemWIAQESJAoLZm9udF93'
+ 'ZWlnaHQYAyABKAlIAlIKZm9udFdlaWdodIgBARJGCgpkZWNvcmF0aW9uGAQgASgOMiEuZmx1dH'
+ 'Rlcl9zZHVpLlRleHREZWNvcmF0aW9uUHJvdG9IA1IKZGVjb3JhdGlvbogBARIqCg5sZXR0ZXJf'
+ 'c3BhY2luZxgFIAEoAUgEUg1sZXR0ZXJTcGFjaW5niAEBEiYKDHdvcmRfc3BhY2luZxgGIAEoAU'
+ 'gFUgt3b3JkU3BhY2luZ4gBARIbCgZoZWlnaHQYByABKAFIBlIGaGVpZ2h0iAEBEiQKC2ZvbnRf'
+ 'ZmFtaWx5GAggASgJSAdSCmZvbnRGYW1pbHmIAQESQAoKZm9udF9zdHlsZRgJIAEoDjIcLmZsdX'
+ 'R0ZXJfc2R1aS5Gb250U3R5bGVQcm90b0gIUglmb250U3R5bGWIAQFCCAoGX2NvbG9yQgwKCl9m'
+ 'b250X3NpemVCDgoMX2ZvbnRfd2VpZ2h0Qg0KC19kZWNvcmF0aW9uQhEKD19sZXR0ZXJfc3BhY2'
+ 'luZ0IPCg1fd29yZF9zcGFjaW5nQgkKB19oZWlnaHRCDgoMX2ZvbnRfZmFtaWx5Qg0KC19mb250'
+ 'X3N0eWxl');
+
+@$core.Deprecated('Use iconDataMessageDescriptor instead')
+const IconDataMessage$json = {
+ '1': 'IconDataMessage',
+ '2': [
+ {'1': 'name', '3': 1, '4': 1, '5': 9, '9': 0, '10': 'name', '17': true},
+ {
+ '1': 'code_point',
+ '3': 2,
+ '4': 1,
+ '5': 5,
+ '9': 1,
+ '10': 'codePoint',
+ '17': true
+ },
+ {
+ '1': 'font_family',
+ '3': 3,
+ '4': 1,
+ '5': 9,
+ '9': 2,
+ '10': 'fontFamily',
+ '17': true
+ },
+ {
+ '1': 'color',
+ '3': 4,
+ '4': 1,
+ '5': 11,
+ '6': '.flutter_sdui.ColorData',
+ '9': 3,
+ '10': 'color',
+ '17': true
+ },
+ {'1': 'size', '3': 5, '4': 1, '5': 1, '9': 4, '10': 'size', '17': true},
+ ],
+ '8': [
+ {'1': '_name'},
+ {'1': '_code_point'},
+ {'1': '_font_family'},
+ {'1': '_color'},
+ {'1': '_size'},
+ ],
+};
+
+/// Descriptor for `IconDataMessage`. Decode as a `google.protobuf.DescriptorProto`.
+final $typed_data.Uint8List iconDataMessageDescriptor = $convert.base64Decode(
+ 'Cg9JY29uRGF0YU1lc3NhZ2USFwoEbmFtZRgBIAEoCUgAUgRuYW1liAEBEiIKCmNvZGVfcG9pbn'
+ 'QYAiABKAVIAVIJY29kZVBvaW50iAEBEiQKC2ZvbnRfZmFtaWx5GAMgASgJSAJSCmZvbnRGYW1p'
+ 'bHmIAQESMgoFY29sb3IYBCABKAsyFy5mbHV0dGVyX3NkdWkuQ29sb3JEYXRhSANSBWNvbG9yiA'
+ 'EBEhcKBHNpemUYBSABKAFIBFIEc2l6ZYgBAUIHCgVfbmFtZUINCgtfY29kZV9wb2ludEIOCgxf'
+ 'Zm9udF9mYW1pbHlCCAoGX2NvbG9yQgcKBV9zaXpl');
+
+@$core.Deprecated('Use boxDecorationDataDescriptor instead')
+const BoxDecorationData$json = {
+ '1': 'BoxDecorationData',
+ '2': [
+ {
+ '1': 'color',
+ '3': 1,
+ '4': 1,
+ '5': 11,
+ '6': '.flutter_sdui.ColorData',
+ '9': 0,
+ '10': 'color',
+ '17': true
+ },
+ {
+ '1': 'border_radius',
+ '3': 2,
+ '4': 1,
+ '5': 11,
+ '6': '.flutter_sdui.BorderRadiusData',
+ '9': 1,
+ '10': 'borderRadius',
+ '17': true
+ },
+ {
+ '1': 'border',
+ '3': 3,
+ '4': 1,
+ '5': 11,
+ '6': '.flutter_sdui.BorderData',
+ '9': 2,
+ '10': 'border',
+ '17': true
+ },
+ {
+ '1': 'box_shadow',
+ '3': 4,
+ '4': 3,
+ '5': 11,
+ '6': '.flutter_sdui.BoxShadowData',
+ '10': 'boxShadow'
+ },
+ {
+ '1': 'gradient',
+ '3': 5,
+ '4': 1,
+ '5': 11,
+ '6': '.flutter_sdui.GradientData',
+ '9': 3,
+ '10': 'gradient',
+ '17': true
+ },
+ {
+ '1': 'shape',
+ '3': 6,
+ '4': 1,
+ '5': 14,
+ '6': '.flutter_sdui.BoxShapeProto',
+ '9': 4,
+ '10': 'shape',
+ '17': true
+ },
+ {
+ '1': 'image',
+ '3': 7,
+ '4': 1,
+ '5': 11,
+ '6': '.flutter_sdui.DecorationImageData',
+ '9': 5,
+ '10': 'image',
+ '17': true
+ },
+ ],
+ '8': [
+ {'1': '_color'},
+ {'1': '_border_radius'},
+ {'1': '_border'},
+ {'1': '_gradient'},
+ {'1': '_shape'},
+ {'1': '_image'},
+ ],
+};
+
+/// Descriptor for `BoxDecorationData`. Decode as a `google.protobuf.DescriptorProto`.
+final $typed_data.Uint8List boxDecorationDataDescriptor = $convert.base64Decode(
+ 'ChFCb3hEZWNvcmF0aW9uRGF0YRIyCgVjb2xvchgBIAEoCzIXLmZsdXR0ZXJfc2R1aS5Db2xvck'
+ 'RhdGFIAFIFY29sb3KIAQESSAoNYm9yZGVyX3JhZGl1cxgCIAEoCzIeLmZsdXR0ZXJfc2R1aS5C'
+ 'b3JkZXJSYWRpdXNEYXRhSAFSDGJvcmRlclJhZGl1c4gBARI1CgZib3JkZXIYAyABKAsyGC5mbH'
+ 'V0dGVyX3NkdWkuQm9yZGVyRGF0YUgCUgZib3JkZXKIAQESOgoKYm94X3NoYWRvdxgEIAMoCzIb'
+ 'LmZsdXR0ZXJfc2R1aS5Cb3hTaGFkb3dEYXRhUglib3hTaGFkb3cSOwoIZ3JhZGllbnQYBSABKA'
+ 'syGi5mbHV0dGVyX3NkdWkuR3JhZGllbnREYXRhSANSCGdyYWRpZW50iAEBEjYKBXNoYXBlGAYg'
+ 'ASgOMhsuZmx1dHRlcl9zZHVpLkJveFNoYXBlUHJvdG9IBFIFc2hhcGWIAQESPAoFaW1hZ2UYBy'
+ 'ABKAsyIS5mbHV0dGVyX3NkdWkuRGVjb3JhdGlvbkltYWdlRGF0YUgFUgVpbWFnZYgBAUIICgZf'
+ 'Y29sb3JCEAoOX2JvcmRlcl9yYWRpdXNCCQoHX2JvcmRlckILCglfZ3JhZGllbnRCCAoGX3NoYX'
+ 'BlQggKBl9pbWFnZQ==');
+
+@$core.Deprecated('Use borderRadiusDataDescriptor instead')
+const BorderRadiusData$json = {
+ '1': 'BorderRadiusData',
+ '2': [
+ {'1': 'all', '3': 1, '4': 1, '5': 1, '9': 0, '10': 'all', '17': true},
+ {
+ '1': 'top_left',
+ '3': 2,
+ '4': 1,
+ '5': 1,
+ '9': 1,
+ '10': 'topLeft',
+ '17': true
+ },
+ {
+ '1': 'top_right',
+ '3': 3,
+ '4': 1,
+ '5': 1,
+ '9': 2,
+ '10': 'topRight',
+ '17': true
+ },
+ {
+ '1': 'bottom_left',
+ '3': 4,
+ '4': 1,
+ '5': 1,
+ '9': 3,
+ '10': 'bottomLeft',
+ '17': true
+ },
+ {
+ '1': 'bottom_right',
+ '3': 5,
+ '4': 1,
+ '5': 1,
+ '9': 4,
+ '10': 'bottomRight',
+ '17': true
+ },
+ ],
+ '8': [
+ {'1': '_all'},
+ {'1': '_top_left'},
+ {'1': '_top_right'},
+ {'1': '_bottom_left'},
+ {'1': '_bottom_right'},
+ ],
+};
+
+/// Descriptor for `BorderRadiusData`. Decode as a `google.protobuf.DescriptorProto`.
+final $typed_data.Uint8List borderRadiusDataDescriptor = $convert.base64Decode(
+ 'ChBCb3JkZXJSYWRpdXNEYXRhEhUKA2FsbBgBIAEoAUgAUgNhbGyIAQESHgoIdG9wX2xlZnQYAi'
+ 'ABKAFIAVIHdG9wTGVmdIgBARIgCgl0b3BfcmlnaHQYAyABKAFIAlIIdG9wUmlnaHSIAQESJAoL'
+ 'Ym90dG9tX2xlZnQYBCABKAFIA1IKYm90dG9tTGVmdIgBARImCgxib3R0b21fcmlnaHQYBSABKA'
+ 'FIBFILYm90dG9tUmlnaHSIAQFCBgoEX2FsbEILCglfdG9wX2xlZnRCDAoKX3RvcF9yaWdodEIO'
+ 'CgxfYm90dG9tX2xlZnRCDwoNX2JvdHRvbV9yaWdodA==');
+
+@$core.Deprecated('Use borderSideDataDescriptor instead')
+const BorderSideData$json = {
+ '1': 'BorderSideData',
+ '2': [
+ {
+ '1': 'color',
+ '3': 1,
+ '4': 1,
+ '5': 11,
+ '6': '.flutter_sdui.ColorData',
+ '9': 0,
+ '10': 'color',
+ '17': true
+ },
+ {'1': 'width', '3': 2, '4': 1, '5': 1, '9': 1, '10': 'width', '17': true},
+ {
+ '1': 'style',
+ '3': 3,
+ '4': 1,
+ '5': 14,
+ '6': '.flutter_sdui.BorderStyleProto',
+ '9': 2,
+ '10': 'style',
+ '17': true
+ },
+ ],
+ '8': [
+ {'1': '_color'},
+ {'1': '_width'},
+ {'1': '_style'},
+ ],
+};
+
+/// Descriptor for `BorderSideData`. Decode as a `google.protobuf.DescriptorProto`.
+final $typed_data.Uint8List borderSideDataDescriptor = $convert.base64Decode(
+ 'Cg5Cb3JkZXJTaWRlRGF0YRIyCgVjb2xvchgBIAEoCzIXLmZsdXR0ZXJfc2R1aS5Db2xvckRhdG'
+ 'FIAFIFY29sb3KIAQESGQoFd2lkdGgYAiABKAFIAVIFd2lkdGiIAQESOQoFc3R5bGUYAyABKA4y'
+ 'Hi5mbHV0dGVyX3NkdWkuQm9yZGVyU3R5bGVQcm90b0gCUgVzdHlsZYgBAUIICgZfY29sb3JCCA'
+ 'oGX3dpZHRoQggKBl9zdHlsZQ==');
+
+@$core.Deprecated('Use borderDataDescriptor instead')
+const BorderData$json = {
+ '1': 'BorderData',
+ '2': [
+ {
+ '1': 'top',
+ '3': 1,
+ '4': 1,
+ '5': 11,
+ '6': '.flutter_sdui.BorderSideData',
+ '9': 0,
+ '10': 'top',
+ '17': true
+ },
+ {
+ '1': 'right',
+ '3': 2,
+ '4': 1,
+ '5': 11,
+ '6': '.flutter_sdui.BorderSideData',
+ '9': 1,
+ '10': 'right',
+ '17': true
+ },
+ {
+ '1': 'bottom',
+ '3': 3,
+ '4': 1,
+ '5': 11,
+ '6': '.flutter_sdui.BorderSideData',
+ '9': 2,
+ '10': 'bottom',
+ '17': true
+ },
+ {
+ '1': 'left',
+ '3': 4,
+ '4': 1,
+ '5': 11,
+ '6': '.flutter_sdui.BorderSideData',
+ '9': 3,
+ '10': 'left',
+ '17': true
+ },
+ {
+ '1': 'all',
+ '3': 5,
+ '4': 1,
+ '5': 11,
+ '6': '.flutter_sdui.BorderSideData',
+ '9': 4,
+ '10': 'all',
+ '17': true
+ },
+ ],
+ '8': [
+ {'1': '_top'},
+ {'1': '_right'},
+ {'1': '_bottom'},
+ {'1': '_left'},
+ {'1': '_all'},
+ ],
+};
+
+/// Descriptor for `BorderData`. Decode as a `google.protobuf.DescriptorProto`.
+final $typed_data.Uint8List borderDataDescriptor = $convert.base64Decode(
+ 'CgpCb3JkZXJEYXRhEjMKA3RvcBgBIAEoCzIcLmZsdXR0ZXJfc2R1aS5Cb3JkZXJTaWRlRGF0YU'
+ 'gAUgN0b3CIAQESNwoFcmlnaHQYAiABKAsyHC5mbHV0dGVyX3NkdWkuQm9yZGVyU2lkZURhdGFI'
+ 'AVIFcmlnaHSIAQESOQoGYm90dG9tGAMgASgLMhwuZmx1dHRlcl9zZHVpLkJvcmRlclNpZGVEYX'
+ 'RhSAJSBmJvdHRvbYgBARI1CgRsZWZ0GAQgASgLMhwuZmx1dHRlcl9zZHVpLkJvcmRlclNpZGVE'
+ 'YXRhSANSBGxlZnSIAQESMwoDYWxsGAUgASgLMhwuZmx1dHRlcl9zZHVpLkJvcmRlclNpZGVEYX'
+ 'RhSARSA2FsbIgBAUIGCgRfdG9wQggKBl9yaWdodEIJCgdfYm90dG9tQgcKBV9sZWZ0QgYKBF9h'
+ 'bGw=');
+
+@$core.Deprecated('Use boxShadowDataDescriptor instead')
+const BoxShadowData$json = {
+ '1': 'BoxShadowData',
+ '2': [
+ {
+ '1': 'color',
+ '3': 1,
+ '4': 1,
+ '5': 11,
+ '6': '.flutter_sdui.ColorData',
+ '9': 0,
+ '10': 'color',
+ '17': true
+ },
+ {
+ '1': 'offset_x',
+ '3': 2,
+ '4': 1,
+ '5': 1,
+ '9': 1,
+ '10': 'offsetX',
+ '17': true
+ },
+ {
+ '1': 'offset_y',
+ '3': 3,
+ '4': 1,
+ '5': 1,
+ '9': 2,
+ '10': 'offsetY',
+ '17': true
+ },
+ {
+ '1': 'blur_radius',
+ '3': 4,
+ '4': 1,
+ '5': 1,
+ '9': 3,
+ '10': 'blurRadius',
+ '17': true
+ },
+ {
+ '1': 'spread_radius',
+ '3': 5,
+ '4': 1,
+ '5': 1,
+ '9': 4,
+ '10': 'spreadRadius',
+ '17': true
+ },
+ ],
+ '8': [
+ {'1': '_color'},
+ {'1': '_offset_x'},
+ {'1': '_offset_y'},
+ {'1': '_blur_radius'},
+ {'1': '_spread_radius'},
+ ],
+};
+
+/// Descriptor for `BoxShadowData`. Decode as a `google.protobuf.DescriptorProto`.
+final $typed_data.Uint8List boxShadowDataDescriptor = $convert.base64Decode(
+ 'Cg1Cb3hTaGFkb3dEYXRhEjIKBWNvbG9yGAEgASgLMhcuZmx1dHRlcl9zZHVpLkNvbG9yRGF0YU'
+ 'gAUgVjb2xvcogBARIeCghvZmZzZXRfeBgCIAEoAUgBUgdvZmZzZXRYiAEBEh4KCG9mZnNldF95'
+ 'GAMgASgBSAJSB29mZnNldFmIAQESJAoLYmx1cl9yYWRpdXMYBCABKAFIA1IKYmx1clJhZGl1c4'
+ 'gBARIoCg1zcHJlYWRfcmFkaXVzGAUgASgBSARSDHNwcmVhZFJhZGl1c4gBAUIICgZfY29sb3JC'
+ 'CwoJX29mZnNldF94QgsKCV9vZmZzZXRfeUIOCgxfYmx1cl9yYWRpdXNCEAoOX3NwcmVhZF9yYW'
+ 'RpdXM=');
+
+@$core.Deprecated('Use gradientDataDescriptor instead')
+const GradientData$json = {
+ '1': 'GradientData',
+ '2': [
+ {
+ '1': 'type',
+ '3': 1,
+ '4': 1,
+ '5': 14,
+ '6': '.flutter_sdui.GradientData.GradientType',
+ '10': 'type'
+ },
+ {
+ '1': 'colors',
+ '3': 2,
+ '4': 3,
+ '5': 11,
+ '6': '.flutter_sdui.ColorData',
+ '10': 'colors'
+ },
+ {'1': 'stops', '3': 3, '4': 3, '5': 1, '10': 'stops'},
+ {
+ '1': 'begin',
+ '3': 4,
+ '4': 1,
+ '5': 11,
+ '6': '.flutter_sdui.AlignmentData',
+ '9': 0,
+ '10': 'begin',
+ '17': true
+ },
+ {
+ '1': 'end',
+ '3': 5,
+ '4': 1,
+ '5': 11,
+ '6': '.flutter_sdui.AlignmentData',
+ '9': 1,
+ '10': 'end',
+ '17': true
+ },
+ {
+ '1': 'center',
+ '3': 6,
+ '4': 1,
+ '5': 11,
+ '6': '.flutter_sdui.AlignmentData',
+ '9': 2,
+ '10': 'center',
+ '17': true
+ },
+ {'1': 'radius', '3': 7, '4': 1, '5': 1, '9': 3, '10': 'radius', '17': true},
+ {
+ '1': 'start_angle',
+ '3': 8,
+ '4': 1,
+ '5': 1,
+ '9': 4,
+ '10': 'startAngle',
+ '17': true
+ },
+ {
+ '1': 'end_angle',
+ '3': 9,
+ '4': 1,
+ '5': 1,
+ '9': 5,
+ '10': 'endAngle',
+ '17': true
+ },
+ ],
+ '4': [GradientData_GradientType$json],
+ '8': [
+ {'1': '_begin'},
+ {'1': '_end'},
+ {'1': '_center'},
+ {'1': '_radius'},
+ {'1': '_start_angle'},
+ {'1': '_end_angle'},
+ ],
+};
+
+@$core.Deprecated('Use gradientDataDescriptor instead')
+const GradientData_GradientType$json = {
+ '1': 'GradientType',
+ '2': [
+ {'1': 'GRADIENT_TYPE_UNSPECIFIED', '2': 0},
+ {'1': 'LINEAR', '2': 1},
+ {'1': 'RADIAL', '2': 2},
+ {'1': 'SWEEP', '2': 3},
+ ],
+};
+
+/// Descriptor for `GradientData`. Decode as a `google.protobuf.DescriptorProto`.
+final $typed_data.Uint8List gradientDataDescriptor = $convert.base64Decode(
+ 'CgxHcmFkaWVudERhdGESOwoEdHlwZRgBIAEoDjInLmZsdXR0ZXJfc2R1aS5HcmFkaWVudERhdG'
+ 'EuR3JhZGllbnRUeXBlUgR0eXBlEi8KBmNvbG9ycxgCIAMoCzIXLmZsdXR0ZXJfc2R1aS5Db2xv'
+ 'ckRhdGFSBmNvbG9ycxIUCgVzdG9wcxgDIAMoAVIFc3RvcHMSNgoFYmVnaW4YBCABKAsyGy5mbH'
+ 'V0dGVyX3NkdWkuQWxpZ25tZW50RGF0YUgAUgViZWdpbogBARIyCgNlbmQYBSABKAsyGy5mbHV0'
+ 'dGVyX3NkdWkuQWxpZ25tZW50RGF0YUgBUgNlbmSIAQESOAoGY2VudGVyGAYgASgLMhsuZmx1dH'
+ 'Rlcl9zZHVpLkFsaWdubWVudERhdGFIAlIGY2VudGVyiAEBEhsKBnJhZGl1cxgHIAEoAUgDUgZy'
+ 'YWRpdXOIAQESJAoLc3RhcnRfYW5nbGUYCCABKAFIBFIKc3RhcnRBbmdsZYgBARIgCgllbmRfYW'
+ '5nbGUYCSABKAFIBVIIZW5kQW5nbGWIAQEiUAoMR3JhZGllbnRUeXBlEh0KGUdSQURJRU5UX1RZ'
+ 'UEVfVU5TUEVDSUZJRUQQABIKCgZMSU5FQVIQARIKCgZSQURJQUwQAhIJCgVTV0VFUBADQggKBl'
+ '9iZWdpbkIGCgRfZW5kQgkKB19jZW50ZXJCCQoHX3JhZGl1c0IOCgxfc3RhcnRfYW5nbGVCDAoK'
+ 'X2VuZF9hbmdsZQ==');
+
+@$core.Deprecated('Use alignmentDataDescriptor instead')
+const AlignmentData$json = {
+ '1': 'AlignmentData',
+ '2': [
+ {
+ '1': 'predefined',
+ '3': 1,
+ '4': 1,
+ '5': 14,
+ '6': '.flutter_sdui.AlignmentData.PredefinedAlignment',
+ '9': 0,
+ '10': 'predefined'
+ },
+ {
+ '1': 'xy',
+ '3': 2,
+ '4': 1,
+ '5': 11,
+ '6': '.flutter_sdui.XYAlignment',
+ '9': 0,
+ '10': 'xy'
+ },
+ ],
+ '4': [AlignmentData_PredefinedAlignment$json],
+ '8': [
+ {'1': 'alignment_type'},
+ ],
+};
+
+@$core.Deprecated('Use alignmentDataDescriptor instead')
+const AlignmentData_PredefinedAlignment$json = {
+ '1': 'PredefinedAlignment',
+ '2': [
+ {'1': 'PREDEFINED_ALIGNMENT_UNSPECIFIED', '2': 0},
+ {'1': 'BOTTOM_CENTER', '2': 1},
+ {'1': 'BOTTOM_LEFT', '2': 2},
+ {'1': 'BOTTOM_RIGHT', '2': 3},
+ {'1': 'CENTER_ALIGN', '2': 4},
+ {'1': 'CENTER_LEFT', '2': 5},
+ {'1': 'CENTER_RIGHT', '2': 6},
+ {'1': 'TOP_CENTER', '2': 7},
+ {'1': 'TOP_LEFT', '2': 8},
+ {'1': 'TOP_RIGHT', '2': 9},
+ ],
+};
+
+/// Descriptor for `AlignmentData`. Decode as a `google.protobuf.DescriptorProto`.
+final $typed_data.Uint8List alignmentDataDescriptor = $convert.base64Decode(
+ 'Cg1BbGlnbm1lbnREYXRhElEKCnByZWRlZmluZWQYASABKA4yLy5mbHV0dGVyX3NkdWkuQWxpZ2'
+ '5tZW50RGF0YS5QcmVkZWZpbmVkQWxpZ25tZW50SABSCnByZWRlZmluZWQSKwoCeHkYAiABKAsy'
+ 'GS5mbHV0dGVyX3NkdWkuWFlBbGlnbm1lbnRIAFICeHki0wEKE1ByZWRlZmluZWRBbGlnbm1lbn'
+ 'QSJAogUFJFREVGSU5FRF9BTElHTk1FTlRfVU5TUEVDSUZJRUQQABIRCg1CT1RUT01fQ0VOVEVS'
+ 'EAESDwoLQk9UVE9NX0xFRlQQAhIQCgxCT1RUT01fUklHSFQQAxIQCgxDRU5URVJfQUxJR04QBB'
+ 'IPCgtDRU5URVJfTEVGVBAFEhAKDENFTlRFUl9SSUdIVBAGEg4KClRPUF9DRU5URVIQBxIMCghU'
+ 'T1BfTEVGVBAIEg0KCVRPUF9SSUdIVBAJQhAKDmFsaWdubWVudF90eXBl');
+
+@$core.Deprecated('Use xYAlignmentDescriptor instead')
+const XYAlignment$json = {
+ '1': 'XYAlignment',
+ '2': [
+ {'1': 'x', '3': 1, '4': 1, '5': 1, '10': 'x'},
+ {'1': 'y', '3': 2, '4': 1, '5': 1, '10': 'y'},
+ ],
+};
+
+/// Descriptor for `XYAlignment`. Decode as a `google.protobuf.DescriptorProto`.
+final $typed_data.Uint8List xYAlignmentDescriptor = $convert
+ .base64Decode('CgtYWUFsaWdubWVudBIMCgF4GAEgASgBUgF4EgwKAXkYAiABKAFSAXk=');
+
+@$core.Deprecated('Use decorationImageDataDescriptor instead')
+const DecorationImageData$json = {
+ '1': 'DecorationImageData',
+ '2': [
+ {'1': 'src', '3': 1, '4': 1, '5': 9, '10': 'src'},
+ {
+ '1': 'fit',
+ '3': 2,
+ '4': 1,
+ '5': 14,
+ '6': '.flutter_sdui.BoxFitProto',
+ '9': 0,
+ '10': 'fit',
+ '17': true
+ },
+ {
+ '1': 'alignment',
+ '3': 3,
+ '4': 1,
+ '5': 11,
+ '6': '.flutter_sdui.AlignmentData',
+ '9': 1,
+ '10': 'alignment',
+ '17': true
+ },
+ {
+ '1': 'repeat',
+ '3': 4,
+ '4': 1,
+ '5': 14,
+ '6': '.flutter_sdui.ImageRepeatProto',
+ '9': 2,
+ '10': 'repeat',
+ '17': true
+ },
+ {
+ '1': 'match_text_direction',
+ '3': 5,
+ '4': 1,
+ '5': 8,
+ '9': 3,
+ '10': 'matchTextDirection',
+ '17': true
+ },
+ {'1': 'scale', '3': 6, '4': 1, '5': 1, '9': 4, '10': 'scale', '17': true},
+ {
+ '1': 'opacity',
+ '3': 7,
+ '4': 1,
+ '5': 1,
+ '9': 5,
+ '10': 'opacity',
+ '17': true
+ },
+ {
+ '1': 'filter_quality',
+ '3': 8,
+ '4': 1,
+ '5': 14,
+ '6': '.flutter_sdui.FilterQualityProto',
+ '9': 6,
+ '10': 'filterQuality',
+ '17': true
+ },
+ {
+ '1': 'invert_colors',
+ '3': 9,
+ '4': 1,
+ '5': 8,
+ '9': 7,
+ '10': 'invertColors',
+ '17': true
+ },
+ {
+ '1': 'is_anti_alias',
+ '3': 10,
+ '4': 1,
+ '5': 8,
+ '9': 8,
+ '10': 'isAntiAlias',
+ '17': true
+ },
+ ],
+ '8': [
+ {'1': '_fit'},
+ {'1': '_alignment'},
+ {'1': '_repeat'},
+ {'1': '_match_text_direction'},
+ {'1': '_scale'},
+ {'1': '_opacity'},
+ {'1': '_filter_quality'},
+ {'1': '_invert_colors'},
+ {'1': '_is_anti_alias'},
+ ],
+};
+
+/// Descriptor for `DecorationImageData`. Decode as a `google.protobuf.DescriptorProto`.
+final $typed_data.Uint8List decorationImageDataDescriptor = $convert.base64Decode(
+ 'ChNEZWNvcmF0aW9uSW1hZ2VEYXRhEhAKA3NyYxgBIAEoCVIDc3JjEjAKA2ZpdBgCIAEoDjIZLm'
+ 'ZsdXR0ZXJfc2R1aS5Cb3hGaXRQcm90b0gAUgNmaXSIAQESPgoJYWxpZ25tZW50GAMgASgLMhsu'
+ 'Zmx1dHRlcl9zZHVpLkFsaWdubWVudERhdGFIAVIJYWxpZ25tZW50iAEBEjsKBnJlcGVhdBgEIA'
+ 'EoDjIeLmZsdXR0ZXJfc2R1aS5JbWFnZVJlcGVhdFByb3RvSAJSBnJlcGVhdIgBARI1ChRtYXRj'
+ 'aF90ZXh0X2RpcmVjdGlvbhgFIAEoCEgDUhJtYXRjaFRleHREaXJlY3Rpb26IAQESGQoFc2NhbG'
+ 'UYBiABKAFIBFIFc2NhbGWIAQESHQoHb3BhY2l0eRgHIAEoAUgFUgdvcGFjaXR5iAEBEkwKDmZp'
+ 'bHRlcl9xdWFsaXR5GAggASgOMiAuZmx1dHRlcl9zZHVpLkZpbHRlclF1YWxpdHlQcm90b0gGUg'
+ '1maWx0ZXJRdWFsaXR5iAEBEigKDWludmVydF9jb2xvcnMYCSABKAhIB1IMaW52ZXJ0Q29sb3Jz'
+ 'iAEBEicKDWlzX2FudGlfYWxpYXMYCiABKAhICFILaXNBbnRpQWxpYXOIAQFCBgoEX2ZpdEIMCg'
+ 'pfYWxpZ25tZW50QgkKB19yZXBlYXRCFwoVX21hdGNoX3RleHRfZGlyZWN0aW9uQggKBl9zY2Fs'
+ 'ZUIKCghfb3BhY2l0eUIRCg9fZmlsdGVyX3F1YWxpdHlCEAoOX2ludmVydF9jb2xvcnNCEAoOX2'
+ 'lzX2FudGlfYWxpYXM=');
+
+@$core.Deprecated('Use boxConstraintsDataDescriptor instead')
+const BoxConstraintsData$json = {
+ '1': 'BoxConstraintsData',
+ '2': [
+ {
+ '1': 'min_width',
+ '3': 1,
+ '4': 1,
+ '5': 1,
+ '9': 0,
+ '10': 'minWidth',
+ '17': true
+ },
+ {
+ '1': 'max_width',
+ '3': 2,
+ '4': 1,
+ '5': 1,
+ '9': 1,
+ '10': 'maxWidth',
+ '17': true
+ },
+ {
+ '1': 'min_height',
+ '3': 3,
+ '4': 1,
+ '5': 1,
+ '9': 2,
+ '10': 'minHeight',
+ '17': true
+ },
+ {
+ '1': 'max_height',
+ '3': 4,
+ '4': 1,
+ '5': 1,
+ '9': 3,
+ '10': 'maxHeight',
+ '17': true
+ },
+ ],
+ '8': [
+ {'1': '_min_width'},
+ {'1': '_max_width'},
+ {'1': '_min_height'},
+ {'1': '_max_height'},
+ ],
+};
+
+/// Descriptor for `BoxConstraintsData`. Decode as a `google.protobuf.DescriptorProto`.
+final $typed_data.Uint8List boxConstraintsDataDescriptor = $convert.base64Decode(
+ 'ChJCb3hDb25zdHJhaW50c0RhdGESIAoJbWluX3dpZHRoGAEgASgBSABSCG1pbldpZHRoiAEBEi'
+ 'AKCW1heF93aWR0aBgCIAEoAUgBUghtYXhXaWR0aIgBARIiCgptaW5faGVpZ2h0GAMgASgBSAJS'
+ 'CW1pbkhlaWdodIgBARIiCgptYXhfaGVpZ2h0GAQgASgBSANSCW1heEhlaWdodIgBAUIMCgpfbW'
+ 'luX3dpZHRoQgwKCl9tYXhfd2lkdGhCDQoLX21pbl9oZWlnaHRCDQoLX21heF9oZWlnaHQ=');
+
+@$core.Deprecated('Use transformDataDescriptor instead')
+const TransformData$json = {
+ '1': 'TransformData',
+ '2': [
+ {
+ '1': 'type',
+ '3': 1,
+ '4': 1,
+ '5': 14,
+ '6': '.flutter_sdui.TransformData.TransformType',
+ '10': 'type'
+ },
+ {'1': 'matrix_values', '3': 2, '4': 3, '5': 1, '10': 'matrixValues'},
+ {
+ '1': 'translate_x',
+ '3': 3,
+ '4': 1,
+ '5': 1,
+ '9': 0,
+ '10': 'translateX',
+ '17': true
+ },
+ {
+ '1': 'translate_y',
+ '3': 4,
+ '4': 1,
+ '5': 1,
+ '9': 1,
+ '10': 'translateY',
+ '17': true
+ },
+ {
+ '1': 'translate_z',
+ '3': 5,
+ '4': 1,
+ '5': 1,
+ '9': 2,
+ '10': 'translateZ',
+ '17': true
+ },
+ {
+ '1': 'rotation_angle',
+ '3': 6,
+ '4': 1,
+ '5': 1,
+ '9': 3,
+ '10': 'rotationAngle',
+ '17': true
+ },
+ {
+ '1': 'rotation_x',
+ '3': 7,
+ '4': 1,
+ '5': 1,
+ '9': 4,
+ '10': 'rotationX',
+ '17': true
+ },
+ {
+ '1': 'rotation_y',
+ '3': 8,
+ '4': 1,
+ '5': 1,
+ '9': 5,
+ '10': 'rotationY',
+ '17': true
+ },
+ {
+ '1': 'rotation_z',
+ '3': 9,
+ '4': 1,
+ '5': 1,
+ '9': 6,
+ '10': 'rotationZ',
+ '17': true
+ },
+ {
+ '1': 'scale_x',
+ '3': 10,
+ '4': 1,
+ '5': 1,
+ '9': 7,
+ '10': 'scaleX',
+ '17': true
+ },
+ {
+ '1': 'scale_y',
+ '3': 11,
+ '4': 1,
+ '5': 1,
+ '9': 8,
+ '10': 'scaleY',
+ '17': true
+ },
+ {
+ '1': 'scale_z',
+ '3': 12,
+ '4': 1,
+ '5': 1,
+ '9': 9,
+ '10': 'scaleZ',
+ '17': true
+ },
+ ],
+ '4': [TransformData_TransformType$json],
+ '8': [
+ {'1': '_translate_x'},
+ {'1': '_translate_y'},
+ {'1': '_translate_z'},
+ {'1': '_rotation_angle'},
+ {'1': '_rotation_x'},
+ {'1': '_rotation_y'},
+ {'1': '_rotation_z'},
+ {'1': '_scale_x'},
+ {'1': '_scale_y'},
+ {'1': '_scale_z'},
+ ],
+};
+
+@$core.Deprecated('Use transformDataDescriptor instead')
+const TransformData_TransformType$json = {
+ '1': 'TransformType',
+ '2': [
+ {'1': 'TRANSFORM_TYPE_UNSPECIFIED', '2': 0},
+ {'1': 'MATRIX_4X4', '2': 1},
+ {'1': 'TRANSLATE', '2': 2},
+ {'1': 'ROTATE', '2': 3},
+ {'1': 'SCALE', '2': 4},
+ ],
+};
+
+/// Descriptor for `TransformData`. Decode as a `google.protobuf.DescriptorProto`.
+final $typed_data.Uint8List transformDataDescriptor = $convert.base64Decode(
+ 'Cg1UcmFuc2Zvcm1EYXRhEj0KBHR5cGUYASABKA4yKS5mbHV0dGVyX3NkdWkuVHJhbnNmb3JtRG'
+ 'F0YS5UcmFuc2Zvcm1UeXBlUgR0eXBlEiMKDW1hdHJpeF92YWx1ZXMYAiADKAFSDG1hdHJpeFZh'
+ 'bHVlcxIkCgt0cmFuc2xhdGVfeBgDIAEoAUgAUgp0cmFuc2xhdGVYiAEBEiQKC3RyYW5zbGF0ZV'
+ '95GAQgASgBSAFSCnRyYW5zbGF0ZVmIAQESJAoLdHJhbnNsYXRlX3oYBSABKAFIAlIKdHJhbnNs'
+ 'YXRlWogBARIqCg5yb3RhdGlvbl9hbmdsZRgGIAEoAUgDUg1yb3RhdGlvbkFuZ2xliAEBEiIKCn'
+ 'JvdGF0aW9uX3gYByABKAFIBFIJcm90YXRpb25YiAEBEiIKCnJvdGF0aW9uX3kYCCABKAFIBVIJ'
+ 'cm90YXRpb25ZiAEBEiIKCnJvdGF0aW9uX3oYCSABKAFIBlIJcm90YXRpb25aiAEBEhwKB3NjYW'
+ 'xlX3gYCiABKAFIB1IGc2NhbGVYiAEBEhwKB3NjYWxlX3kYCyABKAFICFIGc2NhbGVZiAEBEhwK'
+ 'B3NjYWxlX3oYDCABKAFICVIGc2NhbGVaiAEBImUKDVRyYW5zZm9ybVR5cGUSHgoaVFJBTlNGT1'
+ 'JNX1RZUEVfVU5TUEVDSUZJRUQQABIOCgpNQVRSSVhfNFg0EAESDQoJVFJBTlNMQVRFEAISCgoG'
+ 'Uk9UQVRFEAMSCQoFU0NBTEUQBEIOCgxfdHJhbnNsYXRlX3hCDgoMX3RyYW5zbGF0ZV95Qg4KDF'
+ '90cmFuc2xhdGVfekIRCg9fcm90YXRpb25fYW5nbGVCDQoLX3JvdGF0aW9uX3hCDQoLX3JvdGF0'
+ 'aW9uX3lCDQoLX3JvdGF0aW9uX3pCCgoIX3NjYWxlX3hCCgoIX3NjYWxlX3lCCgoIX3NjYWxlX3'
+ 'o=');
+
+@$core.Deprecated('Use rectDataDescriptor instead')
+const RectData$json = {
+ '1': 'RectData',
+ '2': [
+ {'1': 'left', '3': 1, '4': 1, '5': 1, '10': 'left'},
+ {'1': 'top', '3': 2, '4': 1, '5': 1, '10': 'top'},
+ {'1': 'right', '3': 3, '4': 1, '5': 1, '10': 'right'},
+ {'1': 'bottom', '3': 4, '4': 1, '5': 1, '10': 'bottom'},
+ ],
+};
+
+/// Descriptor for `RectData`. Decode as a `google.protobuf.DescriptorProto`.
+final $typed_data.Uint8List rectDataDescriptor = $convert.base64Decode(
+ 'CghSZWN0RGF0YRISCgRsZWZ0GAEgASgBUgRsZWZ0EhAKA3RvcBgCIAEoAVIDdG9wEhQKBXJpZ2'
+ 'h0GAMgASgBUgVyaWdodBIWCgZib3R0b20YBCABKAFSBmJvdHRvbQ==');
+
+@$core.Deprecated('Use shadowDataDescriptor instead')
+const ShadowData$json = {
+ '1': 'ShadowData',
+ '2': [
+ {
+ '1': 'color',
+ '3': 1,
+ '4': 1,
+ '5': 11,
+ '6': '.flutter_sdui.ColorData',
+ '10': 'color'
+ },
+ {'1': 'offset_x', '3': 2, '4': 1, '5': 1, '10': 'offsetX'},
+ {'1': 'offset_y', '3': 3, '4': 1, '5': 1, '10': 'offsetY'},
+ {'1': 'blur_radius', '3': 4, '4': 1, '5': 1, '10': 'blurRadius'},
+ ],
+};
+
+/// Descriptor for `ShadowData`. Decode as a `google.protobuf.DescriptorProto`.
+final $typed_data.Uint8List shadowDataDescriptor = $convert.base64Decode(
+ 'CgpTaGFkb3dEYXRhEi0KBWNvbG9yGAEgASgLMhcuZmx1dHRlcl9zZHVpLkNvbG9yRGF0YVIFY2'
+ '9sb3ISGQoIb2Zmc2V0X3gYAiABKAFSB29mZnNldFgSGQoIb2Zmc2V0X3kYAyABKAFSB29mZnNl'
+ 'dFkSHwoLYmx1cl9yYWRpdXMYBCABKAFSCmJsdXJSYWRpdXM=');
+
+@$core.Deprecated('Use sduiRequestDescriptor instead')
+const SduiRequest$json = {
+ '1': 'SduiRequest',
+ '2': [
+ {'1': 'screen_id', '3': 1, '4': 1, '5': 9, '10': 'screenId'},
+ ],
+};
+
+/// Descriptor for `SduiRequest`. Decode as a `google.protobuf.DescriptorProto`.
+final $typed_data.Uint8List sduiRequestDescriptor = $convert
+ .base64Decode('CgtTZHVpUmVxdWVzdBIbCglzY3JlZW5faWQYASABKAlSCHNjcmVlbklk');
diff --git a/lib/src/parser/sdui_proto_parser.dart b/lib/src/parser/sdui_proto_parser.dart
new file mode 100644
index 0000000..9411281
--- /dev/null
+++ b/lib/src/parser/sdui_proto_parser.dart
@@ -0,0 +1,892 @@
+// ignore_for_file: dead_null_aware_expression
+import 'dart:developer';
+
+import 'package:flutter/material.dart';
+import 'package:flutter_sdui/src/generated/sdui.pb.dart';
+import 'package:flutter_sdui/src/widgets/sdui_column.dart';
+import 'package:flutter_sdui/src/widgets/sdui_container.dart';
+import 'package:flutter_sdui/src/widgets/sdui_icon.dart';
+import 'package:flutter_sdui/src/widgets/sdui_image.dart';
+import 'package:flutter_sdui/src/widgets/sdui_row.dart';
+import 'package:flutter_sdui/src/widgets/sdui_scaffold.dart';
+import 'package:flutter_sdui/src/widgets/sdui_sized_box.dart';
+import 'package:flutter_sdui/src/widgets/sdui_spacer.dart';
+import 'package:flutter_sdui/src/widgets/sdui_text.dart';
+import 'package:flutter_sdui/src/widgets/sdui_widget.dart';
+
+// Parser for Protobuf definitions for SDUI
+class SduiParser {
+ // Parse method for JSON data
+ static SduiWidget parseJSON(Map data) {
+ // TODO: Implement JSON parsing logic
+ throw UnimplementedError('JSON parser not fully implemented');
+ }
+
+ // Parse from Protobuf data model
+ static SduiWidget parseProto(SduiWidgetData data) {
+ switch (data.type) {
+ case WidgetType.COLUMN:
+ return _parseProtoColumn(data);
+ case WidgetType.ROW:
+ return _parseProtoRow(data);
+ case WidgetType.TEXT:
+ return _parseProtoText(data);
+ case WidgetType.IMAGE:
+ return _parseProtoImage(data);
+ case WidgetType.SIZED_BOX:
+ return _parseProtoSizedBox(data);
+ case WidgetType.CONTAINER:
+ return _parseProtoContainer(data);
+ case WidgetType.SCAFFOLD:
+ return _parseProtoScaffold(data);
+ case WidgetType.SPACER:
+ return _parseProtoSpacer(data);
+ case WidgetType.ICON:
+ return _parseProtoIcon(data);
+ default:
+ log('Unsupported widget type: ${data.type}');
+ return SduiContainer();
+ }
+ }
+
+ // Helper methods to parse specific widget types from protobuf
+ static SduiColumn _parseProtoColumn(SduiWidgetData data) {
+ List children =
+ data.children.map((child) => SduiParser.parseProto(child)).toList();
+
+ return SduiColumn(
+ children: children,
+ mainAxisAlignment: _parseProtoMainAxisAlignment(data.mainAxisAlignment),
+ crossAxisAlignment:
+ _parseProtoCrossAxisAlignment(data.crossAxisAlignment),
+ mainAxisSize: _parseProtoMainAxisSize(data.mainAxisSize),
+ textDirection: _parseProtoTextDirection(data.textDirection),
+ verticalDirection: _parseProtoVerticalDirection(data.verticalDirection),
+ textBaseline: _parseProtoTextBaseline(data.textBaseline),
+ );
+ }
+
+ static SduiRow _parseProtoRow(SduiWidgetData data) {
+ List children =
+ data.children.map((child) => SduiParser.parseProto(child)).toList();
+
+ return SduiRow(
+ children: children,
+ mainAxisAlignment: _parseProtoMainAxisAlignment(data.mainAxisAlignment),
+ crossAxisAlignment:
+ _parseProtoCrossAxisAlignment(data.crossAxisAlignment),
+ mainAxisSize: _parseProtoMainAxisSize(data.mainAxisSize),
+ textDirection: _parseProtoTextDirection(data.textDirection),
+ verticalDirection: _parseProtoVerticalDirection(data.verticalDirection),
+ textBaseline: _parseProtoTextBaseline(data.textBaseline),
+ );
+ }
+
+ static SduiText _parseProtoText(SduiWidgetData data) {
+ String text = data.stringAttributes['text'] ?? '';
+ TextStyle? style =
+ data.hasTextStyle() ? _parseProtoTextStyle(data.textStyle) : null;
+
+ // Parse additional text properties
+ TextAlign? textAlign = _parseProtoTextAlign(data.textAlign);
+ TextOverflow? overflow = _parseProtoTextOverflow(data.overflow);
+ int? maxLines = data.hasMaxLines() ? data.maxLines : null;
+ bool? softWrap = data.hasSoftWrap() ? data.softWrap : null;
+ double? letterSpacing = data.hasLetterSpacing() ? data.letterSpacing : null;
+ double? wordSpacing = data.hasWordSpacing() ? data.wordSpacing : null;
+ double? height = data.hasHeight() ? data.height : null;
+ String? fontFamily = data.hasFontFamily() ? data.fontFamily : null;
+ TextDirection? textDirection = _parseProtoTextDirection(data.textDirection);
+
+ return SduiText(
+ text,
+ style: style,
+ textAlign: textAlign,
+ overflow: overflow,
+ maxLines: maxLines,
+ softWrap: softWrap,
+ letterSpacing: letterSpacing,
+ wordSpacing: wordSpacing,
+ height: height,
+ fontFamily: fontFamily,
+ textDirection: textDirection,
+ );
+ }
+
+ static SduiImage _parseProtoImage(SduiWidgetData data) {
+ String src = data.stringAttributes['src'] ?? '';
+ double? width = data.doubleAttributes['width'];
+ double? height = data.doubleAttributes['height'];
+ BoxFit? fit = _parseProtoBoxFit(data.stringAttributes['fit']);
+
+ // Parse additional image properties
+ Alignment? alignment = _parseProtoAlignment(data.alignment);
+ ImageRepeat? repeat = _parseProtoImageRepeat(data.repeat);
+ Color? color = data.hasColor() ? _parseProtoColor(data.color) : null;
+ BlendMode? colorBlendMode = _parseProtoBlendMode(data.colorBlendMode);
+ Rect? centerSlice =
+ data.hasCenterSlice() ? _parseProtoRect(data.centerSlice) : null;
+ bool? matchTextDirection =
+ data.hasMatchTextDirection() ? data.matchTextDirection : null;
+ bool? gaplessPlayback =
+ data.hasGaplessPlayback() ? data.gaplessPlayback : null;
+ FilterQuality? filterQuality = _parseProtoFilterQuality(data.filterQuality);
+ int? cacheWidth = data.hasCacheWidth() ? data.cacheWidth : null;
+ int? cacheHeight = data.hasCacheHeight() ? data.cacheHeight : null;
+ double? scale = data.hasScale() ? data.scale : null;
+ String? semanticLabel = data.hasSemanticLabel() ? data.semanticLabel : null;
+
+ // Parse error and loading widgets
+ Widget? errorWidget = data.hasErrorWidget()
+ ? SduiParser.parseProto(data.errorWidget).toFlutterWidget()
+ : null;
+ Widget? loadingWidget = data.hasLoadingWidget()
+ ? SduiParser.parseProto(data.loadingWidget).toFlutterWidget()
+ : null;
+
+ return SduiImage(
+ src,
+ width: width,
+ height: height,
+ fit: fit,
+ alignment: alignment,
+ repeat: repeat,
+ color: color,
+ colorBlendMode: colorBlendMode,
+ centerSlice: centerSlice,
+ matchTextDirection: matchTextDirection,
+ gaplessPlayback: gaplessPlayback,
+ filterQuality: filterQuality,
+ cacheWidth: cacheWidth,
+ cacheHeight: cacheHeight,
+ scale: scale,
+ semanticLabel: semanticLabel,
+ errorWidget: errorWidget,
+ loadingWidget: loadingWidget,
+ );
+ }
+
+ static SduiSizedBox _parseProtoSizedBox(SduiWidgetData data) {
+ double? width = data.doubleAttributes['width'];
+ double? height = data.doubleAttributes['height'];
+ SduiWidget? child =
+ data.hasChild() ? SduiParser.parseProto(data.child) : null;
+ return SduiSizedBox(width: width, height: height, child: child);
+ }
+
+ static SduiContainer _parseProtoContainer(SduiWidgetData data) {
+ SduiWidget? child =
+ data.hasChild() ? SduiParser.parseProto(data.child) : null;
+ EdgeInsets? padding =
+ data.hasPadding() ? _parseProtoEdgeInsets(data.padding) : null;
+ EdgeInsets? margin =
+ data.hasMargin() ? _parseProtoEdgeInsets(data.margin) : null;
+ BoxDecoration? decoration = data.hasBoxDecoration()
+ ? _parseProtoBoxDecoration(data.boxDecoration)
+ : null;
+ double? width = data.doubleAttributes['width'];
+ double? height = data.doubleAttributes['height'];
+ Color? color = data.hasColor() ? _parseProtoColor(data.color) : null;
+
+ // Parse additional container properties
+ Alignment? alignment = _parseProtoAlignment(data.alignment);
+ BoxConstraints? constraints = data.hasConstraints()
+ ? _parseProtoBoxConstraints(data.constraints)
+ : null;
+ Matrix4? transform =
+ data.hasTransform() ? _parseProtoTransform(data.transform) : null;
+ AlignmentGeometry? transformAlignment = data.hasTransformAlignment()
+ ? _parseProtoAlignmentGeometry(data.transformAlignment)
+ : null;
+ Clip? clipBehavior = _parseProtoClip(data.clipBehavior);
+
+ return SduiContainer(
+ child: child,
+ padding: padding,
+ margin: margin,
+ decoration: decoration,
+ width: width,
+ height: height,
+ color: color,
+ alignment: alignment,
+ constraints: constraints,
+ transform: transform,
+ transformAlignment: transformAlignment,
+ clipBehavior: clipBehavior,
+ );
+ }
+
+ static SduiScaffold _parseProtoScaffold(SduiWidgetData data) {
+ SduiWidget? appBar =
+ data.hasAppBar() ? SduiParser.parseProto(data.appBar) : null;
+ SduiWidget? body = data.hasBody() ? SduiParser.parseProto(data.body) : null;
+ SduiWidget? floatingActionButton = data.hasFloatingActionButton()
+ ? SduiParser.parseProto(data.floatingActionButton)
+ : null;
+ Color? backgroundColor = data.hasBackgroundColor()
+ ? _parseProtoColor(data.backgroundColor)
+ : null;
+
+ // Parse additional scaffold properties
+ SduiWidget? bottomNavigationBar = data.hasBottomNavigationBar()
+ ? SduiParser.parseProto(data.bottomNavigationBar)
+ : null;
+ SduiWidget? drawer =
+ data.hasDrawer() ? SduiParser.parseProto(data.drawer) : null;
+ SduiWidget? endDrawer =
+ data.hasEndDrawer() ? SduiParser.parseProto(data.endDrawer) : null;
+ SduiWidget? bottomSheet =
+ data.hasBottomSheet() ? SduiParser.parseProto(data.bottomSheet) : null;
+ bool? resizeToAvoidBottomInset = data.hasResizeToAvoidBottomInset()
+ ? data.resizeToAvoidBottomInset
+ : null;
+ bool? primary = data.hasPrimary() ? data.primary : null;
+ FloatingActionButtonLocation? fabLocation =
+ data.hasFloatingActionButtonLocation()
+ ? _parseProtoFabLocation(data.floatingActionButtonLocation)
+ : null;
+ bool? extendBody = data.hasExtendBody() ? data.extendBody : null;
+ bool? extendBodyBehindAppBar =
+ data.hasExtendBodyBehindAppBar() ? data.extendBodyBehindAppBar : null;
+ Color? drawerScrimColor = data.hasDrawerScrimColor()
+ ? _parseProtoColor(data.drawerScrimColor)
+ : null;
+ double? drawerEdgeDragWidth =
+ data.hasDrawerEdgeDragWidth() ? data.drawerEdgeDragWidth : null;
+ bool? drawerEnableOpenDragGesture = data.hasDrawerEnableOpenDragGesture()
+ ? data.drawerEnableOpenDragGesture
+ : null;
+ bool? endDrawerEnableOpenDragGesture =
+ data.hasEndDrawerEnableOpenDragGesture()
+ ? data.endDrawerEnableOpenDragGesture
+ : null;
+
+ return SduiScaffold(
+ appBar: appBar,
+ body: body,
+ floatingActionButton: floatingActionButton,
+ backgroundColor: backgroundColor,
+ bottomNavigationBar: bottomNavigationBar,
+ drawer: drawer,
+ endDrawer: endDrawer,
+ bottomSheet: bottomSheet,
+ resizeToAvoidBottomInset: resizeToAvoidBottomInset,
+ primary: primary,
+ floatingActionButtonLocation: fabLocation,
+ extendBody: extendBody,
+ extendBodyBehindAppBar: extendBodyBehindAppBar,
+ drawerScrimColor: drawerScrimColor,
+ drawerEdgeDragWidth: drawerEdgeDragWidth,
+ drawerEnableOpenDragGesture: drawerEnableOpenDragGesture,
+ endDrawerEnableOpenDragGesture: endDrawerEnableOpenDragGesture,
+ );
+ }
+
+ static SduiSpacer _parseProtoSpacer(SduiWidgetData data) {
+ int flex = data.intAttributes['flex'] ?? 1;
+ return SduiSpacer(flex: flex);
+ }
+
+ static SduiIcon _parseProtoIcon(SduiWidgetData data) {
+ IconData? iconData = data.hasIcon() ? _parseProtoIconData(data.icon) : null;
+ double? size = data.icon.size;
+ Color? color =
+ data.icon.hasColor() ? _parseProtoColor(data.icon.color) : null;
+
+ // Parse additional icon properties
+ String? semanticLabel = data.hasSemanticLabel() ? data.semanticLabel : null;
+ TextDirection? textDirection = _parseProtoTextDirection(data.textDirection);
+ double? opacity = data.hasOpacity() ? data.opacity : null;
+ bool? applyTextScaling =
+ data.hasApplyTextScaling() ? data.applyTextScaling : null;
+ List? shadows = data.shadows.isNotEmpty
+ ? data.shadows.map((s) => _parseProtoShadow(s)).toList()
+ : null;
+
+ return SduiIcon(
+ icon: iconData,
+ size: size,
+ color: color,
+ semanticLabel: semanticLabel,
+ textDirection: textDirection,
+ opacity: opacity,
+ applyTextScaling: applyTextScaling,
+ shadows: shadows,
+ );
+ }
+
+ // Helper methods for parsing protobuf attribute types
+
+ static BoxFit? _parseProtoBoxFit(String? value) {
+ if (value == null) return null;
+ switch (value.toLowerCase()) {
+ case 'fill':
+ return BoxFit.fill;
+ case 'contain':
+ return BoxFit.contain;
+ case 'cover':
+ return BoxFit.cover;
+ case 'fitwidth':
+ return BoxFit.fitWidth;
+ case 'fitheight':
+ return BoxFit.fitHeight;
+ case 'none':
+ return BoxFit.none;
+ case 'scaledown':
+ return BoxFit.scaleDown;
+ default:
+ return null;
+ }
+ }
+
+ static TextStyle? _parseProtoTextStyle(TextStyleData data) {
+ Color? color = data.hasColor() ? _parseProtoColor(data.color) : null;
+ double? fontSize = data.fontSize;
+ FontWeight? fontWeight = _parseProtoFontWeight(data.fontWeight);
+ TextDecoration? decoration = _parseProtoTextDecoration(data.decoration);
+ double? letterSpacing = data.hasLetterSpacing() ? data.letterSpacing : null;
+ double? wordSpacing = data.hasWordSpacing() ? data.wordSpacing : null;
+ double? height = data.hasHeight() ? data.height : null;
+ String? fontFamily = data.hasFontFamily() ? data.fontFamily : null;
+ FontStyle? fontStyle = _parseProtoFontStyle(data.fontStyle);
+
+ return TextStyle(
+ color: color,
+ fontSize: fontSize,
+ fontWeight: fontWeight,
+ decoration: decoration,
+ letterSpacing: letterSpacing,
+ wordSpacing: wordSpacing,
+ height: height,
+ fontFamily: fontFamily,
+ fontStyle: fontStyle,
+ );
+ }
+
+ static FontWeight? _parseProtoFontWeight(String? value) {
+ if (value == null) return null;
+ switch (value.toLowerCase()) {
+ case 'bold':
+ return FontWeight.bold;
+ case 'normal':
+ return FontWeight.normal;
+ case 'w100':
+ return FontWeight.w100;
+ case 'w200':
+ return FontWeight.w200;
+ case 'w300':
+ return FontWeight.w300;
+ case 'w400':
+ return FontWeight.w400;
+ case 'w500':
+ return FontWeight.w500;
+ case 'w600':
+ return FontWeight.w600;
+ case 'w700':
+ return FontWeight.w700;
+ case 'w800':
+ return FontWeight.w800;
+ case 'w900':
+ return FontWeight.w900;
+ default:
+ return null;
+ }
+ }
+
+ static EdgeInsets? _parseProtoEdgeInsets(EdgeInsetsData data) {
+ if (data.hasAll()) {
+ return EdgeInsets.all(data.all);
+ }
+
+ return EdgeInsets.only(
+ left: data.left,
+ top: data.top,
+ right: data.right,
+ bottom: data.bottom,
+ );
+ }
+
+ static Color? _parseProtoColor(ColorData data) {
+ return Color.fromARGB(
+ data.alpha,
+ data.red,
+ data.green,
+ data.blue,
+ );
+ }
+
+ static IconData? _parseProtoIconData(IconDataMessage data) {
+ if (data.hasName()) {
+ // Map common icon names to Material icons (expand as needed)
+ switch (data.name.toLowerCase()) {
+ case 'settings':
+ return Icons.settings;
+ case 'home':
+ return Icons.home;
+ case 'search':
+ return Icons.search;
+ case 'add':
+ return Icons.add;
+ case 'edit':
+ return Icons.edit;
+ default:
+ break;
+ }
+ }
+
+ // Fallback to codePoint if available
+ if (data.hasCodePoint()) {
+ return IconData(
+ data.codePoint,
+ fontFamily: data.fontFamily.isEmpty ? 'MaterialIcons' : data.fontFamily,
+ );
+ }
+
+ return null;
+ }
+
+ static BoxDecoration? _parseProtoBoxDecoration(BoxDecorationData data) {
+ return BoxDecoration(
+ color: data.hasColor() ? _parseProtoColor(data.color) : null,
+ borderRadius: data.hasBorderRadius()
+ ? _parseProtoBorderRadius(data.borderRadius)
+ : null,
+ // Add more properties as needed
+ );
+ }
+
+ static BorderRadius? _parseProtoBorderRadius(BorderRadiusData data) {
+ if (data.hasAll()) {
+ return BorderRadius.all(Radius.circular(data.all));
+ } else if (data.hasTopLeft() &&
+ data.hasTopRight() &&
+ data.hasBottomLeft() &&
+ data.hasBottomRight()) {
+ return BorderRadius.only(
+ topLeft: Radius.circular(data.topLeft),
+ topRight: Radius.circular(data.topRight),
+ bottomLeft: Radius.circular(data.bottomLeft),
+ bottomRight: Radius.circular(data.bottomRight),
+ );
+ } else if (data.hasTopLeft() ||
+ data.hasTopRight() ||
+ data.hasBottomLeft() ||
+ data.hasBottomRight()) {
+ return BorderRadius.only(
+ topLeft:
+ data.hasTopLeft() ? Radius.circular(data.topLeft) : Radius.zero,
+ topRight:
+ data.hasTopRight() ? Radius.circular(data.topRight) : Radius.zero,
+ bottomLeft: data.hasBottomLeft()
+ ? Radius.circular(data.bottomLeft)
+ : Radius.zero,
+ bottomRight: data.hasBottomRight()
+ ? Radius.circular(data.bottomRight)
+ : Radius.zero,
+ );
+ }
+
+ return BorderRadius.circular(8.0); // Example default value
+ }
+
+ // New helper methods for parsing new property types
+
+ static MainAxisAlignment? _parseProtoMainAxisAlignment(
+ MainAxisAlignmentProto proto) {
+ switch (proto) {
+ case MainAxisAlignmentProto.MAIN_AXIS_START:
+ return MainAxisAlignment.start;
+ case MainAxisAlignmentProto.MAIN_AXIS_END:
+ return MainAxisAlignment.end;
+ case MainAxisAlignmentProto.MAIN_AXIS_CENTER:
+ return MainAxisAlignment.center;
+ case MainAxisAlignmentProto.SPACE_BETWEEN:
+ return MainAxisAlignment.spaceBetween;
+ case MainAxisAlignmentProto.SPACE_AROUND:
+ return MainAxisAlignment.spaceAround;
+ case MainAxisAlignmentProto.SPACE_EVENLY:
+ return MainAxisAlignment.spaceEvenly;
+ default:
+ return null;
+ }
+ }
+
+ static CrossAxisAlignment? _parseProtoCrossAxisAlignment(
+ CrossAxisAlignmentProto proto) {
+ switch (proto) {
+ case CrossAxisAlignmentProto.CROSS_AXIS_START:
+ return CrossAxisAlignment.start;
+ case CrossAxisAlignmentProto.CROSS_AXIS_END:
+ return CrossAxisAlignment.end;
+ case CrossAxisAlignmentProto.CROSS_AXIS_CENTER:
+ return CrossAxisAlignment.center;
+ case CrossAxisAlignmentProto.STRETCH:
+ return CrossAxisAlignment.stretch;
+ case CrossAxisAlignmentProto.BASELINE:
+ return CrossAxisAlignment.baseline;
+ default:
+ return null;
+ }
+ }
+
+ static MainAxisSize? _parseProtoMainAxisSize(MainAxisSizeProto proto) {
+ switch (proto) {
+ case MainAxisSizeProto.MIN:
+ return MainAxisSize.min;
+ case MainAxisSizeProto.MAX:
+ return MainAxisSize.max;
+ default:
+ return null;
+ }
+ }
+
+ static TextDirection? _parseProtoTextDirection(TextDirectionProto proto) {
+ switch (proto) {
+ case TextDirectionProto.LTR:
+ return TextDirection.ltr;
+ case TextDirectionProto.RTL:
+ return TextDirection.rtl;
+ default:
+ return null;
+ }
+ }
+
+ static VerticalDirection? _parseProtoVerticalDirection(
+ VerticalDirectionProto proto) {
+ switch (proto) {
+ case VerticalDirectionProto.UP:
+ return VerticalDirection.up;
+ case VerticalDirectionProto.DOWN:
+ return VerticalDirection.down;
+ default:
+ return null;
+ }
+ }
+
+ static TextBaseline? _parseProtoTextBaseline(TextBaselineProto proto) {
+ switch (proto) {
+ case TextBaselineProto.ALPHABETIC:
+ return TextBaseline.alphabetic;
+ case TextBaselineProto.IDEOGRAPHIC:
+ return TextBaseline.ideographic;
+ default:
+ return null;
+ }
+ }
+
+ static Alignment? _parseProtoAlignment(AlignmentData? data) {
+ if (data == null) return null;
+
+ if (data.hasXy()) {
+ return Alignment(data.xy.x, data.xy.y);
+ }
+
+ switch (data.predefined) {
+ case AlignmentData_PredefinedAlignment.BOTTOM_CENTER:
+ return Alignment.bottomCenter;
+ case AlignmentData_PredefinedAlignment.BOTTOM_LEFT:
+ return Alignment.bottomLeft;
+ case AlignmentData_PredefinedAlignment.BOTTOM_RIGHT:
+ return Alignment.bottomRight;
+ case AlignmentData_PredefinedAlignment.CENTER_ALIGN:
+ return Alignment.center;
+ case AlignmentData_PredefinedAlignment.CENTER_LEFT:
+ return Alignment.centerLeft;
+ case AlignmentData_PredefinedAlignment.CENTER_RIGHT:
+ return Alignment.centerRight;
+ case AlignmentData_PredefinedAlignment.TOP_CENTER:
+ return Alignment.topCenter;
+ case AlignmentData_PredefinedAlignment.TOP_LEFT:
+ return Alignment.topLeft;
+ case AlignmentData_PredefinedAlignment.TOP_RIGHT:
+ return Alignment.topRight;
+ default:
+ return Alignment.center;
+ }
+ }
+
+ static AlignmentGeometry? _parseProtoAlignmentGeometry(AlignmentData? data) {
+ // For now, just use the same alignment parsing
+ return _parseProtoAlignment(data);
+ }
+
+ static BoxConstraints? _parseProtoBoxConstraints(BoxConstraintsData data) {
+ return BoxConstraints(
+ minWidth: data.hasMinWidth() ? data.minWidth : 0.0,
+ maxWidth: data.hasMaxWidth() ? data.maxWidth : double.infinity,
+ minHeight: data.hasMinHeight() ? data.minHeight : 0.0,
+ maxHeight: data.hasMaxHeight() ? data.maxHeight : double.infinity,
+ );
+ }
+
+ static Matrix4? _parseProtoTransform(TransformData data) {
+ switch (data.type) {
+ case TransformData_TransformType.MATRIX_4X4:
+ if (data.matrixValues.length == 16) {
+ return Matrix4(
+ data.matrixValues[0],
+ data.matrixValues[1],
+ data.matrixValues[2],
+ data.matrixValues[3],
+ data.matrixValues[4],
+ data.matrixValues[5],
+ data.matrixValues[6],
+ data.matrixValues[7],
+ data.matrixValues[8],
+ data.matrixValues[9],
+ data.matrixValues[10],
+ data.matrixValues[11],
+ data.matrixValues[12],
+ data.matrixValues[13],
+ data.matrixValues[14],
+ data.matrixValues[15],
+ );
+ }
+ return null;
+ case TransformData_TransformType.TRANSLATE:
+ return Matrix4.translationValues(
+ data.translateX ?? 0.0,
+ data.translateY ?? 0.0,
+ data.translateZ ?? 0.0,
+ );
+ case TransformData_TransformType.ROTATE:
+ if (data.hasRotationAngle()) {
+ return Matrix4.rotationZ(data.rotationAngle);
+ }
+ return Matrix4.identity();
+ case TransformData_TransformType.SCALE:
+ return Matrix4.diagonal3Values(
+ data.scaleX ?? 1.0,
+ data.scaleY ?? 1.0,
+ data.scaleZ ?? 1.0,
+ );
+ default:
+ return null;
+ }
+ }
+
+ static Clip? _parseProtoClip(ClipProto proto) {
+ switch (proto) {
+ case ClipProto.CLIP_NONE:
+ return Clip.none;
+ case ClipProto.HARD_EDGE:
+ return Clip.hardEdge;
+ case ClipProto.ANTI_ALIAS:
+ return Clip.antiAlias;
+ case ClipProto.ANTI_ALIAS_WITH_SAVE_LAYER:
+ return Clip.antiAliasWithSaveLayer;
+ default:
+ return null;
+ }
+ }
+
+ static TextAlign? _parseProtoTextAlign(TextAlignProto proto) {
+ switch (proto) {
+ case TextAlignProto.LEFT:
+ return TextAlign.left;
+ case TextAlignProto.RIGHT:
+ return TextAlign.right;
+ case TextAlignProto.TEXT_ALIGN_CENTER:
+ return TextAlign.center;
+ case TextAlignProto.JUSTIFY:
+ return TextAlign.justify;
+ case TextAlignProto.TEXT_ALIGN_START:
+ return TextAlign.start;
+ case TextAlignProto.TEXT_ALIGN_END:
+ return TextAlign.end;
+ default:
+ return null;
+ }
+ }
+
+ static TextOverflow? _parseProtoTextOverflow(TextOverflowProto proto) {
+ switch (proto) {
+ case TextOverflowProto.CLIP:
+ return TextOverflow.clip;
+ case TextOverflowProto.ELLIPSIS:
+ return TextOverflow.ellipsis;
+ case TextOverflowProto.FADE:
+ return TextOverflow.fade;
+ case TextOverflowProto.VISIBLE:
+ return TextOverflow.visible;
+ default:
+ return null;
+ }
+ }
+
+ static TextDecoration? _parseProtoTextDecoration(TextDecorationProto proto) {
+ switch (proto) {
+ case TextDecorationProto.TEXT_DECORATION_NONE:
+ return TextDecoration.none;
+ case TextDecorationProto.UNDERLINE:
+ return TextDecoration.underline;
+ case TextDecorationProto.OVERLINE:
+ return TextDecoration.overline;
+ case TextDecorationProto.LINE_THROUGH:
+ return TextDecoration.lineThrough;
+ default:
+ return null;
+ }
+ }
+
+ static FontStyle? _parseProtoFontStyle(FontStyleProto proto) {
+ switch (proto) {
+ case FontStyleProto.NORMAL:
+ return FontStyle.normal;
+ case FontStyleProto.ITALIC:
+ return FontStyle.italic;
+ default:
+ return null;
+ }
+ }
+
+ static Rect? _parseProtoRect(RectData data) {
+ return Rect.fromLTRB(
+ data.left,
+ data.top,
+ data.right,
+ data.bottom,
+ );
+ }
+
+ static ImageRepeat? _parseProtoImageRepeat(ImageRepeatProto proto) {
+ switch (proto) {
+ case ImageRepeatProto.REPEAT:
+ return ImageRepeat.repeat;
+ case ImageRepeatProto.REPEAT_X:
+ return ImageRepeat.repeatX;
+ case ImageRepeatProto.REPEAT_Y:
+ return ImageRepeat.repeatY;
+ case ImageRepeatProto.NO_REPEAT:
+ return ImageRepeat.noRepeat;
+ default:
+ return null;
+ }
+ }
+
+ static BlendMode? _parseProtoBlendMode(BlendModeProto proto) {
+ switch (proto) {
+ case BlendModeProto.CLEAR:
+ return BlendMode.clear;
+ case BlendModeProto.SRC:
+ return BlendMode.src;
+ case BlendModeProto.DST:
+ return BlendMode.dst;
+ case BlendModeProto.SRC_OVER:
+ return BlendMode.srcOver;
+ case BlendModeProto.DST_OVER:
+ return BlendMode.dstOver;
+ case BlendModeProto.SRC_IN:
+ return BlendMode.srcIn;
+ case BlendModeProto.DST_IN:
+ return BlendMode.dstIn;
+ case BlendModeProto.SRC_OUT:
+ return BlendMode.srcOut;
+ case BlendModeProto.DST_OUT:
+ return BlendMode.dstOut;
+ case BlendModeProto.SRC_ATOP:
+ return BlendMode.srcATop;
+ case BlendModeProto.DST_ATOP:
+ return BlendMode.dstATop;
+ case BlendModeProto.XOR:
+ return BlendMode.xor;
+ case BlendModeProto.PLUS:
+ return BlendMode.plus;
+ case BlendModeProto.MODULATE:
+ return BlendMode.modulate;
+ case BlendModeProto.SCREEN:
+ return BlendMode.screen;
+ case BlendModeProto.OVERLAY:
+ return BlendMode.overlay;
+ case BlendModeProto.DARKEN:
+ return BlendMode.darken;
+ case BlendModeProto.LIGHTEN:
+ return BlendMode.lighten;
+ case BlendModeProto.COLOR_DODGE:
+ return BlendMode.colorDodge;
+ case BlendModeProto.COLOR_BURN:
+ return BlendMode.colorBurn;
+ case BlendModeProto.HARD_LIGHT:
+ return BlendMode.hardLight;
+ case BlendModeProto.SOFT_LIGHT:
+ return BlendMode.softLight;
+ case BlendModeProto.DIFFERENCE:
+ return BlendMode.difference;
+ case BlendModeProto.EXCLUSION:
+ return BlendMode.exclusion;
+ case BlendModeProto.MULTIPLY:
+ return BlendMode.multiply;
+ case BlendModeProto.HUE:
+ return BlendMode.hue;
+ case BlendModeProto.SATURATION:
+ return BlendMode.saturation;
+ case BlendModeProto.COLOR:
+ return BlendMode.color;
+ case BlendModeProto.LUMINOSITY:
+ return BlendMode.luminosity;
+ default:
+ return null;
+ }
+ }
+
+ static FilterQuality? _parseProtoFilterQuality(FilterQualityProto proto) {
+ switch (proto) {
+ case FilterQualityProto.NONE_FQ:
+ return FilterQuality.none;
+ case FilterQualityProto.LOW:
+ return FilterQuality.low;
+ case FilterQualityProto.MEDIUM:
+ return FilterQuality.medium;
+ case FilterQualityProto.HIGH:
+ return FilterQuality.high;
+ default:
+ return null;
+ }
+ }
+
+ static Shadow _parseProtoShadow(ShadowData data) {
+ return Shadow(
+ color: _parseProtoColor(data.color) ?? Colors.black,
+ offset: Offset(data.offsetX, data.offsetY),
+ blurRadius: data.blurRadius,
+ );
+ }
+
+ static FloatingActionButtonLocation? _parseProtoFabLocation(
+ FloatingActionButtonLocationProto proto) {
+ switch (proto) {
+ case FloatingActionButtonLocationProto.FAB_START_TOP:
+ return FloatingActionButtonLocation.startTop;
+ case FloatingActionButtonLocationProto.FAB_START:
+ return FloatingActionButtonLocation.startFloat;
+ case FloatingActionButtonLocationProto.FAB_START_FLOAT:
+ return FloatingActionButtonLocation.startFloat;
+ case FloatingActionButtonLocationProto.FAB_CENTER_TOP:
+ return FloatingActionButtonLocation.centerTop;
+ case FloatingActionButtonLocationProto.FAB_CENTER:
+ return FloatingActionButtonLocation.centerFloat;
+ case FloatingActionButtonLocationProto.FAB_CENTER_FLOAT:
+ return FloatingActionButtonLocation.centerFloat;
+ case FloatingActionButtonLocationProto.FAB_END_TOP:
+ return FloatingActionButtonLocation.endTop;
+ case FloatingActionButtonLocationProto.FAB_END:
+ return FloatingActionButtonLocation.endFloat;
+ case FloatingActionButtonLocationProto.FAB_END_FLOAT:
+ return FloatingActionButtonLocation.endFloat;
+ case FloatingActionButtonLocationProto.FAB_MINI_CENTER_TOP:
+ return FloatingActionButtonLocation.miniCenterTop;
+ case FloatingActionButtonLocationProto.FAB_MINI_CENTER_FLOAT:
+ return FloatingActionButtonLocation.miniCenterFloat;
+ case FloatingActionButtonLocationProto.FAB_MINI_START_TOP:
+ return FloatingActionButtonLocation.miniStartTop;
+ case FloatingActionButtonLocationProto.FAB_MINI_START_FLOAT:
+ return FloatingActionButtonLocation.miniStartFloat;
+ case FloatingActionButtonLocationProto.FAB_MINI_END_TOP:
+ return FloatingActionButtonLocation.miniEndTop;
+ case FloatingActionButtonLocationProto.FAB_MINI_END_FLOAT:
+ return FloatingActionButtonLocation.miniEndFloat;
+ default:
+ return null;
+ }
+ }
+}
diff --git a/lib/src/protos/sdui.proto b/lib/src/protos/sdui.proto
new file mode 100644
index 0000000..5158e71
--- /dev/null
+++ b/lib/src/protos/sdui.proto
@@ -0,0 +1,502 @@
+syntax = "proto3";
+
+package flutter_sdui;
+
+// Enum for Widget Types
+enum WidgetType {
+ WIDGET_TYPE_UNSPECIFIED = 0;
+ COLUMN = 1;
+ ROW = 2;
+ TEXT = 3;
+ IMAGE = 4;
+ SIZED_BOX = 5;
+ CONTAINER = 6;
+ SCAFFOLD = 7;
+ SPACER = 8;
+ ICON = 9;
+ // Add other widget types here
+}
+
+// Generic Widget message
+message SduiWidgetData {
+ WidgetType type = 1;
+ map string_attributes = 2; // For simple string attributes like text content, image src
+ map double_attributes = 3; // For numerical attributes like width, height, flex
+ map bool_attributes = 4; // For boolean attributes
+ map int_attributes = 5; // For integer attributes like flex
+
+ // Complex nested attributes
+ TextStyleData text_style = 6;
+ EdgeInsetsData padding = 7;
+ EdgeInsetsData margin = 8;
+ ColorData color = 9; // General purpose color
+ IconDataMessage icon = 10;
+ BoxDecorationData box_decoration = 11;
+
+ // Children widgets
+ repeated SduiWidgetData children = 12;
+ SduiWidgetData child = 13; // For widgets that take a single child (e.g. SizedBox, Container)
+
+ // Scaffold specific parts
+ SduiWidgetData app_bar = 14;
+ SduiWidgetData body = 15; // Body can also be a single child
+ SduiWidgetData floating_action_button = 16;
+ ColorData background_color = 17; // For Scaffold background
+
+ // New Scaffold attributes
+ SduiWidgetData bottom_navigation_bar = 18;
+ SduiWidgetData drawer = 19;
+ SduiWidgetData end_drawer = 20;
+ SduiWidgetData bottom_sheet = 21;
+ bool resize_to_avoid_bottom_inset = 22;
+ bool primary = 23;
+ FloatingActionButtonLocationProto floating_action_button_location = 24;
+ bool extend_body = 25;
+ bool extend_body_behind_app_bar = 26;
+ ColorData drawer_scrim_color = 27;
+ double drawer_edge_drag_width = 28;
+ bool drawer_enable_open_drag_gesture = 29;
+ bool end_drawer_enable_open_drag_gesture = 30;
+
+ // Layout attributes for Row and Column
+ MainAxisAlignmentProto main_axis_alignment = 31;
+ CrossAxisAlignmentProto cross_axis_alignment = 32;
+ MainAxisSizeProto main_axis_size = 33;
+ TextDirectionProto text_direction = 34;
+ VerticalDirectionProto vertical_direction = 35;
+ TextBaselineProto text_baseline = 36;
+
+ // Container specific attributes
+ AlignmentData alignment = 37;
+ BoxConstraintsData constraints = 38;
+ TransformData transform = 39;
+ AlignmentData transform_alignment = 40;
+ ClipProto clip_behavior = 41;
+
+ // Text specific attributes
+ TextAlignProto text_align = 42;
+ TextOverflowProto overflow = 43;
+ int32 max_lines = 44;
+ bool soft_wrap = 45;
+ double letter_spacing = 46;
+ double word_spacing = 47;
+ double height = 48;
+ string font_family = 49;
+
+ // Image specific attributes
+ ImageRepeatProto repeat = 50;
+ BlendModeProto color_blend_mode = 51;
+ RectData center_slice = 52;
+ bool match_text_direction = 53;
+ bool gapless_playback = 54;
+ FilterQualityProto filter_quality = 55;
+ int32 cache_width = 56;
+ int32 cache_height = 57;
+ double scale = 58;
+ string semantic_label = 59;
+ SduiWidgetData error_widget = 60;
+ SduiWidgetData loading_widget = 61;
+
+ // Icon specific attributes
+ double opacity = 62;
+ bool apply_text_scaling = 63;
+ repeated ShadowData shadows = 64;
+}
+
+// Message for Color
+message ColorData {
+ int32 alpha = 1;
+ int32 red = 2;
+ int32 green = 3;
+ int32 blue = 4;
+ // Or alternatively, a hex string
+ // string hex = 5;
+}
+
+// Message for EdgeInsets (for padding, margin)
+message EdgeInsetsData {
+ optional double left = 1;
+ optional double top = 2;
+ optional double right = 3;
+ optional double bottom = 4;
+ optional double all = 5;
+}
+
+// Message for TextStyle
+message TextStyleData {
+ optional ColorData color = 1;
+ optional double font_size = 2;
+ optional string font_weight = 3; // e.g., "bold", "w500"
+ optional TextDecorationProto decoration = 4;
+ optional double letter_spacing = 5;
+ optional double word_spacing = 6;
+ optional double height = 7;
+ optional string font_family = 8;
+ optional FontStyleProto font_style = 9;
+ // Add other TextStyle properties: fontFamily, fontStyle, letterSpacing, etc.
+}
+
+// Message for IconData
+message IconDataMessage {
+ optional string name = 1; // e.g., "settings", "home"
+ optional int32 code_point = 2;
+ optional string font_family = 3;
+ optional ColorData color = 4;
+ optional double size = 5;
+}
+
+// Message for BoxFit
+enum BoxFitProto {
+ BOX_FIT_UNSPECIFIED = 0;
+ FILL = 1;
+ CONTAIN = 2;
+ COVER = 3;
+ FIT_WIDTH = 4;
+ FIT_HEIGHT = 5;
+ NONE_BOX_FIT = 6; // Renamed from NONE
+ SCALE_DOWN = 7;
+}
+
+// Message for BoxDecoration
+message BoxDecorationData {
+ optional ColorData color = 1;
+ optional BorderRadiusData border_radius = 2;
+ optional BorderData border = 3;
+ repeated BoxShadowData box_shadow = 4;
+ optional GradientData gradient = 5;
+ optional BoxShapeProto shape = 6; // ENUM: RECTANGLE, CIRCLE
+ optional DecorationImageData image = 7;
+}
+
+// Message for BorderRadius
+message BorderRadiusData {
+ optional double all = 1; // For BorderRadius.circular(all)
+ // For BorderRadius.only or .vertical/.horizontal if needed later
+ optional double top_left = 2;
+ optional double top_right = 3;
+ optional double bottom_left = 4;
+ optional double bottom_right = 5;
+ // Specific types like vertical/horizontal can be handled by how these are set
+}
+
+// Message for BorderSide
+message BorderSideData {
+ optional ColorData color = 1;
+ optional double width = 2;
+ optional BorderStyleProto style = 3; // ENUM: SOLID, NONE
+}
+
+// Message for Border
+message BorderData {
+ optional BorderSideData top = 1;
+ optional BorderSideData right = 2;
+ optional BorderSideData bottom = 3;
+ optional BorderSideData left = 4;
+ optional BorderSideData all = 5; // For Border.all
+}
+
+// Enum for BorderStyle
+enum BorderStyleProto {
+ BORDER_STYLE_UNSPECIFIED = 0;
+ SOLID = 1;
+ NONE_BORDER = 2; // Renamed to avoid conflict with NONE in ImageRepeatProto
+}
+
+// Message for BoxShadow
+message BoxShadowData {
+ optional ColorData color = 1;
+ optional double offset_x = 2;
+ optional double offset_y = 3;
+ optional double blur_radius = 4;
+ optional double spread_radius = 5;
+}
+
+// Message for Gradient
+message GradientData {
+ enum GradientType {
+ GRADIENT_TYPE_UNSPECIFIED = 0;
+ LINEAR = 1;
+ RADIAL = 2;
+ SWEEP = 3;
+ }
+ GradientType type = 1;
+ repeated ColorData colors = 2;
+ repeated double stops = 3;
+ optional AlignmentData begin = 4; // For LinearGradient
+ optional AlignmentData end = 5; // For LinearGradient
+ optional AlignmentData center = 6; // For RadialGradient, SweepGradient
+ optional double radius = 7; // For RadialGradient
+ optional double start_angle = 8; // For SweepGradient
+ optional double end_angle = 9; // For SweepGradient
+}
+
+// Message for Alignment (used in Gradient, DecorationImage)
+message AlignmentData {
+ // Predefined alignments
+ enum PredefinedAlignment {
+ PREDEFINED_ALIGNMENT_UNSPECIFIED = 0;
+ BOTTOM_CENTER = 1;
+ BOTTOM_LEFT = 2;
+ BOTTOM_RIGHT = 3;
+ CENTER_ALIGN = 4; // Renamed from CENTER
+ CENTER_LEFT = 5;
+ CENTER_RIGHT = 6;
+ TOP_CENTER = 7;
+ TOP_LEFT = 8;
+ TOP_RIGHT = 9;
+ }
+ oneof alignment_type {
+ PredefinedAlignment predefined = 1;
+ XYAlignment xy = 2;
+ }
+}
+
+message XYAlignment {
+ double x = 1;
+ double y = 2;
+}
+
+// Enum for BoxShape
+enum BoxShapeProto {
+ BOX_SHAPE_UNSPECIFIED = 0;
+ RECTANGLE = 1;
+ CIRCLE = 2;
+}
+
+// Message for DecorationImage
+message DecorationImageData {
+ string src = 1; // Network image URL
+ optional BoxFitProto fit = 2;
+ optional AlignmentData alignment = 3;
+ optional ImageRepeatProto repeat = 4;
+ optional bool match_text_direction = 5;
+ optional double scale = 6;
+ optional double opacity = 7;
+ optional FilterQualityProto filter_quality = 8;
+ optional bool invert_colors = 9;
+ optional bool is_anti_alias = 10;
+}
+
+// Enum for ImageRepeat
+enum ImageRepeatProto {
+ IMAGE_REPEAT_UNSPECIFIED = 0;
+ REPEAT = 1;
+ REPEAT_X = 2;
+ REPEAT_Y = 3;
+ NO_REPEAT = 4;
+}
+
+// Enum for FilterQuality
+enum FilterQualityProto {
+ FILTER_QUALITY_UNSPECIFIED = 0;
+ NONE_FQ = 1; // NONE is a keyword in proto3 for enums, so NONE_FQ
+ LOW = 2;
+ MEDIUM = 3;
+ HIGH = 4;
+}
+
+// New enums for Row and Column properties
+enum MainAxisAlignmentProto {
+ MAIN_AXIS_ALIGNMENT_UNSPECIFIED = 0;
+ MAIN_AXIS_START = 1; // Renamed from START
+ MAIN_AXIS_END = 2; // Renamed from END
+ MAIN_AXIS_CENTER = 3; // Renamed from CENTER
+ SPACE_BETWEEN = 4;
+ SPACE_AROUND = 5;
+ SPACE_EVENLY = 6;
+}
+
+enum CrossAxisAlignmentProto {
+ CROSS_AXIS_ALIGNMENT_UNSPECIFIED = 0;
+ CROSS_AXIS_START = 1; // Renamed from START
+ CROSS_AXIS_END = 2; // Renamed from END
+ CROSS_AXIS_CENTER = 3; // Renamed from CENTER
+ STRETCH = 4;
+ BASELINE = 5;
+}
+
+enum MainAxisSizeProto {
+ MAIN_AXIS_SIZE_UNSPECIFIED = 0;
+ MIN = 1;
+ MAX = 2;
+}
+
+enum TextDirectionProto {
+ TEXT_DIRECTION_UNSPECIFIED = 0;
+ LTR = 1; // Left to right
+ RTL = 2; // Right to left
+}
+
+enum VerticalDirectionProto {
+ VERTICAL_DIRECTION_UNSPECIFIED = 0;
+ UP = 1;
+ DOWN = 2;
+}
+
+enum TextBaselineProto {
+ TEXT_BASELINE_UNSPECIFIED = 0;
+ ALPHABETIC = 1;
+ IDEOGRAPHIC = 2;
+}
+
+// New message for Box Constraints
+message BoxConstraintsData {
+ optional double min_width = 1;
+ optional double max_width = 2;
+ optional double min_height = 3;
+ optional double max_height = 4;
+}
+
+// New message for Transform
+message TransformData {
+ enum TransformType {
+ TRANSFORM_TYPE_UNSPECIFIED = 0;
+ MATRIX_4X4 = 1;
+ TRANSLATE = 2;
+ ROTATE = 3;
+ SCALE = 4;
+ }
+
+ TransformType type = 1;
+
+ // Matrix 4x4 (row-major order)
+ repeated double matrix_values = 2; // 16 values if using matrix type
+
+ // Translation
+ optional double translate_x = 3;
+ optional double translate_y = 4;
+ optional double translate_z = 5;
+
+ // Rotation
+ optional double rotation_angle = 6; // In radians
+ optional double rotation_x = 7;
+ optional double rotation_y = 8;
+ optional double rotation_z = 9;
+
+ // Scale
+ optional double scale_x = 10;
+ optional double scale_y = 11;
+ optional double scale_z = 12;
+}
+
+// New enum for Clip behavior
+enum ClipProto {
+ CLIP_UNSPECIFIED = 0;
+ CLIP_NONE = 1; // Renamed from NONE
+ HARD_EDGE = 2;
+ ANTI_ALIAS = 3;
+ ANTI_ALIAS_WITH_SAVE_LAYER = 4;
+}
+
+// New enums for Text properties
+enum TextAlignProto {
+ TEXT_ALIGN_UNSPECIFIED = 0;
+ LEFT = 1;
+ RIGHT = 2;
+ TEXT_ALIGN_CENTER = 3; // Renamed from CENTER
+ JUSTIFY = 4;
+ TEXT_ALIGN_START = 5; // Renamed from START
+ TEXT_ALIGN_END = 6; // Renamed from END
+}
+
+enum TextOverflowProto {
+ TEXT_OVERFLOW_UNSPECIFIED = 0;
+ CLIP = 1;
+ ELLIPSIS = 2;
+ FADE = 3;
+ VISIBLE = 4;
+}
+
+enum TextDecorationProto {
+ TEXT_DECORATION_UNSPECIFIED = 0;
+ TEXT_DECORATION_NONE = 1; // Renamed from NONE
+ UNDERLINE = 2;
+ OVERLINE = 3;
+ LINE_THROUGH = 4;
+}
+
+enum FontStyleProto {
+ FONT_STYLE_UNSPECIFIED = 0;
+ NORMAL = 1;
+ ITALIC = 2;
+}
+
+// New message for Rectangle data
+message RectData {
+ double left = 1;
+ double top = 2;
+ double right = 3;
+ double bottom = 4;
+}
+
+// New enum for Blend modes
+enum BlendModeProto {
+ BLEND_MODE_UNSPECIFIED = 0;
+ CLEAR = 1;
+ SRC = 2;
+ DST = 3;
+ SRC_OVER = 4;
+ DST_OVER = 5;
+ SRC_IN = 6;
+ DST_IN = 7;
+ SRC_OUT = 8;
+ DST_OUT = 9;
+ SRC_ATOP = 10;
+ DST_ATOP = 11;
+ XOR = 12;
+ PLUS = 13;
+ MODULATE = 14;
+ SCREEN = 15;
+ OVERLAY = 16;
+ DARKEN = 17;
+ LIGHTEN = 18;
+ COLOR_DODGE = 19;
+ COLOR_BURN = 20;
+ HARD_LIGHT = 21;
+ SOFT_LIGHT = 22;
+ DIFFERENCE = 23;
+ EXCLUSION = 24;
+ MULTIPLY = 25;
+ HUE = 26;
+ SATURATION = 27;
+ COLOR = 28;
+ LUMINOSITY = 29;
+}
+
+// New message for Shadow
+message ShadowData {
+ ColorData color = 1;
+ double offset_x = 2;
+ double offset_y = 3;
+ double blur_radius = 4;
+}
+
+// New enum for FloatingActionButtonLocation
+enum FloatingActionButtonLocationProto {
+ FAB_LOCATION_UNSPECIFIED = 0;
+ FAB_START_TOP = 1; // Renamed from START_TOP
+ FAB_START = 2; // Renamed from START
+ FAB_START_FLOAT = 3; // Renamed from START_FLOAT
+ FAB_CENTER_TOP = 4; // Renamed from CENTER_TOP
+ FAB_CENTER = 5; // Renamed from CENTER
+ FAB_CENTER_FLOAT = 6; // Renamed from CENTER_FLOAT
+ FAB_END_TOP = 7; // Renamed from END_TOP
+ FAB_END = 8; // Renamed from END
+ FAB_END_FLOAT = 9; // Renamed from END_FLOAT
+ FAB_MINI_CENTER_TOP = 10; // Renamed from MINI_CENTER_TOP
+ FAB_MINI_CENTER_FLOAT = 11; // Renamed from MINI_CENTER_FLOAT
+ FAB_MINI_START_TOP = 12; // Renamed from MINI_START_TOP
+ FAB_MINI_START_FLOAT = 13; // Renamed from MINI_START_FLOAT
+ FAB_MINI_END_TOP = 14; // Renamed from MINI_END_TOP
+ FAB_MINI_END_FLOAT = 15; // Renamed from MINI_END_FLOAT
+}
+
+// Service definition
+service SduiService {
+ rpc GetSduiWidget (SduiRequest) returns (SduiWidgetData);
+}
+
+message SduiRequest {
+ string screen_id = 1; // Example: identifier for which UI to fetch
+}
+
diff --git a/lib/src/renderer/sdui_grpc_renderer.dart b/lib/src/renderer/sdui_grpc_renderer.dart
new file mode 100644
index 0000000..385a59a
--- /dev/null
+++ b/lib/src/renderer/sdui_grpc_renderer.dart
@@ -0,0 +1,80 @@
+import 'package:flutter/material.dart';
+import 'package:flutter_sdui/src/generated/sdui.pb.dart';
+import 'package:flutter_sdui/src/parser/sdui_proto_parser.dart';
+import 'package:flutter_sdui/src/service/sdui_grpc_client.dart';
+import 'package:flutter_sdui/src/widgets/sdui_widget.dart';
+
+/// A widget that renders a UI from a gRPC server.
+class SduiGrpcRenderer extends StatefulWidget {
+ /// The gRPC client to use for fetching UI widgets.
+ final SduiGrpcClient client;
+
+ /// The screen ID to fetch from the server.
+ final String screenId;
+
+ /// Optional loading widget to display while fetching the UI.
+ final Widget? loadingWidget;
+
+ /// Optional error widget builder to display if an error occurs.
+ final Widget Function(BuildContext, Object)? errorBuilder;
+
+ /// Creates a new SduiGrpcRenderer.
+ const SduiGrpcRenderer({
+ super.key,
+ required this.client,
+ required this.screenId,
+ this.loadingWidget,
+ this.errorBuilder,
+ });
+
+ @override
+ State createState() => _SduiGrpcRendererState();
+}
+
+class _SduiGrpcRendererState extends State {
+ late Future _widgetFuture;
+
+ @override
+ void initState() {
+ super.initState();
+ _fetchWidget();
+ }
+
+ @override
+ void didUpdateWidget(SduiGrpcRenderer oldWidget) {
+ super.didUpdateWidget(oldWidget);
+ if (oldWidget.screenId != widget.screenId ||
+ oldWidget.client != widget.client) {
+ _fetchWidget();
+ }
+ }
+
+ void _fetchWidget() {
+ _widgetFuture = widget.client.getWidget(widget.screenId);
+ }
+
+ @override
+ Widget build(BuildContext context) {
+ return FutureBuilder(
+ future: _widgetFuture,
+ builder: (context, snapshot) {
+ if (snapshot.connectionState == ConnectionState.waiting) {
+ return widget.loadingWidget ??
+ const Center(child: CircularProgressIndicator());
+ } else if (snapshot.hasError) {
+ if (widget.errorBuilder != null) {
+ return widget.errorBuilder!(context, snapshot.error!);
+ }
+ return Center(child: Text('Error: ${snapshot.error}'));
+ } else if (snapshot.hasData) {
+ // Convert the protobuf data to a Flutter widget
+ // This will use our SduiProtoParser to create the widget tree
+ final SduiWidget sduiWidget = SduiParser.parseProto(snapshot.data!);
+ return sduiWidget.toFlutterWidget();
+ } else {
+ return const SizedBox.shrink();
+ }
+ },
+ );
+ }
+}
diff --git a/lib/src/service/sdui_grpc_client.dart b/lib/src/service/sdui_grpc_client.dart
new file mode 100644
index 0000000..f5e1200
--- /dev/null
+++ b/lib/src/service/sdui_grpc_client.dart
@@ -0,0 +1,38 @@
+import 'package:grpc/grpc.dart';
+import 'package:flutter_sdui/src/generated/sdui.pbgrpc.dart';
+
+/// A client for the SDUI gRPC service.
+class SduiGrpcClient {
+ late final SduiServiceClient _client;
+ late final ClientChannel _channel;
+
+ /// Creates a new SDUI gRPC client.
+ SduiGrpcClient({
+ required String host,
+ required int port,
+ bool secure = false,
+ }) {
+ _channel = ClientChannel(
+ host,
+ port: port,
+ options: ChannelOptions(
+ credentials: secure
+ ? const ChannelCredentials.secure()
+ : const ChannelCredentials.insecure(),
+ ),
+ );
+
+ _client = SduiServiceClient(_channel);
+ }
+
+ /// Fetches a UI widget from the server.
+ Future getWidget(String screenId) async {
+ final request = SduiRequest()..screenId = screenId;
+ return _client.getSduiWidget(request);
+ }
+
+ /// Closes the connection to the server.
+ Future dispose() async {
+ await _channel.shutdown();
+ }
+}
diff --git a/lib/src/widgets/sdui_column.dart b/lib/src/widgets/sdui_column.dart
new file mode 100644
index 0000000..f47b38f
--- /dev/null
+++ b/lib/src/widgets/sdui_column.dart
@@ -0,0 +1,36 @@
+import 'package:flutter/widgets.dart';
+import 'package:flutter_sdui/src/widgets/sdui_widget.dart';
+
+/// Represents a Column widget in SDUI.
+class SduiColumn extends SduiWidget {
+ final List children;
+ final MainAxisAlignment? mainAxisAlignment;
+ final MainAxisSize? mainAxisSize;
+ final CrossAxisAlignment? crossAxisAlignment;
+ final TextDirection? textDirection;
+ final VerticalDirection? verticalDirection;
+ final TextBaseline? textBaseline;
+
+ SduiColumn({
+ required this.children,
+ this.mainAxisAlignment,
+ this.mainAxisSize,
+ this.crossAxisAlignment,
+ this.textDirection,
+ this.verticalDirection,
+ this.textBaseline,
+ });
+
+ @override
+ Widget toFlutterWidget() {
+ return Column(
+ mainAxisAlignment: mainAxisAlignment ?? MainAxisAlignment.start,
+ mainAxisSize: mainAxisSize ?? MainAxisSize.max,
+ crossAxisAlignment: crossAxisAlignment ?? CrossAxisAlignment.center,
+ textDirection: textDirection,
+ verticalDirection: verticalDirection ?? VerticalDirection.down,
+ textBaseline: textBaseline,
+ children: children.map((child) => child.toFlutterWidget()).toList(),
+ );
+ }
+}
diff --git a/lib/src/widgets/sdui_container.dart b/lib/src/widgets/sdui_container.dart
new file mode 100644
index 0000000..ad2739e
--- /dev/null
+++ b/lib/src/widgets/sdui_container.dart
@@ -0,0 +1,53 @@
+import 'package:flutter/widgets.dart';
+import 'package:flutter_sdui/src/widgets/sdui_widget.dart';
+
+/// Represents a Container widget in SDUI.
+class SduiContainer extends SduiWidget {
+ final SduiWidget? child;
+ final EdgeInsets? padding;
+ final EdgeInsets? margin;
+ final BoxDecoration? decoration; // Handles color, borderRadius, border, etc.
+ final double? width;
+ final double? height;
+ final Color? color;
+ final Alignment? alignment;
+ final BoxConstraints? constraints;
+ final Matrix4? transform;
+ final AlignmentGeometry? transformAlignment;
+ final Clip? clipBehavior;
+
+ SduiContainer({
+ this.child,
+ this.padding,
+ this.margin,
+ this.decoration,
+ this.width,
+ this.height,
+ this.color,
+ this.alignment,
+ this.constraints,
+ this.transform,
+ this.transformAlignment,
+ this.clipBehavior,
+ });
+
+ @override
+ Widget toFlutterWidget() {
+ return Container(
+ padding: padding,
+ margin: margin,
+ decoration: decoration,
+ width: width,
+ height: height,
+ color: decoration == null
+ ? color
+ : null, // Only use color if decoration is null
+ alignment: alignment,
+ constraints: constraints,
+ transform: transform,
+ transformAlignment: transformAlignment,
+ clipBehavior: clipBehavior ?? Clip.none,
+ child: child?.toFlutterWidget(),
+ );
+ }
+}
diff --git a/lib/src/widgets/sdui_icon.dart b/lib/src/widgets/sdui_icon.dart
new file mode 100644
index 0000000..8ba1d53
--- /dev/null
+++ b/lib/src/widgets/sdui_icon.dart
@@ -0,0 +1,54 @@
+import 'package:flutter/material.dart';
+import 'package:flutter_sdui/src/widgets/sdui_widget.dart';
+
+/// Represents an Icon widget in SDUI.
+class SduiIcon extends SduiWidget {
+ final IconData? icon;
+ final double? size;
+ final Color? color;
+ final String? semanticLabel;
+ final TextDirection? textDirection;
+ final double?
+ opacity; // Custom property for opacity - will use Opacity widget
+ final bool? applyTextScaling;
+ final List? shadows;
+
+ SduiIcon({
+ this.icon,
+ this.size,
+ this.color,
+ this.semanticLabel,
+ this.textDirection,
+ this.opacity,
+ this.applyTextScaling,
+ this.shadows,
+ });
+
+ @override
+ Widget toFlutterWidget() {
+ if (icon == null) {
+ // Return a placeholder or an empty widget if icon data is missing
+ return const SizedBox.shrink();
+ }
+
+ Widget iconWidget = Icon(
+ icon,
+ size: size,
+ color: color,
+ semanticLabel: semanticLabel,
+ textDirection: textDirection,
+ shadows: shadows,
+ applyTextScaling: applyTextScaling,
+ );
+
+ // Apply opacity if provided
+ if (opacity != null && opacity! < 1.0) {
+ iconWidget = Opacity(
+ opacity: opacity!,
+ child: iconWidget,
+ );
+ }
+
+ return iconWidget;
+ }
+}
diff --git a/lib/src/widgets/sdui_image.dart b/lib/src/widgets/sdui_image.dart
new file mode 100644
index 0000000..ee7c22d
--- /dev/null
+++ b/lib/src/widgets/sdui_image.dart
@@ -0,0 +1,83 @@
+import 'package:flutter/widgets.dart';
+import 'package:flutter_sdui/src/widgets/sdui_widget.dart';
+
+/// Represents an Image widget in SDUI.
+class SduiImage extends SduiWidget {
+ final String src; // Network URL
+ final double? width;
+ final double? height;
+ final BoxFit? fit;
+ final Alignment? alignment;
+ final ImageRepeat? repeat;
+ final Color? color;
+ final BlendMode? colorBlendMode;
+ final Rect? centerSlice;
+ final bool? matchTextDirection;
+ final bool? gaplessPlayback;
+ final FilterQuality? filterQuality;
+ final int? cacheWidth;
+ final int? cacheHeight;
+ final double? scale;
+ final String? semanticLabel;
+ final Widget? errorWidget;
+ final Widget? loadingWidget;
+
+ SduiImage(
+ this.src, {
+ this.width,
+ this.height,
+ this.fit,
+ this.alignment,
+ this.repeat,
+ this.color,
+ this.colorBlendMode,
+ this.centerSlice,
+ this.matchTextDirection,
+ this.gaplessPlayback,
+ this.filterQuality,
+ this.cacheWidth,
+ this.cacheHeight,
+ this.scale,
+ this.semanticLabel,
+ this.errorWidget,
+ this.loadingWidget,
+ });
+
+ @override
+ Widget toFlutterWidget() {
+ // Only network images are supported as per the new requirement.
+ if (src.startsWith('http')) {
+ return Image.network(
+ src,
+ width: width,
+ height: height,
+ fit: fit,
+ alignment: alignment ?? Alignment.center,
+ repeat: repeat ?? ImageRepeat.noRepeat,
+ color: color,
+ colorBlendMode: colorBlendMode,
+ centerSlice: centerSlice,
+ matchTextDirection: matchTextDirection ?? false,
+ gaplessPlayback: gaplessPlayback ?? false,
+ filterQuality: filterQuality ?? FilterQuality.low,
+ cacheWidth: cacheWidth,
+ cacheHeight: cacheHeight,
+ scale: scale ?? 1.0,
+ semanticLabel: semanticLabel,
+ errorBuilder: errorWidget != null
+ ? (context, error, stackTrace) => errorWidget!
+ : null,
+ loadingBuilder: loadingWidget != null
+ ? (context, child, loadingProgress) =>
+ loadingProgress == null ? child : loadingWidget!
+ : null,
+ );
+ } else {
+ // Optionally, return a placeholder or throw an error for non-network images.
+ // For now, returning an empty SizedBox.
+ print(
+ "Warning: SduiImage currently only supports network images. Provided src: $src");
+ return const SizedBox.shrink();
+ }
+ }
+}
diff --git a/lib/src/widgets/sdui_row.dart b/lib/src/widgets/sdui_row.dart
new file mode 100644
index 0000000..7962e88
--- /dev/null
+++ b/lib/src/widgets/sdui_row.dart
@@ -0,0 +1,36 @@
+import 'package:flutter/widgets.dart';
+import 'package:flutter_sdui/src/widgets/sdui_widget.dart';
+
+/// Represents a Row widget in SDUI.
+class SduiRow extends SduiWidget {
+ final List children;
+ final MainAxisAlignment? mainAxisAlignment;
+ final MainAxisSize? mainAxisSize;
+ final CrossAxisAlignment? crossAxisAlignment;
+ final TextDirection? textDirection;
+ final VerticalDirection? verticalDirection;
+ final TextBaseline? textBaseline;
+
+ SduiRow({
+ required this.children,
+ this.mainAxisAlignment,
+ this.mainAxisSize,
+ this.crossAxisAlignment,
+ this.textDirection,
+ this.verticalDirection,
+ this.textBaseline,
+ });
+
+ @override
+ Widget toFlutterWidget() {
+ return Row(
+ mainAxisAlignment: mainAxisAlignment ?? MainAxisAlignment.start,
+ mainAxisSize: mainAxisSize ?? MainAxisSize.max,
+ crossAxisAlignment: crossAxisAlignment ?? CrossAxisAlignment.center,
+ textDirection: textDirection,
+ verticalDirection: verticalDirection ?? VerticalDirection.down,
+ textBaseline: textBaseline,
+ children: children.map((child) => child.toFlutterWidget()).toList(),
+ );
+ }
+}
diff --git a/lib/src/widgets/sdui_scaffold.dart b/lib/src/widgets/sdui_scaffold.dart
new file mode 100644
index 0000000..8dfdf1c
--- /dev/null
+++ b/lib/src/widgets/sdui_scaffold.dart
@@ -0,0 +1,85 @@
+import 'package:flutter/material.dart'; // Scaffold is in material.dart
+import 'package:flutter_sdui/src/widgets/sdui_widget.dart';
+
+/// Represents a Scaffold widget in SDUI.
+class SduiScaffold extends SduiWidget {
+ final SduiWidget? appBar;
+ final SduiWidget? body;
+ final SduiWidget? floatingActionButton;
+ final SduiWidget? bottomNavigationBar;
+ final SduiWidget? drawer;
+ final SduiWidget? endDrawer;
+ final SduiWidget? bottomSheet;
+ final Color? backgroundColor;
+ final bool? resizeToAvoidBottomInset;
+ final bool? primary;
+ final FloatingActionButtonLocation? floatingActionButtonLocation;
+ final bool? extendBody;
+ final bool? extendBodyBehindAppBar;
+ final Color? drawerScrimColor;
+ final double? drawerEdgeDragWidth;
+ final bool? drawerEnableOpenDragGesture;
+ final bool? endDrawerEnableOpenDragGesture;
+
+ SduiScaffold({
+ this.appBar,
+ this.body,
+ this.floatingActionButton,
+ this.bottomNavigationBar,
+ this.drawer,
+ this.endDrawer,
+ this.bottomSheet,
+ this.backgroundColor,
+ this.resizeToAvoidBottomInset,
+ this.primary,
+ this.floatingActionButtonLocation,
+ this.extendBody,
+ this.extendBodyBehindAppBar,
+ this.drawerScrimColor,
+ this.drawerEdgeDragWidth,
+ this.drawerEnableOpenDragGesture,
+ this.endDrawerEnableOpenDragGesture,
+ });
+
+ @override
+ Widget toFlutterWidget() {
+ Widget? flutterAppBar;
+ if (appBar != null) {
+ // Attempt to cast to PreferredSizeWidget. This assumes the SDUI appBar resolves to something like AppBar.
+ // More robust handling might be needed if it can be any widget.
+ // For now, we expect it to be a widget that can be an AppBar (e.g. SduiContainer styled as an AppBar)
+ // or a custom SduiAppBar widget if we introduce one.
+ var potentialAppBar = appBar!.toFlutterWidget();
+ if (potentialAppBar is PreferredSizeWidget) {
+ flutterAppBar = potentialAppBar;
+ } else {
+ // If it's not a PreferredSizeWidget, wrap it in one if possible or log a warning.
+ // For simplicity, we are strict for now. Consider a SduiAppBar sdui widget for proper typing.
+ print(
+ "Warning: appBar widget for SduiScaffold is not a PreferredSizeWidget. It might not render correctly.");
+ // As a fallback, one might wrap it in a simple PreferredSize if it has a defined height.
+ // flutterAppBar = PreferredSize(child: potentialAppBar, preferredSize: Size.fromHeight(kToolbarHeight));
+ }
+ }
+
+ return Scaffold(
+ appBar: flutterAppBar as PreferredSizeWidget?,
+ body: body?.toFlutterWidget(),
+ floatingActionButton: floatingActionButton?.toFlutterWidget(),
+ bottomNavigationBar: bottomNavigationBar?.toFlutterWidget(),
+ drawer: drawer?.toFlutterWidget(),
+ endDrawer: endDrawer?.toFlutterWidget(),
+ bottomSheet: bottomSheet?.toFlutterWidget(),
+ backgroundColor: backgroundColor,
+ resizeToAvoidBottomInset: resizeToAvoidBottomInset,
+ primary: primary ?? true,
+ floatingActionButtonLocation: floatingActionButtonLocation,
+ extendBody: extendBody ?? false,
+ extendBodyBehindAppBar: extendBodyBehindAppBar ?? false,
+ drawerScrimColor: drawerScrimColor,
+ drawerEdgeDragWidth: drawerEdgeDragWidth,
+ drawerEnableOpenDragGesture: drawerEnableOpenDragGesture ?? true,
+ endDrawerEnableOpenDragGesture: endDrawerEnableOpenDragGesture ?? true,
+ );
+ }
+}
diff --git a/lib/src/widgets/sdui_sized_box.dart b/lib/src/widgets/sdui_sized_box.dart
new file mode 100644
index 0000000..3feb28e
--- /dev/null
+++ b/lib/src/widgets/sdui_sized_box.dart
@@ -0,0 +1,20 @@
+import 'package:flutter/widgets.dart';
+import 'package:flutter_sdui/src/widgets/sdui_widget.dart';
+
+/// Represents a SizedBox widget in SDUI.
+class SduiSizedBox extends SduiWidget {
+ final double? width;
+ final double? height;
+ final SduiWidget? child;
+
+ SduiSizedBox({this.width, this.height, this.child});
+
+ @override
+ Widget toFlutterWidget() {
+ return SizedBox(
+ width: width,
+ height: height,
+ child: child?.toFlutterWidget(),
+ );
+ }
+}
diff --git a/lib/src/widgets/sdui_spacer.dart b/lib/src/widgets/sdui_spacer.dart
new file mode 100644
index 0000000..4095f41
--- /dev/null
+++ b/lib/src/widgets/sdui_spacer.dart
@@ -0,0 +1,14 @@
+import 'package:flutter/widgets.dart';
+import 'package:flutter_sdui/src/widgets/sdui_widget.dart';
+
+/// Represents a Spacer widget in SDUI.
+class SduiSpacer extends SduiWidget {
+ final int flex;
+
+ SduiSpacer({this.flex = 1});
+
+ @override
+ Widget toFlutterWidget() {
+ return Spacer(flex: flex);
+ }
+}
diff --git a/lib/src/widgets/sdui_text.dart b/lib/src/widgets/sdui_text.dart
new file mode 100644
index 0000000..331869f
--- /dev/null
+++ b/lib/src/widgets/sdui_text.dart
@@ -0,0 +1,64 @@
+import 'package:flutter/widgets.dart';
+import 'package:flutter_sdui/src/widgets/sdui_widget.dart';
+
+/// Represents a Text widget in SDUI.
+class SduiText extends SduiWidget {
+ final String text;
+ final TextStyle? style;
+ final TextAlign? textAlign;
+ final TextOverflow? overflow;
+ final int? maxLines;
+ final TextDecoration? decoration;
+ final double? fontSize;
+ final FontWeight? fontWeight;
+ final Color? color;
+ final bool? softWrap;
+ final double? letterSpacing;
+ final double? wordSpacing;
+ final double? height;
+ final String? fontFamily;
+ final TextDirection? textDirection;
+
+ SduiText(
+ this.text, {
+ this.style,
+ this.textAlign,
+ this.overflow,
+ this.maxLines,
+ this.decoration,
+ this.fontSize,
+ this.fontWeight,
+ this.color,
+ this.softWrap,
+ this.letterSpacing,
+ this.wordSpacing,
+ this.height,
+ this.fontFamily,
+ this.textDirection,
+ });
+
+ @override
+ Widget toFlutterWidget() {
+ // Create a merged TextStyle that combines the individual properties with the style
+ TextStyle mergedStyle = (style ?? const TextStyle()).copyWith(
+ decoration: decoration,
+ fontSize: fontSize,
+ fontWeight: fontWeight,
+ color: color,
+ letterSpacing: letterSpacing,
+ wordSpacing: wordSpacing,
+ height: height,
+ fontFamily: fontFamily,
+ );
+
+ return Text(
+ text,
+ style: mergedStyle,
+ textAlign: textAlign,
+ overflow: overflow,
+ maxLines: maxLines,
+ softWrap: softWrap,
+ textDirection: textDirection,
+ );
+ }
+}
diff --git a/lib/src/widgets/sdui_widget.dart b/lib/src/widgets/sdui_widget.dart
new file mode 100644
index 0000000..2b01502
--- /dev/null
+++ b/lib/src/widgets/sdui_widget.dart
@@ -0,0 +1,6 @@
+import 'package:flutter/widgets.dart';
+
+/// Abstract class for all SDUI widgets.
+abstract class SduiWidget {
+ Widget toFlutterWidget();
+}
diff --git a/pubspec.yaml b/pubspec.yaml
index e5be782..fe72900 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -1,54 +1,58 @@
name: flutter_sdui
-description: "A new Flutter package project."
+description: "A Flutter package to render server driven UI."
version: 0.0.1
-homepage:
+# homepage:
environment:
- sdk: ^3.6.0
- flutter: ">=1.17.0"
+ sdk: ">=3.0.0 <4.0.0"
+ flutter: ">=3.0.0"
dependencies:
flutter:
sdk: flutter
+ protobuf: ^4.1.0 # For Protobuf support
+ grpc: ^4.0.4 # For gRPC support
+ # http: ^1.0.0 # Already implicitly available via flutter, but good to be explicit if direct http calls are made for JSON
dev_dependencies:
flutter_test:
sdk: flutter
- flutter_lints: ^5.0.0
-
+ flutter_lints: ^5.0.0 # Keep existing lints
+ build_runner: ^2.0.0 # For code generation
+ protoc_plugin: ^22.2.0 # For Protobuf and gRPC code generation
# For information on the generic Dart part of this file, see the
# following page: https://dart.dev/tools/pub/pubspec
# The following section is specific to Flutter packages.
-flutter:
+# flutter:
- # To add assets to your package, add an assets section, like this:
- # assets:
- # - images/a_dot_burr.jpeg
- # - images/a_dot_ham.jpeg
- #
- # For details regarding assets in packages, see
- # https://flutter.dev/to/asset-from-package
- #
- # An image asset can refer to one or more resolution-specific "variants", see
- # https://flutter.dev/to/resolution-aware-images
+# To add assets to your package, add an assets section, like this:
+# assets:
+# - images/a_dot_burr.jpeg
+# - images/a_dot_ham.jpeg
+#
+# For details regarding assets in packages, see
+# https://flutter.dev/to/asset-from-package
+#
+# An image asset can refer to one or more resolution-specific "variants", see
+# https://flutter.dev/to/resolution-aware-images
- # To add custom fonts to your package, add a fonts section here,
- # in this "flutter" section. Each entry in this list should have a
- # "family" key with the font family name, and a "fonts" key with a
- # list giving the asset and other descriptors for the font. For
- # example:
- # fonts:
- # - family: Schyler
- # fonts:
- # - asset: fonts/Schyler-Regular.ttf
- # - asset: fonts/Schyler-Italic.ttf
- # style: italic
- # - family: Trajan Pro
- # fonts:
- # - asset: fonts/TrajanPro.ttf
- # - asset: fonts/TrajanPro_Bold.ttf
- # weight: 700
- #
- # For details regarding fonts in packages, see
- # https://flutter.dev/to/font-from-package
+# To add custom fonts to your package, add a fonts section here,
+# in this "flutter" section. Each entry in this list should have a
+# "family" key with the font family name, and a "fonts" key with a
+# list giving the asset and other descriptors for the font. For
+# example:
+# fonts:
+# - family: Schyler
+# fonts:
+# - asset: fonts/Schyler-Regular.ttf
+# - asset: fonts/Schyler-Italic.ttf
+# style: italic
+# - family: Trajan Pro
+# fonts:
+# - asset: fonts/TrajanPro.ttf
+# - asset: fonts/TrajanPro_Bold.ttf
+# weight: 700
+#
+# For details regarding fonts in packages, see
+# https://flutter.dev/to/font-from-package
diff --git a/test/flutter_sdui_test.dart b/test/flutter_sdui_test.dart
index 5afd4bf..2cd63e6 100644
--- a/test/flutter_sdui_test.dart
+++ b/test/flutter_sdui_test.dart
@@ -1,12 +1,12 @@
-import 'package:flutter_test/flutter_test.dart';
+// import 'package:flutter_test/flutter_test.dart';
-import 'package:flutter_sdui/flutter_sdui.dart';
+// import 'package:flutter_sdui/flutter_sdui.dart';
-void main() {
- test('adds one to input values', () {
- final calculator = Calculator();
- expect(calculator.addOne(2), 3);
- expect(calculator.addOne(-7), -6);
- expect(calculator.addOne(0), 1);
- });
-}
+// void main() {
+// test('adds one to input values', () {
+// final calculator = Calculator();
+// expect(calculator.addOne(2), 3);
+// expect(calculator.addOne(-7), -6);
+// expect(calculator.addOne(0), 1);
+// });
+// }
diff --git a/tool/generate_protos.ps1 b/tool/generate_protos.ps1
new file mode 100644
index 0000000..0e6ad00
--- /dev/null
+++ b/tool/generate_protos.ps1
@@ -0,0 +1,46 @@
+# Script to generate Dart files from Protobuf definitions
+# This script assumes you've run setup_protoc.ps1 first to install protoc locally
+
+# Ensure our local protoc binary is in the PATH
+$protoBinDir = "$PSScriptRoot\..\bin\bin"
+if (Test-Path $protoBinDir) {
+ $env:PATH = "$protoBinDir;$env:PATH"
+} else {
+ Write-Host "Local protoc not found. Run setup_protoc.ps1 first to install protoc." -ForegroundColor Yellow
+ exit 1
+}
+
+# Ensure the output directory exists
+New-Item -ItemType Directory -Force -Path "$PSScriptRoot\..\lib\src\generated" -ErrorAction SilentlyContinue | Out-Null
+
+Write-Host "Updating packages..."
+dart pub upgrade
+
+Write-Host "Clearing old generated files..."
+Remove-Item -Path "$PSScriptRoot\..\lib\src\generated\*" -Force -ErrorAction SilentlyContinue
+
+# Use the local pub cache protoc_plugin
+$PROTOC_GEN_DART = "$env:USERPROFILE\AppData\Local\Pub\Cache\bin\protoc-gen-dart.bat"
+if (-not (Test-Path $PROTOC_GEN_DART)) {
+ Write-Host "Installing protoc_plugin globally..."
+ dart pub global activate protoc_plugin
+}
+
+# Add the plugin to the PATH
+$env:PATH = "$env:PATH;$env:USERPROFILE\AppData\Local\Pub\Cache\bin"
+
+# For debugging
+Write-Host "Using protoc version: $(& $protoBinDir\protoc.exe --version)"
+Write-Host "Using protoc_plugin from: $PROTOC_GEN_DART"
+
+# Run protoc to generate Dart files with our local binary
+Write-Host "Generating Protobuf files..."
+& "$protoBinDir\protoc.exe" --dart_out=grpc:lib/src/generated --proto_path=lib/src/protos lib/src/protos/sdui.proto
+
+Write-Host "Protobuf files generated in lib/src/generated/"
+
+# Alternative approach using dart run build_runner
+Write-Host "Running build_runner as an alternative approach..."
+dart run build_runner build --delete-conflicting-outputs
+
+Write-Output "Protobuf files generated in lib/src/generated/"
diff --git a/tool/setup_protoc.ps1 b/tool/setup_protoc.ps1
new file mode 100644
index 0000000..2bb6ad0
--- /dev/null
+++ b/tool/setup_protoc.ps1
@@ -0,0 +1,32 @@
+# Setup protoc on Windows
+Write-Host "Setting up Protocol Buffers compiler (protoc)..."
+
+# Create a temporary directory for downloads
+$tempDir = "$env:TEMP\protoc_setup"
+New-Item -ItemType Directory -Force -Path $tempDir | Out-Null
+
+# Set the version and download URL for protoc
+$protocVersion = "24.4"
+$downloadUrl = "https://github.com/protocolbuffers/protobuf/releases/download/v$protocVersion/protoc-$protocVersion-win64.zip"
+$zipFile = "$tempDir\protoc.zip"
+
+# Create a directory for the protoc installation
+$protoBinDir = "$PSScriptRoot\..\bin"
+New-Item -ItemType Directory -Force -Path $protoBinDir | Out-Null
+
+Write-Host "Downloading protoc v$protocVersion..."
+Invoke-WebRequest -Uri $downloadUrl -OutFile $zipFile
+
+Write-Host "Extracting protoc..."
+Expand-Archive -Path $zipFile -DestinationPath $protoBinDir -Force
+
+Write-Host "Cleaning up..."
+Remove-Item -Path $tempDir -Recurse -Force
+
+# Update environment variable for this session
+$env:PATH = "$protoBinDir\bin;$env:PATH"
+
+Write-Host "protoc has been installed to $protoBinDir\bin"
+Write-Host "protoc version: $(& $protoBinDir\bin\protoc.exe --version)"
+Write-Host "Please add this directory to your PATH environment variable for future sessions."
+Write-Host "To use protoc in this terminal session, it's already added to PATH."
|