A flutter plugin to support drag-out functionality on native platforms

Overview

flutter_native_drag_n_drop

A flutter plugin to support the native drag and drop, especially to drag files (only files) out of the application boundary.

Supported Platforms
Windows
macOS

To-do's (future versions)

  • Better drag image handling (remove native implementation, drag image should be set on dart side)
  • Windows implementation

Usage

  1. To use this plugin, add flutter_native_drag_n_drop as a dependency in your pubspec.yaml file.

  2. Use the NativeDraggable widget and pass NativeDragItem objects for drag & drop within the application and NativeDragFileItem objects for support drag & drop across applications. Passing a mix of both are not allowed. When you drop the objects within the application, you have to use the data object from the items. Otherwise you pass an fileStreamCallback function and return a stream which will writes the binary data outside of the application into a file.

NativeDragItem vs. NativeDragFileItem

NativeDragItem is used for when you just drag and drop within the application (e.g folder, image).

NativeDragItem<T extends Object>(
    required String name,
    T? data
)

NativeDragFileItem is used for files, especially when you want to support the drag and drop outside of the application (e.g file to Finder or Mail client).

NativeDragFileItem<T extends Object> extends NativeDragItem(
    required String fileName,
    required int fileSize
)
NativeDraggable(
    child: Container(),
    // use items OR fileItems. Not both!
    items: [NativeDragItem(name: "helloWorld.jpeg", data: helloWorldImg)],
    fileItems: [NativeDragFileItem(fileName: "helloWorld.jpeg", fileSize: 1024, data: helloWorldImg)],
    fileStreamCallback: (item, fileName, url, progressController) async* {
        // item is the desired 'NativeDragFileItem' object, fileItem the name of the file, url the location where the user dropped the item, progressController an object where you have to pass the current progress of the fileStream in bytes. The system use the progress to update the progress indicator in Finder
        // must return a Stream<Uint8List> object and must write file data into it
    },
    onDragStarted: (event) {
        // callback when drag has started
    },
    onDragUpdate: (event) {
        // callback when drag has moved
    },
    onDragEnd: (event) {
        // callback when drag has ended
    },
)
  1. Use the NativeDropTarget to receive drop events within the application.
NativeDropTarget(
    builder: (context, candidateData, rejectedData) {
        return Container();
    },
    onDragEntered: (details) {  
        // callback when drag has entered the drop area
    },
    onDragExited: (details) {
        // callback when drag has exited the drop area
    },
    onDragUpdated: (details) {
        // callback when drag has moved within the drop area
    },
    onDragDone: (details) {
        // callback when drag has dropped
    },
    onWillAccept: (details) {
        // returns a boolean if drag item should be accepted
    }
)

Example

We want to support drag and drop of image files within the application and outside of the application. For this we create a NativeDraggable widget with NativeDragFileItem objects.

NativeDraggable(
    child: Container(),
    fileItems: [
                NativeDragFileItem(
                fileName: "image.jpg",
                fileSize: image.size,
                data: AssetImage("image.jpg"))
            ],
    fileStreamCallback: passFileContent,
)

We passed the passFileContent function as a fileStream callback. Inside this function we write the bytes to a stream and update the progress indicator.

Stream<Uint8List> passFileContent(
      NativeDragItem<Object> item,
      String fileName,
      String url,
      ProgressController progressController) async* {

        final response = FileService.downloadFile(
            name: "image.jpg",
            onReceive: (count, total) {
                progressController.updateProgress(count);
            }
        )

        final byteStream = response.stream:
        await for (final bytes in byteStream) {
            yield Uint8List.fromList(bytes);
        }
}

To receive the files within the application, we create a NativeDropTarget object and read the image from the data variable.

NativeDropTarget(
    builder: (context, candidateData, rejectedData) {
        return Container();
    },
    onDragDone: (details) {
        final image = details.items.first.data! as AssetImage;
    },
    onWillAccept: (details) {
        return true;
    }
)
You might also like...

how to Integrating facebook audience network to flutter app for banner, interstitial, rewarded, native and native banner

fb_ads_flutter_12 A new Flutter project. Getting Started Watch the complite tutorial for integrating Facebook ads into the Flutter app in our Youtube

Nov 26, 2022

Flutter native ads - Show AdMob Native Ads use PlatformView

Flutter native ads - Show AdMob Native Ads use PlatformView

flutter_native_ads Flutter plugin for AdMob Native Ads. Compatible with Android and iOS using PlatformView. Android iOS Getting Started Android Androi

Dec 20, 2022

react-native native module for In App Purchase.

react-native native module for In App Purchase.

Documentation Published in website. Announcement Version 8.0.0 is currently in release candidate. The module is completely rewritten with Kotlin and S

Dec 31, 2022

A Video Player For Vimeo Videos in Flutter. This plugin allows us to play video from Vimeo and it supports Android and iOS platforms.

A Video Player For Vimeo Videos in Flutter. This plugin allows us to play video from Vimeo and it supports Android and iOS platforms.

vimeo_video_player A Video Player For Vimeo Videos in Flutter. This plugin allow us to play video from vimeo and it's supports Android and iOS platfor

Dec 8, 2022

Flutterbodydetection - A flutter plugin that uses MLKit on iOS/Android platforms to enable body pose and mask detection using Pose Detection and Selfie Segmentation APIs for both static images and live camera stream.

Flutterbodydetection - A flutter plugin that uses MLKit on iOS/Android platforms to enable body pose and mask detection using Pose Detection and Selfie Segmentation APIs for both static images and live camera stream.

body_detection A flutter plugin that uses MLKit on iOS/Android platforms to enable body pose and mask detection using Pose Detection and Selfie Segmen

Dec 5, 2022

A plugin that adapts the flutter application to different platforms

A plugin that adapts the flutter application to different platforms

A plugin that adapts the flutter application to different platforms, allowing your flutter application to flexibly and efficiently adapt to various platforms in the same flutter project, maximizing UI multiplexing, and sharing business logic code across different platforms.

Dec 31, 2021

This perfect starter kit is an app based on React Native and UI Kitten library with Light and Dark themes support.

This perfect starter kit is an app based on React Native and UI Kitten library with Light and Dark themes support.

Kitten Tricks This perfect starter kit is an app based on React Native and UI Kitten library with Light and Dark themes support. It’s completely free

Dec 30, 2022

A flutter list view which can drag & move item to change order.

A flutter list view which can drag & move item to change order.

draggable_flutter_list A flutter list view which can drag & move item to change order. some codes come from flutter_list_drag_and_drop fix flutter_lis

Sep 22, 2022

Flutter package for drag-and-drop reordering of two-level lists

Flutter package for drag-and-drop reordering of two-level lists

drag_and_drop_lists Two-level drag and drop reorderable lists. Features Reorder elements between multiple lists Reorder lists Drag and drop new elemen

Dec 18, 2022
Comments
  • Hi, It's still not response, I record a video and you can watch it

    Hi, It's still not response, I record a video and you can watch it

    https://user-images.githubusercontent.com/7424397/175449390-e1b1fbf1-cf01-41c4-af19-f23ba77fc351.mov

    #57     RenderProxyBoxWithHitTestBehavior.hitTest (package:flutter/src/rendering/proxy_box.dart:178:19)
    #58     RenderProxyBoxMixin.hitTestChildren (package:flutter/src/rendering/proxy_box.dart:131:19)
    #59     RenderCustomPaint.hitTestChildren (package:flutter/src/rendering/custom_paint.dart:535:18)
    #60     RenderBox.hitTest (package:flutter/src/rendering/box.dart:2463:11)
    #61     RenderProxyBoxMixin.hitTestChildren (package:flutter/src/rendering/proxy_box.dart:131:19)
    #62     RenderBox.hitTest (package:flutter/src/rendering/box.dart:2463:11)
    #63     RenderProxyBoxMixin.hitTestChildren (package:flutter/src/rendering/proxy_box.dart:131:19)
    #64     RenderBox.hitTest (package:flutter/src/rendering/box.dart:2463:11)
    #65     RenderProxyBoxMixin.hitTestChildren (package:flutter/src/rendering/proxy_box.dart:131:19)
    #66     RenderBox.hitTest (package:flutter/src/rendering/box.dart:2463:11)
    #67     RenderProxyBoxMixin.hitTestChildren (package:flutter/src/rendering/proxy_box.dart:131:19)
    #68     RenderBox.hitTest (package:flutter/src/rendering/box.dart:2463:11)
    #69     RenderView.hitTest (package:flutter/src/rendering/view.dart:185:14)
    #70     RendererBinding.hitTest (package:flutter/src/rendering/binding.dart:538:16)
    #71     GestureBinding._handlePointerEventImmediately (package:flutter/src/gestures/binding.dart:352:7)
    #72     GestureBinding.handlePointerEvent (package:flutter/src/gestures/binding.dart:344:5)
    #73     GestureBinding._flushPointerEventQueue (package:flutter/src/gestures/binding.dart:302:7)
    #74     GestureBinding._handlePointerDataPacket (package:flutter/src/gestures/binding.dart:285:7)
    #75     _rootRunUnary (dart:async/zone.dart:1442:13)
    #76     _CustomZone.runUnary (dart:async/zone.dart:1335:19)
    #77     _CustomZone.runUnaryGuarded (dart:async/zone.dart:1244:7)
    #78     _invoke1 (dart:ui/hooks.dart:170:10)
    #79     PlatformDispatcher._dispatchPointerDataPacket (dart:ui/platform_dispatcher.dart:331:7)
    #80     _dispatchPointerDataPacket (dart:ui/hooks.dart:94:31)
    
    [ERROR:flutter/lib/ui/ui_dart_state.cc(198)] Unhandled Exception: Cannot hit test a render box that has never been laid out.
    The hitTest() method was called on this RenderBox: RenderErrorBox#6f65d NEEDS-LAYOUT NEEDS-PAINT:
      creator: ErrorWidget-[#84649] ← _BodyBuilder ← MediaQuery ← LayoutId-[<_ScaffoldSlot.body>] ← CustomMultiChildLayout ← AnimatedBuilder ← DefaultTextStyle ← AnimatedDefaultTextStyle ← _InkFeatures-[GlobalKey#0001b ink renderer] ← NotificationListener<LayoutChangedNotification> ← PhysicalModel ← AnimatedPhysicalModel ← ⋯
      parentData: offset=Offset(0.0, 0.0); id=_ScaffoldSlot.body
      constraints: MISSING
      size: MISSING
    Unfortunately, this object's geometry is not known at this time, probably because it has never been laid out. This means it cannot be accurately hit-tested.
    If you are trying to perform a hit test during the layout phase itself, make sure you only hit test nodes that have completed layout (e.g. the node's children, after their layout() method has been called).
    #0      RenderBox.hitTest.<anonymous closure> (package:flutter/src/rendering/box.dart:2430:11)
    #1      RenderBox.hitTest (package:flutter/src/rendering/box.dart:2461:6)
    #2      RenderBoxContainerDefaultsMixin.defaultHitTestChildren.<anonymous closure> (package:flutter/src/rendering/box.dart:2824:25)
    #3      BoxHitTestResult.addWithPaintOffset (package:flutter/src/rendering/box.dart:785:31)
    #4      RenderBoxContainerDefaultsMixin.defaultHitTestChildren (package:flutter/src/rendering/box.dart:2819:33)
    #5      RenderCustomMultiChildLayoutBox.hitTestChildren (package:flutter/src/rendering/custom_layout.dart:413:12)
    #6      RenderBox.hitTest (package:flutter/src/rendering/box.dart:2463:11)
    #7      RenderProxyBoxMixin.hitTestChildren (package:flutter/src/rendering/proxy_box.dart:131:19)
    #8      RenderBox.hitTest (package:flutter/src/rendering/box.dart:2463:11)
    #9      RenderProxyBoxMixin.hitTestChildren (package:flutter/src/rendering/proxy_box.dart:131:19)
    #10     RenderBox.hitTest (package:flutter/src/rendering/box.dart:2463:11)
    #11     RenderPhysicalModel.hitTest (package:flutter/src/rendering/proxy_box.dart:1918:18)
    #12     RenderProxyBoxMixin.hitTestChildren (package:flutter/src/rendering/proxy_box.dart:131:19)
    #13     RenderBox.hitTest (package:flutter/src/rendering/box.dart:2463:11)
    #14     RenderProxyBoxMixin.hitTestChildren (package:flutter/src/rendering/proxy_box.dart:131:19)
    #15     RenderBox.hitTest (package:flutter/src/rendering/box.dart:2463:11)
    #16     RenderProxyBoxMixin.hitTestChildren (package:flutter/src/rendering/proxy_box.dart:131:19)
    #17     RenderBox.hitTest (package:flutter/src/rendering/box.dart:2463:11)
    #18     RenderIgnorePointer.hitTest (package:flutter/src/rendering/proxy_box.dart:3349:31)
    #19     RenderBoxContainerDefaultsMixin.defaultHitTestChildren.<anonymous closure> (package:flutter/src/rendering/box.dart:2824:25)
    #20     BoxHitTestResult.addWithPaintOffset (package:flutter/src/rendering/box.dart:785:31)
    #21     RenderBoxContainerDefaultsMixin.defaultHitTestChildren (package:flutter/src/rendering/box.dart:2819:33)
    #22     RenderStack.hitTestChildren (package:flutter/src/rendering/stack.dart:602:12)
    #23     RenderBox.hitTest (package:flutter/src/rendering/box.dart:2463:11)
    #24     RenderProxyBoxMixin.hitTestChildren (package:flutter/src/rendering/proxy_box.dart:131:19)
    #25     RenderBox.hitTest (package:flutter/src/rendering/box.dart:2463:11)
    #26     RenderProxyBoxMixin.hitTestChildren (package:flutter/src/rendering/proxy_box.dart:131:19)
    #27     RenderFractionalTranslation.hitTestChildren.<anonymous closure> (package:flutter/src/rendering/proxy_box.dart:2797:22)
    #28     BoxHitTestResult.addWithPaintOffset (package:flutter/src/rendering/box.dart:785:31)
    #29     RenderFractionalTranslation.hitTestChildren (package:flutter/src/rendering/proxy_box.dart:2791:19)
    #30     RenderFractionalTranslation.hitTest (package:flutter/src/rendering/proxy_box.dart:2777:12)
    #31     RenderProxyBoxMixin.hitTestChildren (package:flutter/src/rendering/proxy_box.dart:131:19)
    #32     RenderFractionalTranslation.hitTestChildren.<anonymous closure> (package:flutter/src/rendering/proxy_box.dart:2797:22)
    #33     BoxHitTestResult.addWithPaintOffset (package:flutter/src/rendering/box.dart:785:31)
    #34     RenderFractionalTranslation.hitTestChildren (package:flutter/src/rendering/proxy_box.dart:2791:19)
    #35     RenderFractionalTranslation.hitTest (package:flutter/src/rendering/proxy_box.dart:2777:12)
    #36     RenderProxyBoxMixin.hitTestChildren (package:flutter/src/rendering/proxy_box.dart:131:19)
    #37     RenderBox.hitTest (package:flutter/src/rendering/box.dart:2463:11)
    #38     RenderProxyBoxMixin.hitTestChildren (package:flutter/src/rendering/proxy_box.dart:131:19)
    #39     _RenderFocusTrap.hitTest (package:flutter/src/widgets/routes.dart:2172:19)
    #40     RenderProxyBoxMixin.hitTestChildren (package:flutter/src/rendering/proxy_box.dart:131:19)
    #41     RenderBox.hitTest (package:flutter/src/rendering/box.dart:2463:11)
    #42     RenderProxyBoxMixin.hitTestChildren (package:flutter/src/rendering/proxy_box.dart:131:19)
    #43     RenderBox.hitTest (package:flutter/src/rendering/box.dart:2463:11)
    #44     RenderOffstage.hitTest (package:flutter/src/rendering/proxy_box.dart:3468:31)
    #45     RenderProxyBoxMixin.hitTestChildren (package:flutter/src/rendering/proxy_box.dart:131:19)
    #46     RenderBox.hitTest (package:flutter/src/rendering/box.dart:2463:11)
    #47     _RenderTheatre.hitTestChildren.<anonymous closure> (package:flutter/src/widgets/overlay.dart:771:25)
    #48     BoxHitTestResult.addWithPaintOffset (package:flutter/src/rendering/box.dart:785:31)
    #49     _RenderTheatre.hitTestChildren (package:flutter/src/widgets/overlay.dart:766:33)
    #50     RenderBox.hitTest (package:flutter/src/rendering/box.dart:2463:11)
    #51     RenderProxyBoxMixin.hitTestChildren (package:flutter/src/rendering/proxy_box.dart:131:19)
    #52     RenderBox.hitTest (package:flutter/src/rendering/box.dart:2463:11)
    #53     RenderProxyBoxMixin.hitTestChildren (package:flutter/src/rendering/proxy_box.dart:131:19)
    #54     RenderBox.hitTest (package:flutter/src/rendering/box.dart:2463:11)
    #55     RenderAbsorbPointer.hitTest (package:flutter/src/rendering/proxy_box.dart:3566:17)
    #56     RenderProxyBoxMixin.hitTestChildren (package:flutter/src/rendering/proxy_box.dart:131:19)
    #57     RenderProxyBoxWithHitTestBehavior.hitTest (package:flutter/src/rendering/proxy_box.dart:178:19)
    #58     RenderProxyBoxMixin.hitTestChildren (package:flutter/src/rendering/proxy_box.dart:131:19)
    #59     RenderCustomPaint.hitTestChildren (package:flutter/src/rendering/custom_paint.dart:535:18)
    #60     RenderBox.hitTest (package:flutter/src/rendering/box.dart:2463:11)
    #61     RenderProxyBoxMixin.hitTestChildren (package:flutter/src/rendering/proxy_box.dart:131:19)
    #62     RenderBox.hitTest (package:flutter/src/rendering/box.dart:2463:11)
    #63     RenderProxyBoxMixin.hitTestChildren (package:flutter/src/rendering/proxy_box.dart:131:19)
    #64     RenderBox.hitTest (package:flutter/src/rendering/box.dart:2463:11)
    #65     RenderProxyBoxMixin.hitTestChildren (package:flutter/src/rendering/proxy_box.dart:131:19)
    #66     RenderBox.hitTest (package:flutter/src/rendering/box.dart:2463:11)
    #67     RenderProxyBoxMixin.hitTestChildren (package:flutter/src/rendering/proxy_box.dart:131:19)
    #68     RenderBox.hitTest (package:flutter/src/rendering/box.dart:2463:11)
    #69     RenderView.hitTest (package:flutter/src/rendering/view.dart:185:14)
    #70     RendererBinding.hitTest (package:flutter/src/rendering/binding.dart:538:16)
    #71     GestureBinding._handlePointerEventImmediately (package:flutter/src/gestures/binding.dart:352:7)
    #72     GestureBinding.handlePointerEvent (package:flutter/src/gestures/binding.dart:344:5)
    #73     GestureBinding._flushPointerEventQueue (package:flutter/src/gestures/binding.dart:302:7)
    #74     GestureBinding._handlePointerDataPacket (package:flutter/src/gestures/binding.dart:285:7)
    #75     _rootRunUnary (dart:async/zone.dart:1442:13)
    #76     _CustomZone.runUnary (dart:async/zone.dart:1335:19)
    #77     _CustomZone.runUnaryGuarded (dart:async/zone.dart:1244:7)
    #78     _invoke1 (dart:ui/hooks.dart:170:10)
    #79     PlatformDispatcher._dispatchPointerDataPacket (dart:ui/platform_dispatcher.dart:331:7)
    #80     _dispatchPointerDataPacket (dart:ui/hooks.dart:94:31)
    

    flutter doctor -v

    [✓] Flutter (Channel stable, 3.0.1, on macOS 12.2.1 21D62 darwin-x64, locale
        en-CN)
        • Flutter version 3.0.1 at /Users/ouyangfeng/flutter
        • Upstream repository https://github.com/flutter/flutter.git
        • Framework revision fb57da5f94 (5 weeks ago), 2022-05-19 15:50:29 -0700
        • Engine revision caaafc5604
        • Dart version 2.17.1
        • DevTools version 2.12.2
        • Pub download mirror https://pub.flutter-io.cn
        • Flutter download mirror https://storage.flutter-io.cn
    
    [!] Android toolchain - develop for Android devices (Android SDK version 30.0.3)
        • Android SDK at /Users/ouyangfeng/Library/Android/sdk
        ✗ cmdline-tools component is missing
          Run `path/to/sdkmanager --install "cmdline-tools;latest"`
          See https://developer.android.com/studio/command-line for more details.
        ✗ Android license status unknown.
          Run `flutter doctor --android-licenses` to accept the SDK licenses.
          See https://flutter.dev/docs/get-started/install/macos#android-setup for
          more details.
    
    [✓] Xcode - develop for iOS and macOS (Xcode 13.3)
        • Xcode at /Applications/Xcode.app/Contents/Developer
        • CocoaPods version 1.11.2
    
    [✓] Chrome - develop for the web
        • Chrome at /Applications/Google Chrome.app/Contents/MacOS/Google Chrome
    
    [!] Android Studio
        • Android Studio at /Applications/Android Studio Preview.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
        ✗ Unable to find bundled Java version.
        • Try updating or re-installing Android Studio.
    
    [✓] Android Studio (version 4.1)
        • 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
          1.8.0_242-release-1644-b3-6915495)
    
    [✓] IntelliJ IDEA Community Edition (version 2020.3.2)
        • IntelliJ at /Applications/IntelliJ IDEA CE.app
        • 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
    
    [✓] VS Code (version 1.68.1)
        • VS Code at /Applications/Visual Studio Code.app/Contents
        • Flutter extension version 3.42.0
    
    [✓] Connected device (2 available)
        • macOS (desktop) • macos  • darwin-x64     • macOS 12.2.1 21D62 darwin-x64
        • Chrome (web)    • chrome • web-javascript • Google Chrome 102.0.5005.115
    
    [✓] HTTP Host Availability
        • All required HTTP hosts are available
    
    bug 
    opened by yuanhoujun 4
  • I tried the example but no response.

    I tried the example but no response.

    Hi, I ran this example on macOS 12.2.1, but no response.

    I can't drag the image, and I also can't drag other files to the container.

    Please check it if you have time, thank you so much.

    good first issue 
    opened by yuanhoujun 2
  • Expose listeners

    Expose listeners

    This PR adds listeners for DragEvent to NativeDragNDrop and exposes them to package users.

    This allows package users to react to general drag events anywhere in the app (e.g. changing some UI whenever some native drag starts or stops)

    • Adjusted NativeDragNDrop
    • Adjusted exports
    • Adjusted example
    enhancement 
    opened by ltOgt 0
Releases(v1.2.4)
Owner
Skalio GmbH
Skalio GmbH
Widgets to support native drag and drop in Flutter.

Drag and Drop Flutter This is the repository for a plugin implementing drag and drop functionality for Flutter. This is a federated plugin. There is a

Jesse 0 Dec 29, 2021
A flutter deskstop package that allows you to drag the native file into app support.

FileDragAndDrop A flutter deskstop package that allows you to drag the native file into app support. Platform Support Now only support on macOS, if an

逸风 13 Oct 24, 2022
Native Drag and Drop for Flutter on iOS and MacOS

native_draggable A new flutter plugin project. Getting Started This project is a starting point for a Flutter plug-in package, a specialized package t

Rody Davis 59 Dec 4, 2022
Drag and Drop for Dart web apps with mouse and touch support.

Dart Drag and Drop Drag and Drop for Dart web apps with mouse and touch support. GitHub | Pub | Demos and Examples Features Use any HTML Element as Dr

Marco Jakob 136 Nov 18, 2022
Allows send emails from flutter using native platform functionality.

flutter_email_sender Allows send emails from flutter using native platform functionality. In android it opens default mail app via intent. In iOS MFMa

Tautvydas Šidlauskas 107 Jan 3, 2023
Mildly encrypted package - An encryption client & server for Dart Native + mobile platforms.

TODO: Put a short description of the package here that helps potential users know whether this package might be useful for them. Features TODO: List w

Andrew Stein 0 Jan 9, 2022
dna, dart native access. A lightweight dart to native super channel plugin

dna, dart native access. A lightweight dart to native super channel plugin, You can use it to invoke any native code directly in contextual and chained dart code.

Assuner 14 Jul 11, 2022
Dart package to support Wake-on-LAN functionality

wake_on_lan Dart library package to easily send Wake-on-LAN magic packets to devices on your local network. Getting Started wake_on_lan has three core

Jagandeep Brar 3 Oct 24, 2022
Flutter plugin, support android/ios.Support crop, flip, rotate, color martix, mix image, add text. merge multi images.

image_editor The version of readme pub and github may be inconsistent, please refer to github. Use native(objc,kotlin) code to handle image data, it i

FlutterCandies 317 Jan 3, 2023