Flutter手语翻译插件mobile_sign_language_translation的使用

Flutter手语翻译插件mobile_sign_language_translation的使用

使用方法

要使用 mobile_sign_language_translation 插件,首先需要将其包裹在你的 MaterialApp 中,并传入必要的信息。

示例代码(main.dart)

import 'package:flutter/material.dart';
import 'package:mobile_sign_language_translation/mobile_sign_language_translation.dart';

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

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

  @override
  Widget build(BuildContext context) {
    // 包裹 MaterialApp 并传入请求密钥和URL
    return SignForDeaf(
      requestKey: 'YOUR_API_KEY', // 替换为你的API密钥
      requestUrl: 'YOUR_API_URL', // 替换为你的API URL
      child: MaterialApp(
        title: 'Flutter Demo',
        theme: ThemeData(
          colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
          useMaterial3: true,
        ),
        home: const MyHomePage(title: 'Flutter Demo Home Page'),
      ),
    );
  }
}

class MyHomePage extends StatefulWidget {
  const MyHomePage({super.key, required this.title});

  final String title;

  @override
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  int _counter = 0;

  void _incrementCounter() {
    setState(() {
      _counter++;
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        backgroundColor: Theme.of(context).colorScheme.inversePrimary,
        title: Text(widget.title),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            // 使用 SignForDeafArea 组件来展示手语翻译区域
            const SignForDeafArea(
              requestKey: 'YOUR_API_KEY', // 替换为你的API密钥
              requestUrl: 'YOUR_API_URL', // 替换为你的API URL
              child: Text(
                '你已经按了按钮这么多次:',
              ),
            ),
            Text(
              '$_counter',
              style: Theme.of(context).textTheme.headlineMedium,
            ),
          ],
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: _incrementCounter,
        tooltip: '增加计数',
        child: const Icon(Icons.add),
      ),
    );
  }
}

注意事项

如果你的应用程序使用了多个页面或替代路由结构,确保在每个页面上重建该组件!

示例代码(使用 MaterialApp.builder

import 'package:flutter/material.dart';
import 'package:mobile_sign_language_translation/mobile_sign_language_translation.dart';

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

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

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      builder: (context, child) {
        // 在 builder 中包裹 SignForDeaf 组件
        return SignForDeaf(
          requestKey: 'YOUR_API_KEY', // 替换为你的API密钥
          requestUrl: 'YOUR_API_URL', // 替换为你的API URL
          child: child!,
        );
      },
      theme: ThemeData(
        colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
        useMaterial3: true,
      ),
      home: const MyHomePage(title: 'Flutter Demo Home Page'),
    );
  }
}

示例代码(使用 AutoRoute)

路由配置
import 'package:auto_route/auto_route.dart';

@AutoRouterConfig()
class AppRouter extends $AppRouter {
  @override
  List<AutoRoute> get routes => [...routesList];

  static PageRouteBuilder signForDeafBuilder(BuildContext context, Widget child,
      Page<dynamic> page, RouteTransitionsBuilder transitionsBuilder) {
    return PageRouteBuilder(
      settings: page,
      pageBuilder: (_, __, ___) {
        return SignForDeaf(
          requestKey: 'YOUR_API_KEY', // 替换为你的API密钥
          requestUrl: 'YOUR_API_URL', // 替换为你的API URL
          child: child!,
        );
      },
      transitionsBuilder: transitionsBuilder,
    );
  }
}
路由列表
List<AutoRoute> routesList = [
  CustomRoute(
    page: Route.page,
    customRouteBuilder: (context, child, page) => AppRouter.signForDeafBuilder(
        context, child, page, TransitionsBuilders.fadeIn),
  ),
];

更多关于Flutter手语翻译插件mobile_sign_language_translation的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter手语翻译插件mobile_sign_language_translation的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


mobile_sign_language_translation 是一个用于 Flutter 的手语翻译插件,可以帮助开发者将手语翻译成文本或语音,或者将文本/语音翻译成手语。这个插件可以用于开发手语翻译应用,帮助听力障碍者更好地与外界沟通。

1. 安装插件

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

dependencies:
  flutter:
    sdk: flutter
  mobile_sign_language_translation: ^latest_version

然后运行 flutter pub get 来安装插件。

2. 导入插件

在需要使用插件的 Dart 文件中导入 mobile_sign_language_translation

import 'package:mobile_sign_language_translation/mobile_sign_language_translation.dart';

3. 初始化插件

在使用插件的功能之前,通常需要先初始化插件:

void initializePlugin() async {
  await MobileSignLanguageTranslation.initialize();
}

4. 使用翻译功能

mobile_sign_language_translation 提供了多种翻译功能,包括将手语翻译成文本、将文本翻译成手语等。

4.1 将手语翻译成文本

你可以使用插件将手语翻译成文本。通常,这个过程会涉及到使用设备的摄像头捕获手语动作,然后通过插件进行识别和翻译。

void translateSignToText() async {
  String translatedText = await MobileSignLanguageTranslation.signToText();
  print("Translated Text: $translatedText");
}

4.2 将文本翻译成手语

你也可以将文本翻译成手语,通常这个过程会生成手语动画或手势。

void translateTextToSign(String text) async {
  await MobileSignLanguageTranslation.textToSign(text);
}

4.3 将语音翻译成手语

如果你有语音输入,也可以将语音翻译成手语:

void translateSpeechToSign() async {
  await MobileSignLanguageTranslation.speechToSign();
}

4.4 将手语翻译成语音

你还可以将手语翻译成语音输出:

void translateSignToSpeech() async {
  await MobileSignLanguageTranslation.signToSpeech();
}

5. 处理权限

由于插件可能涉及到使用摄像头、麦克风等设备功能,你需要在 AndroidManifest.xmlInfo.plist 中添加相应的权限。

Android

AndroidManifest.xml 中添加以下权限:

<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />

iOS

Info.plist 中添加以下权限:

<key>NSCameraUsageDescription</key>
<string>We need access to the camera to capture sign language.</string>
<key>NSMicrophoneUsageDescription</key>
<string>We need access to the microphone to capture speech.</string>

6. 错误处理

在使用插件的过程中,可能会遇到各种错误,如权限未授予、设备不支持等。你可以使用 try-catch 来捕获并处理这些错误:

void translateSignToText() async {
  try {
    String translatedText = await MobileSignLanguageTranslation.signToText();
    print("Translated Text: $translatedText");
  } catch (e) {
    print("Error: $e");
  }
}

7. 释放资源

在使用完插件后,记得释放相关资源:

void disposePlugin() async {
  await MobileSignLanguageTranslation.dispose();
}

8. 示例代码

以下是一个简单的 Flutter 应用示例,展示了如何使用 mobile_sign_language_translation 插件:

import 'package:flutter/material.dart';
import 'package:mobile_sign_language_translation/mobile_sign_language_translation.dart';

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

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: SignLanguageTranslationScreen(),
    );
  }
}

class SignLanguageTranslationScreen extends StatefulWidget {
  [@override](/user/override)
  _SignLanguageTranslationScreenState createState() => _SignLanguageTranslationScreenState();
}

class _SignLanguageTranslationScreenState extends State<SignLanguageTranslationScreen> {
  String translatedText = '';

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

  void translateSignToText() async {
    try {
      String text = await MobileSignLanguageTranslation.signToText();
      setState(() {
        translatedText = text;
      });
    } catch (e) {
      print("Error: $e");
    }
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Sign Language Translation'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            ElevatedButton(
              onPressed: translateSignToText,
              child: Text('Translate Sign to Text'),
            ),
            SizedBox(height: 20),
            Text('Translated Text: $translatedText'),
          ],
        ),
      ),
    );
  }

  [@override](/user/override)
  void dispose() {
    MobileSignLanguageTranslation.dispose();
    super.dispose();
  }
}
回到顶部