A Backend-Driven UI toolkit, build your dynamic UI with json, and the json format is very similar with flutter widget code.

Overview

Pub  Awesome Flutter

Flutter Dynamic Widget

A Backend-Driven UI toolkit, build your dynamic UI with json, and the json format is very similar with flutter widget code.

From 4.0.0-nullsafety.1 version, it supports null-safety.

From 3.0.0 version, it supports exporting your flutter code to json code. please check How to write the json code

From 1.0.4 version, it supports flutter web application.

Table of contents

General info

I work for an e-commerce company. We need to build flexible pages. So we define a light UI protocol, and implement on Android and iOS. We can dynamic update App UIs by pushing a json file. With this ability, we can do some UI A/B testing without publishing App to app store. Flutter allows you to build beautiful native apps on iOS and Android from a single codebase, it can allow you to build web app later. Flutter's hot reload helps you quickly and easily experiment, build UIs, add features, and fix bugs faster. But it still build native app, the UIs can't be dynamic updated. If you want to modify the UIs, you need to publish the updated app to app store. With this project, you can build your UIs from a json string, which is the UI protocol. The json string is very similar with the Flutter widget dart code. All widget type and widget properties are the same.

Widget type will be a type property, and widget's properties will be the json properties too. All properties and their values will be almost the same. You can checkout the following document.

Currently support flutter widgets and properties

Screenshots

Install

1. Depend on it

Add this to your package's pubspec.yaml file:

dependencies:
  dynamic_widget: ^3.0.3

2. Install it

You can install packages from the command line:

with Flutter:

$ flutter packages get

Alternatively, your editor might support flutter packages get. Check the docs for your editor to learn more.

3. Import it

Now in your Dart code, you can use:

import 'package:dynamic_widget/dynamic_widget.dart';

Get started

You should use DynamicWidgetBuilder().build method to covert a json string into flutter widget. It will be time-consuming. so you'd better using FutureBuilder to build the UI.

import 'package:dynamic_widget/dynamic_widget.dart';
class PreviewPage extends StatelessWidget {
  final String jsonString;

  PreviewPage(this.jsonString);

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        // Here we take the value from the MyHomePage object that was created by
        // the App.build method, and use it to set our appbar title.
        title: Text("Preview"),
      ),
      body: FutureBuilder<Widget>(
        future: _buildWidget(context),
        builder: (BuildContext context, AsyncSnapshot<Widget> snapshot) {
          if (snapshot.hasError) {
            print(snapshot.error);
          }
          return snapshot.hasData
              ? SizedBox.expand(
                  child: snapshot.data,
                )
              : Text("Loading...");
        },
      ),
    );
  }

  Future<Widget> _buildWidget(BuildContext context) async {
    return DynamicWidgetBuilder.build(jsonString, context, new DefaultClickListener());
  }
}

How to implement a WidgetParser

  1. You need to implement the WidgetParser abstract class.
  2. Add new created WidgetParser by DynamicWidgetBuilder.addParser(WidgetParser parser) method.

This is a RaisedButton widget parser.

import 'package:dynamic_widget/dynamic_widget/utils.dart';
import 'package:dynamic_widget/dynamic_widget.dart';
import 'package:flutter/material.dart';

class RaisedButtonParser extends WidgetParser {
  @override
  String get widgetName => "RaisedButton";

  @override
  Widget parse(Map<String, dynamic> map, BuildContext buildContext, ClickListener listener) {
    String clickEvent =
        map.containsKey("click_event") ? map['click_event'] : "";

    var raisedButton = RaisedButton(
      color: map.containsKey('color') ? parseHexColor(map['color']) : null,
      disabledColor: map.containsKey('disabledColor')
          ? parseHexColor(map['disabledColor'])
          : null,
      disabledElevation:
          map.containsKey('disabledElevation') ? map['disabledElevation']?.toDouble() : 0.0,
      disabledTextColor: map.containsKey('disabledTextColor')
          ? parseHexColor(map['disabledTextColor'])
          : null,
      elevation: map.containsKey('elevation') ? map['elevation']?.toDouble() : 0.0,
      padding: map.containsKey('padding')
          ? parseEdgeInsetsGeometry(map['padding'])
          : null,
      splashColor: map.containsKey('splashColor')
          ? parseHexColor(map['splashColor'])
          : null,
      textColor:
          map.containsKey('textColor') ? parseHexColor(map['textColor']) : null,
      child: DynamicWidgetBuilder.buildFromMap(map['child'], buildContext, listener),
      onPressed: () {
        listener.onClicked(clickEvent);
      },
    );

    return raisedButton;
  }
}

Add it to parsers list.

DynamicWidgetBuilder.addParser(RaisedButtonParser());

How to add a click listener

Add "click_event" property to your widget json definition. for example:

var raisedButton_json =
'''
{
  "type": "Container",
  "alignment": "center",
  "child": {
    "type": "RaisedButton",
    "color": "##FF00FF",
    "padding": "8,8,8,8",
    "textColor": "#00FF00",
    "elevation" : 8.0,
    "splashColor" : "#00FF00",
    "click_event" : "route://productDetail?goods_id=123",
    "child" : {
      "type": "Text",
      "data": "I am a button"
    }
  }
}

We suggest you'd better to use an URI to define the event, as the exmaple, it's a event for going to a product detail page.

Then, define a ClickListener

class DefaultClickListener implements ClickListener{
  @override
  void onClicked(String event) {
    print("Receive click event: " + event);
  }

}

Finally, pass the listener to build method.

  Future<Widget> _buildWidget() async{

    return DynamicWidgetBuilder.build(jsonString, buildContext, new DefaultClickListener());
  }

How to write the json code

You don't need to write the json code by hand, you can export your flutter code to json code efficiently with DynamicWidgetJsonExportor widget. You just need to wrap your flutter code with DynamicWidgetJsonExportor widget, then invoke its exportJsonString() method, look at following example, click the "export" button, it will find the DynamicWidgetJsonExportor widget, and export its child to json code efficiently.

class _JSONExporterState extends State<JSONExporter> {
  GlobalKey key = GlobalKey();

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        // Here we take the value from the MyHomePage object that was created by
        // the App.build method, and use it to set our appbar title.
        title: Text("export example"),
      ),
      body: Builder(
        builder: (context) => Column(
          children: [
            Expanded(
              child: DynamicWidgetJsonExportor(
                key: key,
                child: Container(
                  child: GridViewWidget(
                      GridViewParams(
                          mainAxisSpacing: 2.0,
                          crossAxisSpacing: 2.0,
                          crossAxisCount: 2,
                          childAspectRatio: 1.6,
                          padding: EdgeInsets.all(10.0),
                          pageSize: 10,
                          children: [
                            ListTile(
                              leading: Text("Leading text"),
                              title: Text("title"),
                              subtitle: Text("subtitle"),
                            ),
                            ListTile(
                              leading: Text("Leading text"),
                              title: Text("title"),
                              subtitle: Text("subtitle"),
                            )
                          ]),
                      context),
                ),
              ),
            ),
            RaisedButton(
              child: Text("Export"),
              onPressed: () {
                var exportor = key.currentWidget as DynamicWidgetJsonExportor;
                var exportJsonString = exportor.exportJsonString();
                Scaffold.of(context).showSnackBar(SnackBar(
                    content: Text("json string was exported to editor page.")));
                Future.delayed(Duration(seconds: 3), (){
                  Navigator.push(
                      context,
                      MaterialPageRoute(
                          builder: (context) =>
                              CodeEditorPage(exportJsonString)));
                });
              },
            )
          ],
        ),
      ),
    );
  }
}

You can use whatever your favorite IDE to build the UI, then use DynamicWidgetJsonExportor to export to json code. For detail, please check the Dynamic Widget Demo source code.

Widget Documents

Already completed widgets:

You can view Currently support widgets and properties here.

Setup

Checkout this project and run demo.

Code Examples

Checkout this project and run demo.

Contact

Created by @[email protected] - feel free to contact me

Comments
  • Added additional types

    Added additional types "SelectableText", "Icon" and "DropCapText" with usage examples

    I would first like to thank you for the awesome plugin! It was exactly what I was looking for.

    For my project I needed type "SelectableText", so I decided to create this pull as others might also be looking for this functionality as well. I also found it a bit odd that the text maxLines property was defaulted to 1 since the native Flutter widgets do not require a value for this property, which I believe would be better suited as the default functionality for this plugin as well.

    opened by mrjacobphillips 7
  • Remove trip advisor icon

    Remove trip advisor icon

    Fixes an issue when using font_awesome_flutter 9.2.0 which removed tripadvisor icon as done in fontawesome.

    https://fontawesome.com/v5/changelog/latest

    opened by alsofr 5
  • Missing FontAwesomeIcons.adobe

    Missing FontAwesomeIcons.adobe

    This Icon has been deleted from FontAwesome

    https://fontawesome.com/icons/adobe

    |-- dynamic_widget 2.0.3
    |   |-- flutter...
    |   |-- font_awesome_flutter 8.9.0
    
    
    
    https://github.com/FortAwesome/Font-Awesome/blob/57005cea6da7d1c67f3466974aecd25485f60452/UPGRADING.md#5140-to-5150
    
    ## 5.14.0 to 5.15.0
    --
    18 |  
    19 | The adobe icon has been removed by legal request of Adobe.
    20 |  
    21 | Font Awesome is no longer able to provide any logos or marks for the Adobe
    
    
    

    Workaround:

    Use this in pubspec.yaml

    dependency_overrides:
      font_awesome_flutter: 8.8.1 # https://pub.dev/packages/font_awesome_flutter
    
    opened by stwonary 4
  • Selectabletextwidget

    Selectabletextwidget

    How can I use the recognizer in Selectabletextwidget: TapGestureRecognizer() .. onTap = () { listener!. onClicked(clickEvent); }, and then write it to the JSON file

    opened by laurent1956 3
  • exporter throwing error when turning code to json

    exporter throwing error when turning code to json

    I have not been successful building multiple widgets. Is this package made for only single widgets or can you wrap multiple widgets into one and export them? I am using version 3.0.5. Also I noticed that not all properties export into the json. For example, when I exported just the container that had decoration, it wasn't passed into the json.

    Build Component

    Widget _buildComponent(GlobalKey key, Widget component) {
        return Padding(
        padding: const EdgeInsets.all(8.0),
        child: DynamicWidgetJsonExportor(key: key, child: component),
      );
    }
    

    Component:

    Container(
                  height: 200,
                  margin: EdgeInsets.symmetric(horizontal: 15.0),
                  decoration: BoxDecoration(
                    borderRadius: BorderRadius.all(Radius.circular(20.0)),
                    image: DecorationImage(
                      image: AssetImage('assets/weather/clear-day/bg.jpg'),
                      colorFilter: ColorFilter.mode(
                          Colors.black.withOpacity(0.75), BlendMode.dstATop),
                      fit: BoxFit.cover,
                    ),
                  ),
                  child: Stack(
                    children: [],
                  ),
    

    Function:

    var exportor = key.currentWidget as DynamicWidgetJsonExportor;
                    var exportJsonString = exportor.exportJsonString();
                    setState(() {
                      json = exportJsonString;
                      debugPrint('the widget json: $json');
                    });
    

    Log:

    E/flutter ( 7669): [ERROR:flutter/lib/ui/ui_dart_state.cc(177)] Unhandled Exception: type 'AlignmentDirectional' is not a subtype of type 'Alignment'
    E/flutter ( 7669): #0      StackWidgetParser.export
    package:dynamic_widget/…/basic/stack_positioned_widgets_parser.dart:71
    E/flutter ( 7669): #1      DynamicWidgetBuilder.export
    package:dynamic_widget/dynamic_widget.dart:140
    E/flutter ( 7669): #2      ContainerWidgetParser.export
    package:dynamic_widget/…/basic/container_widget_parser.dart:71
    E/flutter ( 7669): #3      DynamicWidgetBuilder.export
    package:dynamic_widget/dynamic_widget.dart:140
    E/flutter ( 7669): #4      DynamicWidgetJsonExportor.exportJsonString.<anonymous closure>
    package:dynamic_widget/…/basic/dynamic_widget_json_exportor.dart:27
    E/flutter ( 7669): #5      ComponentElement.visitChildren
    package:flutter/…/widgets/framework.dart:4681
    E/flutter ( 7669): #6      Element.visitChildElements
    package:flutter/…/widgets/framework.dart:3241
    E/flutter ( 7669): #7      DynamicWidgetJsonExportor.exportJsonString
    package:dynamic_widget/…/basic/dynamic_widget_json_exportor.dart:26
    E/flutter ( 7669): #8      _DynamicExporterPageState.build.<anonymous closure>
    package:kai_mobile/…/dynamic_widget/dynamic_widget_exporter_screen.dart:33
    E/flutter ( 7669): #9      _InkResponseState._handleTap
    package:flutter/…/material/ink_well.dart:993
    E/flutter ( 7669): #10     _InkResponseState.build.<anonymous closure>
    package:flutter/…/material/ink_well.dart:1111
    E/flutter ( 7669): #11     GestureRecognizer.invokeCallback
    package:flutter/…/gestures/recognizer.dart:183
    E/flutter ( 7669): #12     TapGestureRecognizer.handleTapUp
    package:flutter/…/gestures/tap.dart:598
    E/flutter ( 7669): #13     BaseTapGestureRecognizer._checkUp
    package:flutter/…/gestures/tap.dart:287
    E/flutter ( 7669): #14     BaseTapGestureRecognizer.acceptGesture
    package:flutter/…/gestures/tap.dart:259
    E/flutter ( 7669): #15     GestureArenaManager.sweep
    package:flutter/…/gestures/arena.dart:157
    E/flutter ( 7669): #16     GestureBinding.handleEvent
    package:flutter/…/gestures/binding.dart:362
    E/flutter ( 7669): #17     GestureBinding.dispatchEvent
    package:flutter/…/gestures/binding.dart:338
    E/flutter ( 7669): #18     RendererBinding.dispatchEvent
    package:flutter/…/rendering/binding.dart:267
    E/flutter ( 7669): #19     GestureBinding._handlePointerEvent
    package:flutter/…/gestures/binding.dart:295
    E/flutter ( 7669): #20     GestureBinding._flushPointerEventQueue
    package:flutter/…/gestures/binding.dart:240
    E/flutter ( 7669): #21     GestureBinding._handlePointerDataPacket
    package:flutter/…/gestures/binding.dart:213
    E/flutter ( 7669): #22     _rootRunUnary (dart:async/zone.dart:1206:13)
    E/flutter ( 7669): #23     _CustomZone.runUnary (dart:async/zone.dart:1100:19)
    E/flutter ( 7669): #24     _CustomZone.runUnaryGuarded (dart:async/zone.dart:1005:7)
    E/flutter ( 7669): #25     _invoke1 (dart:ui/hooks.dart:265:10)
    E/flutter ( 7669): #26     _dispatchPointerDataPacket (dart:ui/hooks.dart:174:5)
    
    opened by mike-gallego 3
  • 项目中有大量的非空判断,是否可以简化?

    项目中有大量的非空判断,是否可以简化?

    例如:

    String clickEvent = map.containsKey("click_event") ? map['click_event'] : "";
    // 等价
    String clickEvent = map['click_event'] ?? '';
    
    opened by freedom-shen 3
  • showcase

    showcase

    Is there a blog post or live app on the stores that use this, or live examples from the network?

    This just really seems like it shows a lot of promise re: code push competition? Thanks

    opened by neiljaywarner 3
  • 4.0.4 error with Pie_chart_outlined / pie_chart_outline

    4.0.4 error with Pie_chart_outlined / pie_chart_outline

    Hi. I got a problem running my app after upgraded to Flutter 2.10.4.

    ../../flutter/.pub-cache/hosted/pub.dartlang.org/dynamic_widget-4.0.4/lib/dynamic_widget/icons_helper.dart:742:31: Error: Member not found: 'pie_chart_outlined'. 'pie_chart_outlined': Icons.pie_chart_outlined, ^^^^^^^^^^^^^^^^^^

    I checked the #89 and this issue is already solved but i don't know why the error persist.

    I'm using 4.0.4 version

    dynamic_widget: 4.0.4

    Icon_Helper.dart of pub version line 742: 'pie_chart_outlined': Icons.pie_chart_outlined,

    Icon_Helper.dart of repository version line 742: 'pie_chart_outline': Icons.pie_chart_outline,

    Flutter Doctor

    `[✓] Flutter (Channel stable, 2.10.4, on macOS 12.1 21C52 darwin-arm, locale en-CO) • Flutter version 2.10.4 at /Users/cesarurrego/Development/flutter • Upstream repository https://github.com/flutter/flutter.git • Framework revision c860cba910 (4 weeks ago), 2022-03-25 00:23:12 -0500 • Engine revision 57d3bac3dd • Dart version 2.16.2 • DevTools version 2.9.2

    [✓] Android toolchain - develop for Android devices (Android SDK version 32.1.0-rc1) • Android SDK at /Users/cesarurrego/Development/Android/SDK • Platform android-32, build-tools 32.1.0-rc1 • ANDROID_HOME = /Users/cesarurrego/Development/Android/SDK • ANDROID_SDK_ROOT = /Users/cesarurrego/Development/Android/SDK • Java binary at: /Applications/Android Studio.app/Contents/jre/Contents/Home/bin/java • Java version OpenJDK Runtime Environment (build 11.0.10+0-b96-7249189) • All Android licenses accepted.

    [✓] Xcode - develop for iOS and macOS (Xcode 13.3) • Xcode at /Applications/Xcode.app/Contents/Developer • CocoaPods version 1.11.3

    [✓] Chrome - develop for the web • Chrome at /Applications/Google Chrome.app/Contents/MacOS/Google Chrome

    [✓] Android Studio (version 2020.3) • Android Studio at /Applications/Android Studio.app/Contents • Flutter plugin can be installed from: 🔨 https://plugins.jetbrains.com/plugin/9212-flutter • Dart plugin can be installed from: 🔨 https://plugins.jetbrains.com/plugin/6351-dart • Java version OpenJDK Runtime Environment (build 11.0.10+0-b96-7249189)

    [✓] VS Code (version 1.66.1) • VS Code at /Applications/Visual Studio Code.app/Contents • Flutter extension can be installed from: 🔨 https://marketplace.visualstudio.com/items?itemName=Dart-Code.flutter

    [✓] Connected device (3 available) • sdk gphone64 arm64 (mobile) • emulator- • android-arm64 • Android 12 (API 31) (emulator) • iPhone 13 mini (mobile) • 6C417FAC • ios • com.apple.CoreSimulator.SimRuntime.iOS-15-4 (simulator) • Chrome (web) • chrome • web-javascript • Google Chrome 100.0.4

    [✓] HTTP Host Availability • All required HTTP hosts are available `

    opened by curregoz 2
  • Remove tripadvisor

    Remove tripadvisor

    https://github.com/fluttercommunity/font_awesome_flutter/commit/32a780255717987fcdbb190ab281c25c3f00f3ab#diff-345938ec3543207b10539458bf2a1ee98d0227980d6b0c9b2ae891e38f1c12a3

    tripadvisor has been removed on font awesome 5.15.4.

    opened by ChangJoo-Park 2
  • type 'int' is not a subtype of type 'double'

    type 'int' is not a subtype of type 'double'

    When minifying a JSON. any double without decimal are converted into int type

    Original

        {
          "type": "SizedBox",
          "height": 19.0,
          "child": {
            "type": "Container",
            "color": "#FFFFFF"
          }
        },
    

    minified

    {"type":"SizedBox","height":19,"child":{"type":"Container","color":"#FFFFFF"}}
    

    https://codebeautify.org/jsonminifier

    Error when building above JSON

    The following _TypeError was thrown building BlocBuilder<Cubit, String>
    type 'int' is not a subtype of type 'double'
    
    The relevant error-causing widget was: 
      BlocBuilder<Cubit, String>home_page.dart:
    When the exception was thrown, this was the stack: 
    #0      SizedBoxWidgetParser.parse (package:dynamic_widget/dynamic_widget/basic/sizedbox_widget_parser.dart:34:18)
    #1      DynamicWidgetBuilder.buildFromMap (package:dynamic_widget/dynamic_widget.dart:116:21)
    #2      DynamicWidgetBuilder.buildWidgets (package:dynamic_widget/dynamic_widget.dart:127:14)
    #3      ListViewWidgetParser.parse (package:dynamic_widget/dynamic_widget/scrolling/listview_widget_parser.dart:27:41)
    #4      DynamicWidgetBuilder.buildFromMap (package:dynamic_widget/dynamic_widget.dart:116:21)
    

    There is a PR #48 which solve this issue on some Parser. Still missing the fix in SizedBox parser though.

    opened by stwonary 2
  • Fix json number parse

    Fix json number parse

    Fix SizedBox and FontSize int to double parser.

    When a JSON is minified. Any double without decimal is converted to int e.g: 20.0 -> `20

    This PR safely cast and parse to double if the value exists.

    opened by stwonary 2
  • Package fails to compile with Flutter 3.3.0

    Package fails to compile with Flutter 3.3.0

    Hi, I'm having an issue after upgrading my Flutter version to 3.3.0 using flutter upgrade

    Flutter 3.3.0 no longer supports RaisedButton, and therefore does not recognize the method call made in dynamic_widget/basic/button_widget_parser.dart.

    The same is true of BorderRadiusGeometry, which no longer supports accessing its properties (topLeft, topRight, etc.) in dynamic_widget/basic/cliprrect.dart

    This causes projects that depend on this package to fail when attempting to compile.


    To anyone facing the same issue, the only current workaround I've found is to simply not upgrade to Flutter version 3.3.0. Or if you already have, downgrade back to the previous version by using flutter downgrade

    opened by proxy2501 4
  • Flutter 3 compiling compatibility

    Flutter 3 compiling compatibility

    The FlatButton, RaisedButton and OutlineButton widgets have been replaced by TextButton, ElevatedButton, and OutlinedButton respectively. Each new button class has its own theme: TextButtonTheme, ElevatedButtonTheme, and OutlinedButtonTheme. The original ButtonTheme class is no longer used. The appearance of buttons is specified by a ButtonStyle object, instead of a large set of widget parameters and properties. This is roughly comparable to the way that the appearance of text is defined with a TextStyle object. The new button themes are also configured with a ButtonStyle object. A ButtonStyle is itself just a collection of visual properties. Many of these properties are defined with MaterialStateProperty, which means that their value can depend on the button’s state.

    They removed it in Flutter 3, and there is a necessity of removing it from dynamic_widget code base too. https://github.com/flutter/flutter/issues/52098

    https://github.com/dengyin2000/dynamic_widget/blob/d9ae6e2ebf3c9561882cf6e098feec69fd5107d2/lib/dynamic_widget/basic/button_widget_parser.dart

    I'll create an PR soon.

    opened by stwonary 0
  • Plans for new release?

    Plans for new release?

    Heya, first of all for the great package.

    Do you have plans for the next release, currently the https://github.com/dengyin2000/dynamic_widget/issues/91 issue is still a blocker for many of us?

    opened by KlausQalmari 1
Releases(4.0.4)
  • 4.0.4(Feb 18, 2022)

    [4.0.3] - add TextButton Widget and Card widget parser

    • add TextButton widget parser, thanks ChangJoo Park(박창주)
    • add Card widget parser, thanks linpc

    [4.0.4] - add SingleChildScrollView widget parser and bugfix

    • add add SingleChildScrollView widget parser
    • bugfix
    Source code(tar.gz)
    Source code(zip)
  • 4.0.2(Aug 16, 2021)

    [3.0.4] - Fix bugs

    • Fix the bug which photo can't be display in pub.dev

    [3.0.5] - Add Scaffold and AppBar Widget

    • Add Scaffold and AppBar Widget.
    • Fix bugs.

    [3.0.6] - bug fixed

    • Fix the bug, https://github.com/dengyin2000/dynamic_widget/issues/64

    [4.0.0-nullsafety.1] - null safety migration

    • null safety migration

    [4.0.0] - null safety migration

    • null safety version released.

    [4.0.1] - add ElevatedButtonParser

    • add ElevatedButtonParser.

    [4.0.2] - add DividerWidget and RotatedBox widget parser

    • add DividerWidget and RotatedBox widget parser.
    Source code(tar.gz)
    Source code(zip)
  • 3.0.3(Jan 2, 2021)

  • 3.0.2(Dec 31, 2020)

Owner
dengyin2000
dengyin2000
A simple screen that is shown when your app gets crashed instead of the normal crash dialog. It's very similar to the one in Flutter.

Red Screen Of Death What A simple screen that is shown when your app gets crashed instead of the normal crash dialog. It's very similar to the one in

Ahmad Melegy 178 Dec 9, 2022
A Gherkin parsers and runner for Dart and Flutter which is very similar to cucumber

flutter_gherkin A fully featured Gherkin parser and test runner. Works with Flutter and Dart 2. This implementation of the Gherkin tries to follow as

Jon Samwell 184 Nov 18, 2022
A Very Good Flutter Federated Plugin created by the Very Good Ventures Team 🦄

Very Good Flutter Plugin Developed with ?? by Very Good Ventures ?? A Very Good Flutter Plugin created by the Very Good Ventures Team. Getting Started

Very Good Open Source 14 Oct 19, 2022
A Very Good Flutter Package Template created by the Very Good Ventures Team 🦄

Very Good Flutter Package Developed with ?? by Very Good Ventures ?? A Very Good Flutter package created by Very Good Ventures ?? . Getting Started ??

Very Good Open Source 32 Dec 13, 2022
Dynamic var - Dart dilinde dynamic ve var veri tiplerini anlamanızı kolaylaştıracak örnektir.

dynamic ve var arasındaki fark dynamic Tanımlanan değişkenin tipi daha sonra kod içerisinde değişebilir. Örneğin int olarak tanımlanan bir a değişkeni

Abdullah Sevmez 0 Jan 1, 2022
A Very Good Dart Package Template created by the Very Good Ventures Team 🦄

Very Good Dart Package Developed with ?? by Very Good Ventures ?? A Very Good Dart package created by Very Good Ventures ?? . Getting Started ?? Insta

Very Good Open Source 8 Aug 14, 2022
A Very Good Dart CLI Template created by the Very Good Ventures Team 🦄

Very Good Dart CLI Developed with ?? by Very Good Ventures ?? A Dart CLI template created by the Very Good Ventures Team. Generated by the Very Good C

Very Good Open Source 26 Dec 15, 2022
Simple Chat UI - This template is a simple chat ui build with flutter ui toolkit.

Simple Chat UI This template is a simple chat ui build with flutter ui toolkit. TODO dark mode support image support gif, video, ... web mode desktop

null 2 Apr 24, 2022
A flutter plugin about qr code or bar code scan , it can scan from file、url、memory and camera qr code or bar code .Welcome to feedback your issue.

r_scan A flutter plugin about qr code or bar code scan , it can scan from file、url、memory and camera qr code or bar code .Welcome to feedback your iss

PengHui Li 112 Nov 11, 2022
Widget to count the amount of nested widget tree, useful in the dynamic construction of the interface when it is important to know the depth of widget.

widget_tree_depth_counter Widget Tree Depth Counter WidgetTreeDepthCounter is a simple widget to count the amount of nested widget tree, useful in the

Riccardo Cucia 4 Aug 1, 2022
COVID-19 application made with Flutter, following Test Driven Development (TDD) and Clean Architecture along with Internationalization with JSON.

Covid App COVID-19 application made with Flutter, following Test Driven Development (TDD) and Clean Architecture along with Internationalization with

Sandip Pramanik 4 Aug 4, 2022
A Very Good Blog App using Flutter, flutter_bloc, django rest framework for backend✨

Very Good Blog App - Blog sharing Features Login, register, manage personal information. Compose, edit, post blog to share with everyone. Like, save b

Nguyen Minh Dung 14 Nov 27, 2022
A Flutter widget to show an icon collection to pick. This widget extend TextField and has a similar behavior as TextFormField

icon_picker A Flutter widget to show an icon collection to pick. This widget extend TextField and has a similar behavior as TextFormField Usage In the

m3uzz Soluções em TI 11 Sep 27, 2022
flutter web app with given code and example. Step by step teaching how to build a flutter web app with backend

flutter_web A new Flutter project. Getting Started This project is a starting point for a Flutter application. A few resources to get you started if t

dbestech 20 Oct 26, 2022
Crypto Loss Gain Calculator App build with Flutter. It developed with DDD (Domain Driven Design) principles.

Crypto Loss Gain Calculator Crypto Loss Gain Calculator App build with Flutter. It developed with DDD (Domain Driven Design) principles. Domain-Driven

Selim Üstel 9 Dec 27, 2022
Multi Translator build with Flutter, It developed with DDD (Domain Driven Design) principles.

Multi Translator App An app utilizes to translate any text to multiple languages. Features Localization Multiple Translation Single Translation Deep L

Selim Üstel 7 Dec 27, 2022
MoneyTextFormField is one of the flutter widget packages that can be used to input values in the form of currencies, by displaying the output format in realtime.

MoneyTextFormField MoneyTextFormField is one of the flutter widget packages that can be used to input values in the form of currencies, by displaying

Fadhly Permata 11 Jan 1, 2023
An application used to manage all your tabs in a clean, scrollable, categorized format.

Tabmanager Created by Sami-ul You can contact me here: [email protected] Recent updates Made the app run faster by using the backend to serve t

Sami 7 Nov 2, 2022
CoVAC is an all-in-one Covid info toolkit app, providing users the facility to check for available slots along with receiving the latest updates related to the pandemic and the virus.

CoVAC - Covid 19 Vaccine Availability Checker Introduction ?? CoVAC is an android application developed to provide users the facility to check the ava

Aryan Kenchappagol 6 Dec 29, 2021