Flutter手势签名识别插件signwriting_flutter的使用

Flutter手势签名识别插件signwriting_flutter的使用

简介

signwriting_flutter 是一个用于在 Flutter 应用程序中处理手语书写格式的插件。它包括字体文件、分词器、可视化工具和实用工具。大部分实现可以在 signwriting 包中找到。

如何使用

1. 添加依赖

首先,在你的 pubspec.yaml 文件中添加 signwriting_flutter 依赖:

dependencies:
  signwriting_flutter: ^latest_version

2. 配置字体

下载字体文件并将其放置在项目的 assets/fonts 目录下。在 pubspec.yaml 文件中配置这些字体:

flutter:
  fonts:
    - family: SuttonSignWritingFill
      fonts:
        - asset: assets/fonts/SuttonSignWritingFill.ttf

    - family: SuttonSignWritingLine
      fonts:
        - asset: assets/fonts/SuttonSignWritingLine.ttf

确保运行 flutter pub get 来获取新的依赖项。

示例代码

以下是一个简单的示例,展示了如何使用 signwriting_flutter 插件将手语书写字符串转换为图像。

import 'dart:typed_data';
import 'package:flutter/material.dart';
import 'package:signwriting_flutter/signwriting_flutter.dart';

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

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

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: '手语签名测试',
      home: Scaffold(
        appBar: AppBar(
          title: const Text('手语签名测试'),
        ),
        backgroundColor: Colors.black,
        body: Center(
          child: FutureBuilder<Uint8List>(
            future: signwritingToImage(
              'AS10011S10019S2e704S2e748M525x535S2e748483x510S10011501x466S20544510x500S10019476x475',
              trustBox: false,
              lineColor: Colors.deepOrange,
              fillColor: Colors.white,
            ),
            builder: (BuildContext context, AsyncSnapshot<Uint8List> snapshot) {
              if (snapshot.connectionState == ConnectionState.done) {
                if (snapshot.hasData) {
                  return Image.memory(snapshot.data!);
                } else {
                  return const Text('无法渲染手语签名图像');
                }
              } else {
                return const CircularProgressIndicator();
              }
            },
          ),
        ),
      ),
    );
  }
}

代码解释

  1. 导入必要的包

    import 'dart:typed_data';
    import 'package:flutter/material.dart';
    import 'package:signwriting_flutter/signwriting_flutter.dart';
    
  2. 定义主应用类

    void main() {
      runApp(const MyApp());
    }
    
    class MyApp extends StatelessWidget {
      const MyApp({super.key});
      
      @override
      Widget build(BuildContext context) {
        return MaterialApp(
          title: '手语签名测试',
          home: Scaffold(
            appBar: AppBar(
              title: const Text('手语签名测试'),
            ),
            backgroundColor: Colors.black,
            body: Center(
              // 使用FutureBuilder异步加载图像
              child: FutureBuilder<Uint8List>(
                future: signwritingToImage(
                  'AS10011S10019S2e704S2e748M525x535S2e748483x510S10011501x466S20544510x500S10019476x475',
                  trustBox: false,
                  lineColor: Colors.deepOrange,
                  fillColor: Colors.white,
                ),
                builder: (BuildContext context, AsyncSnapshot<Uint8List> snapshot) {
                  if (snapshot.connectionState == ConnectionState.done) {
                    if (snapshot.hasData) {
                      return Image.memory(snapshot.data!);
                    } else {
                      return const Text('无法渲染手语签名图像');
                    }
                  } else {
                    return const CircularProgressIndicator();
                  }
                },
              ),
            ),
          ),
        );
      }
    }
    

更多关于Flutter手势签名识别插件signwriting_flutter的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter手势签名识别插件signwriting_flutter的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


signwriting_flutter 是一个用于在 Flutter 应用中实现手势签名的插件。它允许用户通过手指或手写笔在屏幕上绘制签名,并将签名保存为图像或进行其他处理。以下是如何在 Flutter 项目中使用 signwriting_flutter 插件的详细步骤。

1. 添加依赖

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

dependencies:
  flutter:
    sdk: flutter
  signwriting_flutter: ^1.0.0  # 请根据最新版本号进行替换

然后运行 flutter pub get 以获取依赖。

2. 导入包

在你的 Dart 文件中导入 signwriting_flutter 包。

import 'package:signwriting_flutter/signwriting_flutter.dart';

3. 使用 SignatureWidget

SignatureWidgetsignwriting_flutter 提供的一个小部件,用于显示和捕获用户的签名。你可以在你的应用中使用它。

class SignaturePage extends StatefulWidget {
  @override
  _SignaturePageState createState() => _SignaturePageState();
}

class _SignaturePageState extends State<SignaturePage> {
  final GlobalKey<SignatureWidgetState> _signatureKey = GlobalKey();

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('手写签名'),
      ),
      body: Column(
        children: [
          Expanded(
            child: SignatureWidget(
              key: _signatureKey,
              backgroundColor: Colors.white,
            ),
          ),
          Row(
            mainAxisAlignment: MainAxisAlignment.spaceEvenly,
            children: [
              ElevatedButton(
                onPressed: () {
                  // 清除签名
                  _signatureKey.currentState?.clear();
                },
                child: Text('清除'),
              ),
              ElevatedButton(
                onPressed: () async {
                  // 获取签名图像
                  final image = await _signatureKey.currentState?.toImage();
                  if (image != null) {
                    // 处理图像,例如保存或显示
                    // 你可以使用 `image.toByteData()` 获取字节数据
                    print('签名已保存');
                  }
                },
                child: Text('保存'),
              ),
            ],
          ),
        ],
      ),
    );
  }
}

4. 运行应用

现在你可以运行你的 Flutter 应用,并看到 SignatureWidget 的展示效果。用户可以在屏幕上绘制签名,并使用“清除”按钮清除签名,或使用“保存”按钮将签名保存为图像。

5. 处理签名图像

在“保存”按钮的点击事件中,你可以通过 toImage() 方法获取签名的图像。你可以将这个图像保存到设备、上传到服务器或在应用中显示。

例如,你可以将图像保存到设备的本地存储:

import 'dart:io';
import 'dart:typed_data';
import 'package:path_provider/path_provider.dart';

Future<void> saveSignature(Uint8List imageBytes) async {
  final directory = await getApplicationDocumentsDirectory();
  final imagePath = '${directory.path}/signature.png';
  File(imagePath).writeAsBytesSync(imageBytes);
  print('签名已保存到: $imagePath');
}

然后在“保存”按钮的点击事件中调用该方法:

ElevatedButton(
  onPressed: () async {
    final image = await _signatureKey.currentState?.toImage();
    if (image != null) {
      final byteData = await image.toByteData(format: ImageByteFormat.png);
      if (byteData != null) {
        saveSignature(byteData.buffer.asUint8List());
      }
    }
  },
  child: Text('保存'),
);
回到顶部