duck 1.0.2 copy "duck: ^1.0.2" to clipboard
duck: ^1.0.2 copied to clipboard

Dynamic UI Component Kit is for creating dynamically updatable UI components with Over-The-Air (OTA) updates and skip app store approval.

example/example.md

Creating Custom Components #

You can create your own components by extending DuckComponent. Here's an example of a horizontal container component:

import 'package:duck/core/duck_component/duck_component.dart';
import 'package:duck/core/duck_component/duck_component_list_converter.dart';
import 'package:duckrunner/components/horizontal_container/horizontal_container_widget.dart';
import 'package:flutter/widgets.dart';
import 'package:json_annotation/json_annotation.dart';

part 'horizontal_container_data.g.dart';

@JsonSerializable()
class HorizontalContainerData extends DuckComponent {
  static const String componentType = 'horizontalContainer';

  @override
  String get type => componentType;

  @DuckComponentListConverter()
  final List<DuckComponent> list;

  HorizontalContainerData({required this.list});

  @override
  Widget buildWidget(BuildContext context) {
    return HorizontalContainerWidget(
      data: HorizontalContainerWidgetData.fromComponent(this),
    );
  }

  factory HorizontalContainerData.fromJson(Map<String, dynamic> json) =>
      _$HorizontalContainerDataFromJson(json);

  @override
  Map<String, dynamic> toJson() => _$HorizontalContainerDataToJson(this);

  factory HorizontalContainerData.mock() {
    return HorizontalContainerData(list: []);
  }
}

Then create the widget implementation:

import 'package:duck/core/duck_component/duck_component.dart';
import 'package:duckrunner/components/horizontal_container/horizontal_container_data.dart';
import 'package:flutter/material.dart';

class HorizontalContainerWidgetData {
  final List<DuckComponent> list;

  HorizontalContainerWidgetData({required this.list});

  factory HorizontalContainerWidgetData.fromComponent(
    HorizontalContainerData component,
  ) {
    return HorizontalContainerWidgetData(list: component.list);
  }
}

class HorizontalContainerWidget extends StatelessWidget {
  const HorizontalContainerWidget({super.key, required this.data});

  final HorizontalContainerWidgetData data;

  @override
  Widget build(BuildContext context) {
    return SizedBox(
      width: double.infinity,
      child: Column(
        mainAxisSize: MainAxisSize.min,
        mainAxisAlignment: MainAxisAlignment.start,
        children: data.list
            .map((component) => component.buildWidget(context))
            .toList(),
      ),
    );
  }
}

Finally, don't forget to register your custom component in main.dart:

Duck(
  baseUrl: baseUrl,
  components: {
    HorizontalContainerData.componentType: HorizontalContainerData.fromJson,
  },
);
0
likes
155
points
180
downloads

Publisher

verified publisherflexxxlab.com

Weekly Downloads

Dynamic UI Component Kit is for creating dynamically updatable UI components with Over-The-Air (OTA) updates and skip app store approval.

Homepage

Documentation

API reference

License

Apache-2.0 (license)

Dependencies

async_var, flutter, get_it, http, json_annotation, provider

More

Packages that depend on duck