A high-performance, web standards-compliant rendering engine based on Flutter.

Last update: Jun 24, 2022

kraken Post

Kraken pub package Integration Test WorkFlow

💁 Have a try

  1. Install Kraken CLI (macOS only currently)

    $ npm i @openkraken/cli -g
  2. Open with kraken

    # kraken [localfile|URL]
    $ kraken https://raw.githubusercontent.com/openkraken/kraken/master/kraken/example/assets/bundle.js

💌 Why kraken

  • Quick development 🎉

    Compatibility with web standards means you don't have to change your stack.

    const text = document.createTextNode('Hello World!');
    document.body.appendChild(text);
  • Cross platform ⚛️

    Seamless integration with Flutter, supports web, mobile (iOS, Android) and desktop (MacOS, Linux, Windows).

  • Fast performance 🚀

    Provide native-like performance such as navigation, animation and infinite list scrolling.

👏 Contributing

By contributing to Kraken, you agree that your contributions will be licensed under its Apache-2.0 License.

  1. Prerequisites

    • Node.js v12.0 or later
    • Flutter version in the kraken/pubspec.yaml
    • CMake v3.2.0 or later
    • Xcode (10.12) or later (Running on macOS or iOS)
    • Android NDK version 21.4.7075529 (Running on Android)
  2. Install

    $ npm install
  3. Building bridge

    Building bridge for all supported platform (macOS, iOS, Android)

    $ npm run build:bridge:all

    Building bridge for one platform

    macOS

    $ npm run build:bridge:macos

    iOS

    $ npm run build:bridge:ios

    Android

    For Windows users, make sure that running this command under MINGW64 environment(eg. Git Bash).

    $ npm run build:bridge:android
  4. Start example

    $ cd kraken/example
    $ flutter run
  5. Test (Unit Test and Integration Test)

    $ npm test

GitHub

https://github.com/openkraken/kraken
Comments
  • 1. Kraken运行不起来啊

    使用的 Kraken 版本 | What version of kraken are you using

    0.7.2

    重现步骤 | Steps To Reproduce

    kraken http://kraken.oss-cn-hangzhou.aliyuncs.com/demo/guide-styles.js Kraken Binary NOT exists, try reinstall. FAIL: 1

    安装cmake出现这个问题 brew install cmake image 我xcode 也是最新的啊

    Reviewed by infyzz at 2021-04-22 06:59
  • 2. 编译失败:集成kraken后,在xcode中运行ios成功,但在终端中执行flutter run 失败

    使用的 Kraken 版本 | What version of kraken are you using

    0.10.0

    重现步骤 | Steps To Reproduce

    flutter版本2.5.2 stable,创建一个新flutter项目,在终端中执行flutter run能正常运行到ios模拟器中; 按文档集成kraken 后在终端中执行flutter run无法正常运行到ios模拟器中,但xcode可以正常运行 ios目录工程,并且执行flutter run也够正常运行到Andoid 上;

    重现代码 | Code example: pubspec.yaml:

    version: 1.0.0+1
    
    environment:
      sdk: ">=2.12.0 <3.0.0"
    
    dependencies:
      flutter:
        sdk: flutter
      kraken: '0.10.0' 
    
      cupertino_icons: ^1.0.2
      kraken_websocket: ^2.0.0
    
    dev_dependencies:
      flutter_test:
        sdk: flutter
    
      flutter_lints: ^1.0.0
    
    flutter:
      
      uses-material-design: true
    
      assets:
         - images/cat.jpeg
         - kraken/guide.js
        
    

    预期结果 | Expected results:

    实际结果 | Actual results: 终端Log:

    Launching lib/main.dart on iPhone 12 Pro in debug mode...
    Running Xcode build...                                          
    Xcode build done.                                            6.9s
    Failed to build iOS app
    Error output from Xcode build:
    ↳
        --- xcodebuild: WARNING: Using the first of multiple matching destinations:
       ~~~
        ** BUILD FAILED **
    
    
    Xcode's output:
    ↳
        warning: [CP] Unable to find matching .xcframework slice in '/Users/HEcom/saas/ios/Pods/../.symlinks/plugins/kraken/ios/kraken_bridge.xcframework kraken_bridge framework ios-x86_64-simulator ios-arm64_armv7_armv7s' for the current build architectures (arm64 x86_64).
        warning: [CP] Unable to find matching .xcframework slice in '/Users/HEcom/saas/ios/Pods/../.symlinks/plugins/kraken/ios/quickjs.xcframework quickjs framework ios-x86_64-simulator ios-arm64_armv7_armv7s' for the current build architectures (arm64 x86_64).
        ld: warning: directory not found for option '-F/Users/HEcom/saas/build/ios/Debug-iphonesimulator/XCFrameworkIntermediates/kraken_bridge'
        ld: warning: directory not found for option '-F/Users/HEcom/saas/build/ios/Debug-iphonesimulator/XCFrameworkIntermediates/quickjs'
        ld: framework not found kraken_bridge
        clang: error: linker command failed with exit code 1 (use -v to see invocation)
        note: Using new build system
        note: Planning
        note: Build preparation complete
        note: Building targets in dependency order
        /Users/HEcom/saas/ios/Pods/Pods.xcodeproj: warning: The iOS Simulator deployment target 'IPHONEOS_DEPLOYMENT_TARGET' is set to 8.0, but the range of supported deployment target versions is 9.0 to 15.2.99. (in target 'Reachability' from project 'Pods')
        warning: Capabilities for Signing & Capabilities may not function correctly because its entitlements use a placeholder team ID. To resolve this, select a development team in the Runner editor. (in target 'Runner' from project 'Runner')
    
    Could not build the application for the simulator.
    Error launching application on iPhone 12 Pro.
     
    
    Reviewed by gplcn at 2022-02-04 02:49
  • 3. click 事件绑定的 console.log,在三端都没有看到日志输出

    重现步骤 | Steps To Reproduce

    React Demo,给 span 绑定 onClick 事件。

    1. kraken 直接加载 bundle,在 devtools 没有看到日志输出
    2. flutter 源码调试,在 flutter 侧控制台没有看到日志输出
    3. iOS 源码调试,在 Xcode 控制台也没有看到日志输出

    不清楚是 click 事件的问题还是 console.log 的问题

    重现代码 | Code example:

    <span id="sp" onClick={() => {
                console.log('111111');
    }}>src/App.js</span>
    

    预期结果 | Expected results:

    三端都能看到日志输出

    实际结果 | Actual results:

    三端都没有看到日志

    image

    image

    image

    Reviewed by airingursb at 2021-04-27 09:38
  • 4. Kraken Binary NOT exists, try reinstall.

    使用的 Kraken 版本 | What version of kraken are you using

    kraken 0.7.2 npm 7.10.0 node v14.16.1 MacOS 10.15.7

    重现步骤 | Steps To Reproduce

    $ sudo npm install -g @openkraken/cli
    
    added 24 packages in 1s
    
    $ kraken https://raw.githubusercontent.com/openkraken/kraken/master/kraken/example/assets/bundle.js
    
    Kraken Binary NOT exists, try reinstall.
    
    

    预期结果 | Expected results:

    打开对应界面

    实际结果 | Actual results:

    命令行报错

    Reviewed by FantasyWind2016 at 2021-04-22 03:42
  • 5. cli 启动官网项目白屏

    使用的 Kraken 版本 | What version of kraken are you using

    v0.10.1

    重现步骤 | Steps To Reproduce

    kraken https://raw.githubusercontent.com/openkraken/kraken/master/kraken/example/assets/bundle.js image

    重现代码 | Code example:

    预期结果 | Expected results: 成功渲染

    实际结果 | Actual results: 白屏

    Reviewed by 18zili at 2022-01-17 06:14
  • 6. Kraken.defineCustomElement切换tabbar 会报错

    debug bug

    --js-- image

    import { createElement } from 'rax';
    
    function ListView(props) {
      return createElement('etsx-list-view', props);
    }
    
    export default ListView;
    
    
    import { createElement } from 'rax';
    
    function RefreshIndicator(props) {
      if(props['onReachedBottom']){
        props['onReachedbottom'] = props['onReachedBottom'];
        delete props['onReachedBottom'];
      }
      return createElement('etsx-refresh-indicator', props);
    }
    
    export default RefreshIndicator;
    
    

    --dart--

      Kraken.defineCustomElement('etsx-list-view', (context) {
        return EtsxListViewWidgetElement(context);
      });
      Kraken.defineCustomElement('etsx-refresh-indicator', (context) {
        return EtsxRefreshIndicatorWidgetElement(context);
      });
    
    class EtsxListViewWidgetElement extends WidgetElement {
      EtsxListViewWidgetElement(context) :
            super(context);
    
      @override
      Widget build(BuildContext context, Map<String, dynamic> properties, List<Widget> children) {
        Size size = MediaQuery.of(context).size;
        ScrollController controller = ScrollController();
        controller.addListener(() {
          if(controller.position.pixels == controller.position.maxScrollExtent) {
    
            Event changeEvent = CustomEvent('reachedbottom', CustomEventInit(detail: ":"));
            changeEvent.currentTarget = this;
            changeEvent.target = this;
            dispatchEvent(changeEvent);
          }
        });
        print('properties');
        print(properties );
    
        return ListView(
          padding: const EdgeInsets.all(0),
          key: const ValueKey('lv'),
          controller: controller,
          children: children
        );
      }
    }
    
    class EtsxRefreshIndicatorWidgetElement extends WidgetElement {
      EtsxRefreshIndicatorWidgetElement(EventTargetContext? context) : super(context);
    
      @override
      Widget build(BuildContext context, Map<String, dynamic> properties, List<Widget> children) {
        return RefreshIndicator(
          key: ValueKey('ri'),
            onRefresh: () async {
              Event changeEvent = CustomEvent('refresh', CustomEventInit(detail: ":"));
              changeEvent.currentTarget = this;
              changeEvent.target = this;
              dispatchEvent(changeEvent);
            },
            child: children[0]
        );
      }
    }
    
    Reviewed by yuchonghua at 2022-02-24 03:02
  • 7. 添加一套独立于引擎之上的 JS Engine API 设计

    Kraken 未来会在 JS Engine 领域上进行更多的探索,包括尝试不同的 JS Engine,使用一些 Private API 等,但是这些工作又会对上层的 bridge 功能实现带来很多 Break Changes,因此需要设计并实现一层独立于引擎之外的抽象设计。

    Node.js 的 (Node-API)是个很好的参考

    这个设计上,有几个目标需要达成:

    1. 使用模版及内联函数去降低函数调用开销
    2. 禁用 copy 语义,借鉴 rapidJSON 的 move 语义
    3. 优先将 JS 对象分配到栈上,同时也支持分配在堆上。
    4. 支持 JS 类,函数的创建,并支持实现 JS 原型继承的 API
    Reviewed by andycall at 2021-05-07 05:23
  • 8. flutter端运行报Unhandled Exception: Invalid argument(s): Failed to lookup symbol (dlsym(0x8609000, initJSPagePool): symbol not found)

    使用的 Kraken 版本

    kraken: 0.10.1
    kraken_websocket: any

    重现步骤 | Steps To Reproduce

    将kraken引入flutter项目,并用demo中的地址在程序启动的时候加载kraken项目,页面是一个空白页面,并报错

    VERBOSE-2:ui_dart_state.cc(209)] Unhandled Exception: Invalid argument(s): Failed to lookup symbol (dlsym(0x8609000, initJSPagePool): symbol not found) #0 DynamicLibrary.lookup (dart:ffi-patch/ffi_dynamic_library_patch.dart:31:29) #1 _initJSPagePool package:kraken/…/bridge/to_native.dart:215 #2 _initJSPagePool (package:kraken/src/bridge/to_native.dart) package:kraken/…/bridge/to_native.dart:1 #3 initJSPagePool package:kraken/…/bridge/to_native.dart:219 #4 initBridge package:kraken/…/bridge/bridge.dart:49 #5 new KrakenViewController package:kraken/…/launcher/controller.dart:126 #6 new KrakenController package:kraken/…/launcher/controller.dart:894 #7 _KrakenRenderObjectWidget.createRenderObject package:kraken/…/widget/kraken.dart:918 #8 RenderObjectElement.mount package:flutter/…/widgets/framework.dart:5533 #9 SingleChildRenderObjectElement.mount package:flutter/…/widgets/framework.dart:6194 #10 _KrakenRenderObjectElement.mount package:kraken/…/widget/kraken.dart:991 #11 Element.inflateWidget package:flutter/…/widgets/framework.dart:3673 #12 Element.updateChild package:flutter/…/widgets/framework.dart:3425

    重现代码 | Code example: 下边是调用的代码 Kraken( bundle: KrakenBundle.fromUrl( 'http://kraken.oss-cn-hangzhou.aliyuncs.com/demo/guide-styles.js', ))

    Reviewed by WK726 at 2022-02-27 03:54
  • 9. 编译总是失败

    使用的 Kraken 版本 | What version of kraken are you using

    最新

    Error [ERR_UNHANDLED_ERROR]: Unhandled error. ({ uid: 2, name: 'build-android-kraken-lib', branch: false, error: Error: Command failed: cmake -DCMAKE_BUILD_TYPE=Debug -DCMAKE_TOOLCHAIN_FILE=/Users/chenjun/Library/Android/sdk/ndk/21.4.7075529/build/cmake/android.toolchain.cmake -DANDROID_NDK=/Users/chenjun/Library/Android/sdk/ndk/21.4.7075529 -DIS_ANDROID=TRUE -DANDROID_ABI="arm64-v8a"
    -DANDROID_PLATFORM="android-18" -DANDROID_STL=c++_shared -G "Unix Makefiles" -B /Users/chenjun/krakenSDK/kraken/bridge/cmake-build-android-arm64-v8a -S /Users/chenjun/krakenSDK/kraken/bridge at checkExecSyncError (node:child_process:826:11) at execSync (node:child_process:900:15) at /Users/chenjun/krakenSDK/kraken/scripts/tasks.js:661:5 at Array.forEach () at /Users/chenjun/krakenSDK/kraken/scripts/tasks.js:657:9 at taskWrapper (/Users/chenjun/krakenSDK/kraken/node_modules/undertaker/lib/set-task.js:13:15) at bound (node:domain:421:15) at runBound (node:domain:432:12) at asyncRunner (/Users/chenjun/krakenSDK/kraken/node_modules/async-done/index.js:55:18) at processTicksAndRejections (node:internal/process/task_queues:78:11) { status: 127, signal: null, output: [ null, null, null ], pid: 12245, stdout: null, stderr: null, domainThrown: true }, duration: [ 0, 14079750 ], time: 1642385834539 }) at new NodeError (node:internal/errors:371:5) at Gulp.emit (node:events:379:17) at Gulp.emit (node:domain:475:12) at Object.error (/Users/chenjun/krakenSDK/kraken/node_modules/undertaker/lib/helpers/createExtensions.js:61:10) at handler (/Users/chenjun/krakenSDK/kraken/node_modules/now-and-later/lib/mapSeries.js:47:14) at f (/Users/chenjun/krakenSDK/kraken/node_modules/once/once.js:25:25) at f (/Users/chenjun/krakenSDK/kraken/node_modules/once/once.js:25:25) at tryCatch (/Users/chenjun/krakenSDK/kraken/node_modules/async-done/index.js:24:15) at done (/Users/chenjun/krakenSDK/kraken/node_modules/async-done/index.js:40:12) at Domain.onError (/Users/chenjun/krakenSDK/kraken/node_modules/async-done/index.js:51:5) { code: 'ERR_UNHANDLED_ERROR', context: { uid: 2, name: 'build-android-kraken-lib', branch: false, error: Error: Command failed: cmake -DCMAKE_BUILD_TYPE=Debug -DCMAKE_TOOLCHAIN_FILE=/Users/chenjun/Library/Android/sdk/ndk/21.4.7075529/build/cmake/android.toolchain.cmake -DANDROID_NDK=/Users/chenjun/Library/Android/sdk/ndk/21.4.7075529 -DIS_ANDROID=TRUE -DANDROID_ABI="arm64-v8a"
    -DANDROID_PLATFORM="android-18" -DANDROID_STL=c++_shared -G "Unix Makefiles" -B /Users/chenjun/krakenSDK/kraken/bridge/cmake-build-android-arm64-v8a -S /Users/chenjun/krakenSDK/kraken/bridge at checkExecSyncError (node:child_process:826:11) at execSync (node:child_process:900:15) at /Users/chenjun/krakenSDK/kraken/scripts/tasks.js:661:5 at Array.forEach () at /Users/chenjun/krakenSDK/kraken/scripts/tasks.js:657:9 at taskWrapper (/Users/chenjun/krakenSDK/kraken/node_modules/undertaker/lib/set-task.js:13:15) at bound (node:domain:421:15) at runBound (node:domain:432:12) at asyncRunner (/Users/chenjun/krakenSDK/kraken/node_modules/async-done/index.js:55:18) at processTicksAndRejections (node:internal/process/task_queues:78:11) { status: 127, signal: null, output: [ null, null, null ], pid: 12245, stdout: null, stderr: null, domainThrown: true }, duration: [ 0, 14079750 ], time: 1642385834539 } }

    android SDK 路径没有问题。设备是 mac M1 芯片。

    Reviewed by yoyo89757001 at 2022-01-17 02:22
  • 10. 启动页面时的参数传递

    使用场景 | Use case

    目前北海的加载方式有三种

    kraken.loadPath(xxx)
    kraken.loadURL(xxx)
    kraken.loadContent(xxx)
    

    很多场景都需要根据参数去请求数据,以便动态化的渲染。但三种方式都没有找到对参数传递的描述。

    提案 | Proposal

    请求支持。 例如

    kraken.loadPath(xxx, param)
    kraken.loadURL('xxx?q=123&k=v')
    kraken.loadContent(xxx, param)
    
    Reviewed by cnryb at 2021-08-02 07:45
  • 11. feat: define custom element with flutter widget

    Usage:

      Kraken.defineCustomElement('flutter-text', (Map<String, dynamic> properties) {
        return Text(properties['value'] ?? '', textDirection: TextDirection.ltr, style: TextStyle(color: Color.fromARGB(255, 100, 100, 100)));
      });
    
    
    <flutter-text value="Hello" />
    
    Reviewed by yuanyan at 2021-07-08 14:14
  • 12. mac安装失败

    貌似是没有下载成功就执行了tar解压命令 尝试过 sudo npm install -g @openkraken/cli --unsafe-permsudo npm install -g @openkraken/cli

    安装失败日志:

    $ sudo npm install -g @openkraken/cli --unsafe-perm
    Password:
    npm ERR! code 1
    npm ERR! path /Users/mapc/.npm-global/lib/node_modules/@openkraken/cli
    npm ERR! command failed
    npm ERR! command sh -c node install.js
    npm ERR! % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
    npm ERR!                                  Dload  Upload   Total   Spent    Left  Speed
    100   273  100   273    0     0   1101      0 --:--:-- --:--:-- --:--:--  1151
    npm ERR! tar: Error opening archive: Unrecognized archive format
    npm ERR! child_process.js:866
    npm ERR!     throw err;
    npm ERR!     ^
    npm ERR!
    npm ERR! Error: Command failed: tar xzf /Users/mapc/.npm-global/lib/node_modules/@openkraken/cli/kraken-darwin-0.10.5.tar.gz -C ./build
    npm ERR!     at checkExecSyncError (child_process.js:790:11)
    npm ERR!     at execSync (child_process.js:863:15)
    npm ERR!     at Object.<anonymous> (/Users/mapc/.npm-global/lib/node_modules/@openkraken/cli/install.js:15:1)
    npm ERR!     at Module._compile (internal/modules/cjs/loader.js:1085:14)
    npm ERR!     at Object.Module._extensions..js (internal/modules/cjs/loader.js:1114:10)
    npm ERR!     at Module.load (internal/modules/cjs/loader.js:950:32)
    npm ERR!     at Function.Module._load (internal/modules/cjs/loader.js:790:12)
    npm ERR!     at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:76:12)
    npm ERR!     at internal/main/run_main_module.js:17:47 {
    npm ERR!   status: 1,
    npm ERR!   signal: null,
    npm ERR!   output: [ null, null, null ],
    npm ERR!   pid: 61042,
    npm ERR!   stdout: null,
    npm ERR!   stderr: null
    npm ERR! }
    

    预期结果 | Expected results: 正常安装

    实际结果 | Actual results: 安装失败,提示:

    Error: Command failed: tar xzf /Users/mapc/.npm-global/lib/node_modules/@openkraken/cli/kraken-darwin-0.10.5.tar.gz -C ./build
    
    Reviewed by okFancy at 2022-06-22 19:21
  • 13. 启动黑屏

    使用的 Kraken 版本

    0.10.5

    fluter 2.8.1

    重现步骤

    step1: flutter create myapp

    step2: add kraken: '>= 0.0.1'

    step3: flutter pub get

    step4: flutter build apk --target-platform android-arm64

    重现代码

    import 'package:flutter/material.dart';
    import 'package:kraken/kraken.dart';
    
    void main() {
      runApp(MyApp());
    }
    
    class MyApp extends StatelessWidget {
      // This widget is the root of your application.
      @override
      Widget build(BuildContext context) {
        var s = """var text1 = document.createTextNode('Hello Kraken!');
    var br = document.createElement('br');
    var text2 = document.createTextNode('你好,北海!');
    var p = document.createElement('p');
    p.className = 'p';
    p.style.textAlign = 'center';
    p.appendChild(text1);
    p.appendChild(br);
    p.appendChild(text2);
    
    document.body.appendChild(p);""";
        Kraken kraken = Kraken(bundle: KrakenBundle.fromContent(s));
    
        return MaterialApp(
          title: 'Flutter Demo',
          theme: ThemeData(
            primarySwatch: Colors.blue,
            visualDensity: VisualDensity.adaptivePlatformDensity,
          ),
          home: kraken
        );
      }
    }
    

    预期结果

    apk安装启动后显示ui

    实际结果

    apk安装启动后直接黑屏

    Reviewed by calvin2021y at 2022-06-11 07:18
  • 14. 使用 kraken_video_player 出现 No implementation found for method setMuted on channel flutter.io/krakenVideoPlayer

    使用的 Kraken 版本 | What version of kraken are you using

    flutter 版本 2.5.0 kraken_video_player: ^2.4.1 kraken: ^0.10.4

    重现步骤 | Steps To Reproduce

    使用的是官网 多媒体 中的示例 js,下面是我的代码

    import 'package:flutter/material.dart';
    import 'package:kraken/kraken.dart';
    import 'package:kraken_video_player/kraken_video_player.dart';
    
    void main() {
      KrakenVideoPlayer.initialize();
      runApp(MyApp());
    }
    
    class MyApp extends StatelessWidget {
      // This widget is the root of your application.
      @override
      Widget build(BuildContext context) {
        Kraken kraken = Kraken(bundle: KrakenBundle.fromUrl('https://kraken.oss-cn-hangzhou.aliyuncs.com/demo/guide-video.js'));
    
        return MaterialApp(
            title: 'Flutter Demo',
            theme: ThemeData(
              primarySwatch: Colors.blue,
              visualDensity: VisualDensity.adaptivePlatformDensity,
            ),
            home: kraken
        );
      }
    }
    

    麻烦各位大大帮忙看一下

    image
    Reviewed by yingzheng1980 at 2022-06-04 06:58
  • 15. dart 调用 js 方法没有返回值吗

    js

    kraken.methodChannel.addMethodCallHandler((method, args) => "123456789");
    

    dart

    final result = await javaScriptChannel.invokeMethod('test', null);
    debugPrint('invoke test result: $result'); // invoke test result: null
    
    Reviewed by DemoJameson at 2022-06-01 02:12

Related

Log snapshot management solution (iOS/Android/Web/Server) built with Flutter/Dart using Bloc pattern and Firebase Firestore backend.
Log snapshot management solution (iOS/Android/Web/Server) built with Flutter/Dart using Bloc pattern and Firebase Firestore backend.

Log snapshot management solution (iOS/Android/Web/Server) built with Flutter/Dart using Bloc pattern and Firebase Firestore backend.

Dec 22, 2021
The Dart Time Machine is a date and time library for Flutter, Web, and Server with support for timezones, calendars, cultures, formatting and parsing.
The Dart Time Machine is a date and time library for Flutter, Web, and Server with support for timezones, calendars, cultures, formatting and parsing.

The Dart Time Machine is a date and time library for Flutter, Web, and Server with support for timezones, calendars, cultures, formatting and parsing.

Oct 8, 2021
Easily swap Flutter web renderers at runtime

renderer_switcher Swap Web Renderers in a Flutter Web app at runtime. Installation To use this plugin, add renderer_switcher as a dependency in your p

Mar 28, 2022
A Dart package to web scraping data from websites easily and faster using less code lines.

Chaleno A flutter package to webscraping data from websites This package contains a set of high-level functions that make it easy to webscrap websites

Jun 18, 2022
The package for building grpc channel depending on is it web or not

The package for building grpc channel depending on is it web or not Features The util builds gRPC channel for flutter web or other platforms condition

Nov 8, 2021
A to do list app for android, apple, and the web.

noted A new Flutter project. Getting Started FlutterFlow projects are built to run on the Flutter stable release. IMPORTANT: For projects with Firesto

Dec 31, 2021
This is a simple class to package up and send requests to the Kroki.io web service.

Kroki.dart This is a simple class to package up and send requests to the Kroki.io web service. A live editor to editing diagrams that Kroki supports c

Jun 8, 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.

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

Jun 23, 2022
A few handy Flutter tools, dead simple `UriRouter` for `Uri`-based navigator or `BuildTracker` to track widget rebuilds and what caused them to rebuild.

noob A few handy tools for Flutter apps. UriRouter Hooks Providers PointerIndicator BuildTracker PeriodicListenable UriRouter Dead simple Uri-based pa

Jan 18, 2022
Future based HTTP client for the Dart and Flutter

Uno Future based HTTP client for the Dart and Flutter. Uno, inspired by Axios, bringing a simple and robust experience to the crossplatform apps in Fl

Jun 23, 2022
Swagger/OpenAPI code generator based on Chopper and JsonAnnotation for Flutter
Swagger/OpenAPI code generator based on Chopper and JsonAnnotation for Flutter

Code partially generated with chopper ?? Build dart types from Swagger/OpenAPI schemas SwaggerDartCodeGenerator is a code generator that looks for *.s

Jun 15, 2022
Dart phone number parser, based on libphonenumber and PhoneNumberKit.

Dart library for parsing phone numbers. Inspired by Google's libphonenumber and PhoneNumberKit for ios.

Jun 13, 2022
Dart phone number parser, based on libphonenumber and PhoneNumberKit.

Phone Numbers Parser Dart library for parsing phone numbers. Inspired by Google's libphonenumber and PhoneNumberKit for ios. The advantage of this lib

Jun 13, 2022
A code generation tool based on Database. :construction: developing :construction:
A code generation tool based on Database. :construction:  developing :construction:

dbgen A code generation tool based on Database. Getting Started This project is a starting point for a Flutter application. A few resources to get you

Jun 8, 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

Dec 2, 2021
AFINN-based sentiment analysis for dart
 AFINN-based sentiment analysis for dart

Dart Sentiment is a dart module that uses the AFINN-165 wordlist and Emoji Sentiment Ranking to perform sentiment analysis on arbitrary blocks of input text.

Jan 20, 2022
Apr 26, 2022
Flutter Version Management: A simple CLI to manage Flutter SDK versions.
Flutter Version Management: A simple CLI to manage Flutter SDK versions.

fvm Flutter Version Management: A simple cli to manage Flutter SDK versions. FVM helps with the need for a consistent app builds by allowing to refere

Jun 25, 2022