Provide route generator to create route map quickly by annotations.

Overview

ff_annotation_route

pub package GitHub stars GitHub forks GitHub license GitHub issues flutter-candies

Languages: English | 中文简体

Description

Provide a route generator to create route map quickly by annotations.

Usage

Add packages to dependencies

Add the package to dependencies in your project/packages's pubspec.yaml

  • null-safety
environment:
  sdk: '>=2.12.0 <3.0.0'
dependencies:
  ff_annotation_route_core: ^2.0.2
  ff_annotation_route_library: ^2.0.1
  • non-null-safety
environment:
  sdk: '>=2.6.0 <2.12.0'
dependencies:
  ff_annotation_route_core: ^2.0.2-non-null-safety
  ff_annotation_route_library: ^2.0.2-non-null-safety

Download with flutter packages get

Add annotation

Empty Constructor

import 'package:ff_annotation_route/ff_annotation_route.dart';

@FFRoute(
  name: "fluttercandies://mainpage",
  routeName: "MainPage",
)
class MainPage extends StatelessWidget
{
  // ...
}

Constructor with arguments

The tool will handle it. What you should take care is that provide import url by setting argumentImports if it has class/enum argument.you can use @FFArgumentImport() instead now.

@FFArgumentImport('hide TestMode2')
import 'package:example1/src/model/test_model.dart';
@FFArgumentImport()
import 'package:example1/src/model/test_model1.dart' hide TestMode3;
import 'package:ff_annotation_route_library/ff_annotation_route_library.dart';

@FFRoute(
  name: 'flutterCandies://testPageE',
  routeName: 'testPageE',
  description: 'Show how to push new page with arguments(class)',
  // argumentImports are still work for some cases which you can't use @FFArgumentImport()
  // argumentImports: <String>[
  //   'import \'package:example1/src/model/test_model.dart\';',
  //   'import \'package:example1/src/model/test_model1.dart\';',
  // ],
  exts: <String, dynamic>{
    'group': 'Complex',
    'order': 1,
  },
)
class TestPageE extends StatelessWidget {
  const TestPageE({
    this.testMode = const TestMode(
      id: 2,
      isTest: false,
    ),
    this.testMode1,
  });
  factory TestPageE.deafult() => TestPageE(
        testMode: TestMode.deafult(),
      );

  factory TestPageE.required({@required TestMode testMode}) => TestPageE(
        testMode: testMode,
      );

  final TestMode testMode;
  final TestMode1 testMode1;
}

FFRoute

Parameter Description Default
name The name of the route (e.g., "/settings") required
showStatusBar Whether to show the status bar. true
routeName The route name to track page. ''
pageRouteType The type of page route.(material, cupertino, transparent) -
description The description of the route. ''
exts The extend arguments. -
argumentImports The imports of arguments. For example, class/enum argument should provide import url. you can use @FFArgumentImport() instead now. -

Generate Route File

Environment

Add dart bin into to your $PATH.

cache\dart-sdk\bin

pub-global

Activate the plugin

  • null-safety

pub global activate ff_annotation_route

  • non-null-safety

pub global activate ff_annotation_route 6.x.x-non-null-safety

Execute command

Go to your project's root and execute command.

ff_route <command> [arguments]

Command Parameter

Available commands:

-h, --[no-]help                Help usage
-p, --path                     Flutter project root path
                               (defaults to ".")
-n, --name                     Routes constant class name.
                               (defaults to "Routes")
-o, --output                   The path of main project route file and helper file.It is relative to the lib directory
-g, --git                      scan git lib(you should specify package names and split multiple by ,)
    --routes-file-output       The path of routes file. It is relative to the lib directory
    --const-ignore             The regular to ignore some route consts
    --[no-]package             Is it a package
    --[no-]super-arguments    Whether generate page arguments helper class
-s, --[no-]save                Whether save the arguments into the local
                               It will execute the local arguments if run "ff_route" without any arguments
    --[no-]null-safety         enable null-safety
                               (defaults to on)

Navigator 1.0

you can see full demo in example

Main.dart

import 'package:ff_annotation_route_library/ff_annotation_route_library.dart';
import 'package:flutter/material.dart';
import 'example_route.dart';
import 'example_routes.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  // This widget is the root of your application.
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'ff_annotation_route demo',
      debugShowCheckedModeBanner: false,
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      initialRoute: Routes.fluttercandiesMainpage,
      onGenerateRoute: (RouteSettings settings) {
        return onGenerateRoute(
          settings: settings,
          getRouteSettings: getRouteSettings,
          routeSettingsWrapper: (FFRouteSettings ffRouteSettings) {
            if (ffRouteSettings.name == Routes.fluttercandiesMainpage ||
                ffRouteSettings.name ==
                    Routes.fluttercandiesDemogrouppage.name) {
              return ffRouteSettings;
            }
            return ffRouteSettings.copyWith(
                widget: CommonWidget(
              child: ffRouteSettings.widget,
              title: ffRouteSettings.routeName,
            ));
          },
        );
      },
    );
  }
}

Push

Push name
  Navigator.pushNamed(context, Routes.fluttercandiesMainpage /* fluttercandies://mainpage */);
Push name with arguments
  • arguments MUST be a Map<String, dynamic>
  Navigator.pushNamed(
    context,
    Routes.flutterCandiesTestPageE,
    arguments: <String, dynamic>{
      constructorName: 'required',
      'testMode': const TestMode(
        id: 100,
        isTest: true,
      ),
    },
  );
  • enable --super-arguments
  Navigator.pushNamed(
    context,
    Routes.flutterCandiesTestPageE.name,
    arguments: Routes.flutterCandiesTestPageE.requiredC(
      testMode: const TestMode(
        id: 100,
        isTest: true,
      ),
    ),
  );

Navigator 2.0

you can see full demo in example1

Main.dart

import 'dart:convert';
import 'package:example1/src/model/test_model.dart';
import 'package:ff_annotation_route_library/ff_annotation_route_library.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'example1_route.dart';
import 'example1_routes.dart';

void main() {
  // tool will handle simple types(int,double,bool etc.), but not all of them.
  // for example, you can type in web browser
  // http://localhost:64916/#flutterCandies://testPageF?list=[4,5,6]&map={"ddd":123}&testMode={"id":2,"isTest":true}
  // the queryParameters will be converted base on your case.
  FFConvert.convert = <T>(dynamic value) {
    if (value == null) {
      return null;
    }
    print(T);
    final dynamic output = json.decode(value.toString());
    if (<int>[] is T && output is List<dynamic>) {
      return output.map<int>((dynamic e) => asT<int>(e)).toList() as T;
    } else if (<String, String>{} is T && output is Map<dynamic, dynamic>) {
      return output.map<String, String>((dynamic key, dynamic value) =>
          MapEntry<String, String>(key.toString(), value.toString())) as T;
    } else if (const TestMode() is T && output is Map<dynamic, dynamic>) {
      return TestMode.fromJson(output) as T;
    }

    return json.decode(value.toString()) as T;
  };
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  final FFRouteInformationParser _ffRouteInformationParser =
      FFRouteInformationParser();

  final FFRouterDelegate _ffRouterDelegate = FFRouterDelegate(
    getRouteSettings: getRouteSettings,
    pageWrapper: <T>(FFPage<T> ffPage) {
      return ffPage.copyWith(
        widget: ffPage.name == Routes.fluttercandiesMainpage ||
                ffPage.name == Routes.fluttercandiesDemogrouppage.name
            ? ffPage.widget
            : CommonWidget(
                child: ffPage.widget,
                routeName: ffPage.routeName,
              ),
      );
    },
  );
  // This widget is the root of your application.
  @override
  Widget build(BuildContext context) {
    return MaterialApp.router(
      title: 'ff_annotation_route demo',
      debugShowCheckedModeBanner: false,
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      // initialRoute
      routeInformationProvider: PlatformRouteInformationProvider(
        initialRouteInformation: const RouteInformation(
          location: Routes.fluttercandiesMainpage,
        ),
      ),
      routeInformationParser: _ffRouteInformationParser,
      routerDelegate: _ffRouterDelegate,
    );
  }
}

FFRouteInformationParser

It's working on Web when you type in browser or report to browser. A delegate that is used by the [Router] widget to parse a route information into a configuration of type [RouteSettings].

for example:

xxx?a=1&b=2 <=> RouteSettings(name:'xxx',arguments:<String, dynamic>{'a':'1','b':'2'})

FFRouterDelegate

A delegate that is used by the [Router] widget to build and configure anavigating widget.

It provides push/pop methods like [Navigator].

  FFRouterDelegate.of(context).pushNamed<void>(
    Routes.flutterCandiesTestPageF.name,
    arguments: Routes.flutterCandiesTestPageF.d(
      <int>[1, 2, 3],
      map: <String, String>{'ddd': 'dddd'},
      testMode: const TestMode(id: 1, isTest: true),
    ),
  );

you can find more demo in test_page_c.dart.

Push

Push name
  FFRouterDelegate.of(context).pushNamed<void>(
    Routes.flutterCandiesTestPageA,
  );
Push name with arguments
  • arguments MUST be a Map<String, dynamic>
  FFRouterDelegate.of(context).pushNamed<void>(
    Routes.flutterCandiesTestPageF.name,
    arguments: Routes.flutterCandiesTestPageF.d(
      <int>[1, 2, 3],
      map: <String, String>{'ddd': 'dddd'},
      testMode: const TestMode(id: 1, isTest: true),
    ),
  );
  • enable --super-arguments
  FFRouterDelegate.of(context).pushNamed<void>(
    Routes.flutterCandiesTestPageF.name,
    arguments: <String, dynamic>{
        'list': <int>[1, 2, 3],
        'map': <String, String>{'ddd': 'dddd'},
        'testMode': const TestMode(id: 1, isTest: true),
     }
  )

Code Hints

you can use route as 'Routes.flutterCandiesTestPageE', and see Code Hints from ide.

  • default
  /// 'This is test page E.'
  ///
  /// [name] : 'flutterCandies://testPageE'
  ///
  /// [routeName] : 'testPageE'
  ///
  /// [description] : 'This is test page E.'
  ///
  /// [constructors] :
  ///
  /// TestPageE : [TestMode testMode, TestMode1 testMode1]
  ///
  /// TestPageE.deafult : []
  ///
  /// TestPageE.required : [TestMode(required) testMode]
  ///
  /// [exts] : {group: Complex, order: 1}
  static const String flutterCandiesTestPageE = 'flutterCandies://testPageE';
  • enable --super-arguments
  /// 'This is test page E.'
  ///
  /// [name] : 'flutterCandies://testPageE'
  ///
  /// [routeName] : 'testPageE'
  ///
  /// [description] : 'This is test page E.'
  ///
  /// [constructors] :
  ///
  /// TestPageE : [TestMode testMode, TestMode1 testMode1]
  ///
  /// TestPageE.test : []
  ///
  /// TestPageE.requiredC : [TestMode(required) testMode]
  ///
  /// [exts] : {group: Complex, order: 1}
  static const _FlutterCandiesTestPageE flutterCandiesTestPageE =
      _FlutterCandiesTestPageE();

  class _FlutterCandiesTestPageE {
    const _FlutterCandiesTestPageE();

    String get name => 'flutterCandies://testPageE';

    Map<String, dynamic> d(
            {TestMode testMode = const TestMode(id: 2, isTest: false),
            TestMode1 testMode1}) =>
        <String, dynamic>{
          'testMode': testMode,
          'testMode1': testMode1,
        };

    Map<String, dynamic> test() => const <String, dynamic>{
          'constructorName': 'test',
        };

    Map<String, dynamic> requiredC({@required TestMode testMode}) =>
        <String, dynamic>{
          'testMode': testMode,
          'constructorName': 'requiredC',
        };

    @override
    String toString() => name;
  }
Comments
  • Error: Too many positional arguments: 0 allowed, but 1 found

    Error: Too many positional arguments: 0 allowed, but 1 found

    3.3.0 执行pub active 会出现错误 ff_annotation_route-3.3.0/lib/src/utils/ast.dart:105:85 这行替换即可 final Scanner scanner = Scanner(source, reader, errorCollector)..configureFeatures(featureSet:featureSet);

    bug 
    opened by wangyujie1207 6
  • Bug: throwing error when define argumentNames with double quotes

    Bug: throwing error when define argumentNames with double quotes

    @FFRoute(
      name: 'rexiapp://sms-confirm',
      routeName: 'sms-confirm',
      argumentNames: ['phoneNumber'],
    )
    
    FormatException: Unexpected character (at character 2)
    ['phoneNumber']
    
    opened by NarHakobyan 6
  • 无法扫描依赖的package (git)

    无法扫描依赖的package (git)

    name: demo_project
    description: A new Flutter project.
    
    # The following line prevents the package from being accidentally published to
    # pub.dev using `flutter pub publish`. This is preferred for private packages.
    publish_to: 'none' # Remove this line if you wish to publish to pub.dev
    
    # The following defines the version and build number for your application.
    # A version number is three numbers separated by dots, like 1.2.43
    # followed by an optional build number separated by a +.
    # Both the version and the builder number may be overridden in flutter
    # build by specifying --build-name and --build-number, respectively.
    # In Android, build-name is used as versionName while build-number used as versionCode.
    # Read more about Android versioning at https://developer.android.com/studio/publish/versioning
    # In iOS, build-name is used as CFBundleShortVersionString while build-number used as CFBundleVersion.
    # Read more about iOS versioning at
    # https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html
    version: 1.0.0+1
    
    environment:
      sdk: ">=2.17.0 <3.0.0"
    
    # Dependencies specify other packages that your package needs in order to work.
    # To automatically upgrade your package dependencies to the latest versions
    # consider running `flutter pub upgrade --major-versions`. Alternatively,
    # dependencies can be manually updated by changing the version numbers below to
    # the latest version available on pub.dev. To see which dependencies have newer
    # versions available, run `flutter pub outdated`.
    dependencies:
      flutter:
        sdk: flutter
    
    
      # The following adds the Cupertino Icons font to your application.
      # Use with the CupertinoIcons class for iOS style icons.
      cupertino_icons: ^1.0.2
    
      package_a:
        git: [email protected]:hilondev/package_a.git
    
      package_base:
        git: [email protected]:hilondev/package_base.git
    
      ff_annotation_route_library: ^3.0.0
      ff_annotation_route: ^9.2.0
    
    
    dev_dependencies:
      flutter_test:
        sdk: flutter
    
    
    

    ---- 执行 ff_route命令后:

    ff_route  --super-arguments --null-safety --no-arguments-case-sensitive -s  --git package_a
    
    

    Scanning package : demo_project Found annotation route : lib/main.dart ------ class : MyHomePage Generate : lib/demo_project_routes.dart Generate : lib/demo_project_route.dart

    并没有package_a的路由生成,demo_project_routes.dart文件里没有package_a相关的路由信息

    opened by hilondev 5
  • feature: routeHelper 支持无context跳转

    feature: routeHelper 支持无context跳转

    大佬,您好,我又来了🙃,您看着review下,如果可以酌情合并下,当然最好了!放心arguments??={};我注掉了😄 参考:Flutter | 通过 ServiceLocator 实现无 context 导航 示例:(部分代码)

    
    List<String> initialRouteInfo = window.defaultRouteName.split('&');
    String initialRoute = initialRouteInfo.first;
    String initialRouteParams = initialRouteInfo.length > 1 ? initialRouteInfo[1] : null;
    
    MaterialApp(
          title: 'Flutter example',
          navigatorObservers: [FFNavigatorObserver.getInstance()],
          // initialRoute: "sample://first_page",
          initialRoute: initialRoute,
          onGenerateRoute: (RouteSettings settings) {
            String routeName = settings.name;
            Object arguments = settings.arguments;
            if (settings.name == window.defaultRouteName) {
              routeName = initialRoute;
              // arguments 有值的话,说明可能是 push 来的
              if (arguments == null && initialRouteParams != null) {
                try {
                  arguments = json.decode(initialRouteParams);
                } catch (e) {}
              }
            }
            var routeResult = getRouteResult(name: routeName, arguments: arguments);
    
            if (routeResult.showStatusBar != null ||
                routeResult.routeName != null) {
              settings = FFRouteSettings(
                  arguments: arguments,
                  name: routeName,
                  isInitialRoute: settings.isInitialRoute,
                  routeName: routeResult.routeName,
                  showStatusBar: routeResult.showStatusBar);
            }
    
            var page = routeResult.widget ?? FFNoRoute();
    
            switch (routeResult.pageRouteType) {
              case PageRouteType.material:
                return MaterialPageRoute(settings: settings, builder: (c) => page);
              case PageRouteType.cupertino:
                return CupertinoPageRoute(settings: settings, builder: (c) => page);
              case PageRouteType.transparent:
                return FFTransparentPageRoute(
                    settings: settings,
                    pageBuilder: (BuildContext context, Animation<double> animation,
                            Animation<double> secondaryAnimation) =>
                        page);
              default:
                return Platform.isIOS
                    ? CupertinoPageRoute(settings: settings, builder: (c) => page)
                    : MaterialPageRoute(settings: settings, builder: (c) => page);
            }
          },
    )
    

    然后就可以可以使用

    FFNavigatorObserver.getInstance().pushNamed(routeName)
    

    我们项目正在用的框架,目前效果还可以,所以非常感谢您的开源精神!一点小贡献请随意close🙂feel free👀。

    opened by ksti 5
  • add routeImportAs to solve class name conflict

    add routeImportAs to solve class name conflict

    Add the routeImportAs annotation field in FFRoute to avoid conflict when same class names found in different directories. This field is optional. if routeImportAs is set, current route will be imported as the value.

    opened by lvyandev 4
  • Class name conflict

    Class name conflict

    1. i don't suggest you have the same Class Name for different Page.
    2. if someone want to fix class name conflict with 'as', please take care of following cases.

    Package:

    import 'package:module_a/module_a_route.dart' hide PageA, PageB; import 'package:module_a/module_a_route.dart' as xxxx; import 'package:module_a/module_a_route.dart' as xxxx1;

    Root: import 'package:example/src/model/test_model1.dart' hide PageA; import 'package:example/src/model/test_model.dart' hide PageA, PageB; import 'package:example/src/model/test_model1.dart' as xxxx ; import 'package:example/src/model/test_model.dart' as xxxx1 ; import 'package:example/src/model/test_model.dart' as xxxx2 ;

    opened by zmtzawqlp 2
  • Apply trailing comma to args for `require_trailing_commas` lint rule

    Apply trailing comma to args for `require_trailing_commas` lint rule

    This will apply trailing commas to super arguments, according to the require_trailing_commas lint rules.

    | Before | After | | ------ | ------ | | image | image |

    opened by AlexV525 1
  • 1.20.3报Can't load Kernel binary: Invalid kernel binary format version.

    1.20.3报Can't load Kernel binary: Invalid kernel binary format version.

    [√] Flutter (Channel unknown, 1.20.3, on Microsoft Windows [Version 10.0.19041.508], locale zh-CN)
        • Flutter version 1.20.3 at D:\os\flutter
        • Framework revision 216dee60c0 (9 days ago), 2020-09-01 12:24:47 -0700
        • Engine revision d1bc06f032
        • Dart version 2.9.2
        • Pub download mirror https://pub.flutter-io.cn
        • Flutter download mirror https://storage.flutter-io.cn
    
    

    降级到1.17就不会出现这个问题,应该是dart版本问题?

    opened by wdaglb 1
  • ## 2.0.8

    ## 2.0.8

    • Update format in code and generated codes to match analyzer options.
    • Generate single quotes everywhere.
    • Add dynamic generic type to Route.
    • Sort imports and exports alphabetic in generated file.
    opened by AlexV525 0
Releases(v8.0.0)
  • v8.0.0(Nov 9, 2021)

    • Support Flutter 2.5.0, basically with the type alias support. Also, drop supports below Flutter 2.5.0 .
    • Revert the required keyword extra handling since this fix has been addressed in the analyzer.
    • De-duplicate all imports.
    • Sort imports alphabetically.
    • Brought ignore_for_file front.
    • Apply trailing comma to safe/super arguments for the require_trailing_commas lint rule.
    • Support fix class names conflict. (Do not use the same class name in one package, they can't be exported correctly.)
    • Use constants value from core in the template.
    • Support exclude packages.
    Source code(tar.gz)
    Source code(zip)
  • v8.0.0-dev.5(Sep 28, 2021)

  • v8.0.0-dev.3(Sep 27, 2021)

  • v8.0.0-dev.2(Sep 10, 2021)

  • v8.0.0-dev.1(Sep 9, 2021)

    • Support Flutter 2.5.0, basically with the type alias support. Also drop supports below Flutter 2.5.0 .
    • Revert the required keyword extra handling since this fix has addressed in the analyzer.
    Source code(tar.gz)
    Source code(zip)
  • v4.2.2(Dec 1, 2020)

  • v3.4.2+1(Sep 14, 2020)

  • v3.4.2(Sep 14, 2020)

  • v3.4.1(Sep 2, 2020)

Owner
FlutterCandies
Custom Flutter candies (packages) for you to build your Flutter app easily. Enjoy it!
FlutterCandies
A generator to create config class from json files that support many environments

A generator to create config class from json files that support many environments. Motivation If you use a json file to config your applications, perp

Diego Cardenas 0 Oct 9, 2021
Open source SDK to quickly integrate subscriptions, stop worring about code maintenance, and getting advanced real-time data

Open source SDK to quickly integrate subscriptions, stop worring about code maintenance, and getting advanced real-time data. Javascript / iOS glue framework

glassfy 8 Oct 31, 2022
Fluro is a Flutter routing library that adds flexible routing options like wildcards, named parameters and clear route definitions.

Fluro is a Flutter routing library that adds flexible routing options like wildcards, named parameters and clear route definitions.

Luke Pighetti 3.5k Jan 4, 2023
Command-line tool to provide null-safety percentage info of a project. Track your migration progress on mixed-version programs that execute with unsound null safety.

null_safety_percentage Command-line tool to provide null-safety percentage info of a project. Track your migration progress on mixed-version programs

dartside.dev 8 Mar 27, 2022
A mobile map based application to help people everywhere around the world get help

Wonder This is a mobile application made by flutter. The application is called "Wonder" because it will help people everywhere around the world to get

Sara Nersisian 1 Dec 2, 2021
Flutter Map plugin for ArcGIS Esri. Currently support feature layer (point, polygon)

Flutter Map plugin for ArcGIS Esri Currently support feature layer(point, polygon, polyline coming soon) We are working on more features A Dart implem

Munkh-Altai 17 Nov 9, 2022
Cache json map to local file with Dart:io. Read file with sync api.

local_cache_sync 一个非常简单易用的Flutter本地储存库,适用于在本地储存一列轻量数据(例如用户保存在本地的设备信息,或者缓存一系列用户信息)。 local_cache_sync的所有方法都是同步,而不是异步的。这意味着你不需要使用await就可以获取数据。在flutter中,这

null 16 Jun 24, 2022
Simply extract required values from specific paths in a Map or a List

extract values from Map/List using dot-seprated strings you don't have to cast multiple times to fetch a simple values, this is very useful while working with i.e json data

Mohammed Al Ashaal 5 Nov 18, 2022
Starter project and code generator for Flutter/Redux

Flutter Redux Starter/Code Generator Videos Short video ~ 1 minute Long video ~ 10 minutes We're using this approach to develop the Flutter app for In

Hillel Coren 278 Dec 12, 2022
Environment specific config generator for Dart and Flutter applications during CI/CD builds

Environment Config Generator Environment specific config generator. Allows to specify env configuration during CI/CD build. Primarily created to simpl

Denis Beketsky 86 Dec 2, 2022
The Flutter code generator for your assets, fonts, colors, … — Get rid of all String-based APIs.

The Flutter code generator for your assets, fonts, colors, … — Get rid of all String-based APIs. Inspired by SwiftGen. Motivation Using asset path str

FlutterGen 1.1k Jan 6, 2023
🚀The Flutter dart code generator from zeplin. ex) Container, Text, Color, TextStyle, ... - Save your time.

Flutter Gen Zeplin Extension ?? The Flutter dart code generator from zeplin. ex) Container, Text, Color, TextStyle, ... - Save your time. ⬇ 1.1k Getti

NAVER 49 Oct 12, 2022
GPT-3 recipe generator for the GPT-3 Makeathon by TUM.AI. Developed by team Taste the data.

GPT-3 Makeathon by TUM.AI - Team: Taste the Data Team - Taste the Data: Carmen Heger <@stedomedo> David Stiftl <@stiftlD> Christopher Schütz <@cdschtz

Oliver Klukas 11 Dec 4, 2022
Dart Code Generator for generating mapper classes

Smartstruct - Dart bean mappings - the easy nullsafe way! Code generator for generating type-safe mappers in dart, inspired by https://mapstruct.org/

Nils 28 Nov 29, 2022
The Dart code generator for your package versions. 🎯

The Dart code generator for your package versions. There is no way to get the package version from the code in the Dart ecosystem. Installation Add bu

Daichi Furiya 12 Dec 14, 2022
A Flutter curl-command generator for Dio

curl_logger_dio_interceptor A Flutter curl-command generator for Dio. Easily test your Flutter-made requests in your favorite terminal or even in Post

null 7 Nov 17, 2022
OpenAPI generator for Dart & Flutter

Fantom Fantom is a cli tool for generating API layer based on OpenAPI Spec. Usage Install fantom $ dart pub global activate fantom Generate API client

6thSolution 13 Oct 18, 2022
OpenAPI generator for Dart & Flutter

Fantom Fantom is a cli tool for generating API layer based on OpenAPI Spec. Usage Install fantom $ dart pub global activate fantom Generate API client

REKAB 13 Oct 18, 2022