Flutter图像绘制插件bulk_image_draw的使用

Flutter图像绘制插件bulk_image_draw的使用

builk_image_draw 是一个 Flutter 包,允许你在图像上绘制线条或放置图钉。目前仅支持 Android 和 iOS 平台。

安装

首先,在 pubspec.yaml 文件中添加 builk_image_draw 作为依赖项。

Android

在项目的 android/app/build.gradle 文件中,将最低的 Android SDK 版本设置为 21 或更高。

minSdkVersion 25

然后,在 pubspec.yaml 文件中添加以下内容:

dependencies:
  builk_image_draw: any

接下来,运行 flutter pub get 来获取依赖。

Widget 使用

以下是 BuilkImageDraw 的主要属性和用法:

属性说明

属性名称 描述
imageUrl 图像的位置或 URL
deletePin 点击移除图钉时的回调函数
undoComplete 撤销事件成功处理后的回调函数
clearButton 清除按钮事件成功处理后的回调函数
loadPlanComplete 渲染 imageUrl 成功后的回调函数
drawComplete 绘制列表渲染成功的回调函数
drawImageSuccess 绘制完成后的回调函数
drawListView 要放置在图像上的图片列表
drawStackBackList 可以撤销的图片列表

示例代码

以下是一个完整的示例代码,展示了如何使用 builk_image_draw 插件。

import 'dart:io';

import 'package:builk_image_draw/image_draw/builk_image_draw.dart';
import 'package:builk_image_draw/image_draw/builk_image_draw_controller.dart';
import 'package:flutter/material.dart';

void main() {
  runApp(const MyApp());
}

class MyApp extends StatefulWidget {
  const MyApp({super.key});

  [@override](/user/override)
  State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  [@override](/user/override)
  void initState() {
    super.initState();
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: ImageDrawWidget(),
    );
  }
}

class ImageDrawWidget extends StatefulWidget {
  ImageDrawWidget({Key? key}) : super(key: key);

  [@override](/user/override)
  _ImageDrawWidgetState createState() {
    return _ImageDrawWidgetState();
  }
}

class _ImageDrawWidgetState extends State<ImageDrawWidget> {
  File? imagefile;
  var imageDrawControl = BuilkImageDrawController();

  [@override](/user/override)
  void initState() {
    super.initState();
  }

  [@override](/user/override)
  void dispose() {
    super.dispose();
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('Plugin example app'),
      ),
      body: Container(
        alignment: Alignment.center,
        child: Column(
          crossAxisAlignment: CrossAxisAlignment.center,
          children: [
            // 显示当前选择的图像
            (imagefile != null)
                ? Container(
                    alignment: Alignment.center,
                    width: 200,
                    child: Image.file(imagefile!),
                  )
                : Container(
                    alignment: Alignment.center,
                    width: 200,
                    child: Icon(Icons.image, size: 200),
                  )
          ],
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: () async {
          // 弹出绘制界面
          showDialog(
            context: context,
            builder: (context) {
              return BuilkImageDraw(
                deletePin: (value) {},
                undoComplete: () {},
                clearButton: () {},
                drawListView: [],
                drawStackBackList: [],
                controller: imageDrawControl,
                drawComplete: () { },
                loadPlanComplete: () {
                  // 设置画笔颜色为红色并启用画笔模式
                  imageDrawControl.changeColor(Colors.red);
                  imageDrawControl.selectPen(true);
                },
                drawImageSuccess: (value) { },
                imageUrl: 'https://wpmedia.roomsketcher.com/content/uploads/2022/01/06145940/What-is-a-floor-plan-with-dimensions.png',
              );
            },
          );
        },
        child: Icon(Icons.edit),
      ),
    );
  }
}
1 回复

更多关于Flutter图像绘制插件bulk_image_draw的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


bulk_image_draw 是一个用于在 Flutter 中高效绘制多个图像的插件。它允许你在一个画布上批量绘制多个图像,从而提高性能,特别是在需要绘制大量图像时。

安装

首先,你需要在 pubspec.yaml 文件中添加 bulk_image_draw 插件的依赖:

dependencies:
  flutter:
    sdk: flutter
  bulk_image_draw: ^0.1.0  # 请检查最新版本

然后运行 flutter pub get 来安装依赖。

基本用法

  1. 导入包

    import 'package:bulk_image_draw/bulk_image_draw.dart';
  2. 创建 BulkImageDraw 实例

    final bulkImageDraw = BulkImageDraw();
  3. 加载图像

    你可以使用 ImageProvider 来加载图像,例如 AssetImageNetworkImage

    final imageProvider = AssetImage('assets/images/example.png');
  4. 绘制图像

    使用 bulkImageDraw.drawImage 方法来绘制图像。你可以指定图像的位置、大小等参数。

    bulkImageDraw.drawImage(
      imageProvider: imageProvider,
      rect: Rect.fromLTWH(50, 50, 100, 100),
    );
  5. 在画布上绘制

    最后,你需要在 CustomPaintpaint 方法中调用 bulkImageDraw.paint 来将图像绘制到画布上。

    class MyPainter extends CustomPainter {
      final BulkImageDraw bulkImageDraw;
    
      MyPainter(this.bulkImageDraw);
    
      @override
      void paint(Canvas canvas, Size size) {
        bulkImageDraw.paint(canvas);
      }
    
      @override
      bool shouldRepaint(covariant CustomPainter oldDelegate) {
        return true;
      }
    }
  6. 使用 CustomPaint 组件

    在你的 UI 中使用 CustomPaint 组件来显示绘制的图像。

    class MyHomePage extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        final bulkImageDraw = BulkImageDraw();
        final imageProvider = AssetImage('assets/images/example.png');
    
        bulkImageDraw.drawImage(
          imageProvider: imageProvider,
          rect: Rect.fromLTWH(50, 50, 100, 100),
        );
    
        return Scaffold(
          appBar: AppBar(
            title: Text('Bulk Image Draw Example'),
          ),
          body: Center(
            child: CustomPaint(
              size: Size(300, 300),
              painter: MyPainter(bulkImageDraw),
            ),
          ),
        );
      }
    }

高级用法

  • 批量绘制多个图像

    你可以多次调用 bulkImageDraw.drawImage 来绘制多个图像。

    bulkImageDraw.drawImage(
      imageProvider: AssetImage('assets/images/image1.png'),
      rect: Rect.fromLTWH(10, 10, 50, 50),
    );
    
    bulkImageDraw.drawImage(
      imageProvider: AssetImage('assets/images/image2.png'),
      rect: Rect.fromLTWH(70, 70, 50, 50),
    );
  • 图像缩放和旋转

    你可以通过 scalerotation 参数来对图像进行缩放和旋转。

    bulkImageDraw.drawImage(
      imageProvider: AssetImage('assets/images/example.png'),
      rect: Rect.fromLTWH(50, 50, 100, 100),
      scale: 0.5,
      rotation: 45,
    );
回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!