Flutter语言识别插件fl_mlkit_identify_language的使用

Flutter语言识别插件fl_mlkit_identify_language的使用

识别Android和iOS上的文本语言

使用fl_mlkit_identify_language插件可以识别给定文本的语言。如果调用成功,则会返回BCP-47语言代码tagconfidence值。如果没有检测到语言,则返回und(未确定)。

支持的语言列表可以在这里查看。

示例代码

以下是一个完整的示例,展示了如何在Flutter应用中使用fl_mlkit_identify_language插件。

import 'package:fl_extended/fl_extended.dart';
import 'package:fl_mlkit_identify_language/fl_mlkit_identify_language.dart';
import 'package:flutter/material.dart';

void main() {
  WidgetsFlutterBinding.ensureInitialized();
  runApp(
    MaterialApp(
      navigatorKey: FlExtended().navigatorKey,
      scaffoldMessengerKey: FlExtended().scaffoldMessengerKey,
      debugShowCheckedModeBanner: false,
      theme: ThemeData.light(useMaterial3: true),
      darkTheme: ThemeData.dark(useMaterial3: true),
      title: 'FlMlKitIdentifyLanguage',
      home: Scaffold(
        appBar: AppBarText('Fl MlKit Identify Language'),
        body: const SingleChildScrollView(
          child: Padding(padding: EdgeInsets.all(10.0), child: _App()),
        ),
      ),
    ),
  );
}

class _App extends StatefulWidget {
  const _App();

  [@override](/user/override)
  _AppState createState() => _AppState();
}

class _AppState extends State<_App> {
  ValueNotifier<List<IdentifiedLanguageModel>> identifiedLanguageModel = ValueNotifier<List<IdentifiedLanguageModel>>([]);
  TextEditingController controller = TextEditingController();
  FocusNode focusNode = FocusNode();
  FlMlKitIdentifyLanguage mlKitIdentifyLanguage = FlMlKitIdentifyLanguage();

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Column(
      mainAxisAlignment: MainAxisAlignment.center,
      children: [
        TextField(
          controller: controller,
          focusNode: focusNode,
          maxLength: 500,
          maxLines: 4,
          onSubmitted: (value) {
            focusNode.unfocus();
          },
          decoration: const InputDecoration(
            border: OutlineInputBorder(),
            hintText: '请输入文本',
          ),
        ),
        CustomFutureBuilder<double>(
          future: () async => mlKitIdentifyLanguage.confidence,
          onWaiting: (_) => const CircularProgressIndicator(),
          onDone: (_, double value, reset) {
            return ElevatedText(
              onPressed: () async {
                focusNode.unfocus();
                final confidence = await selectConfidence();
                if (confidence != null) {
                  final state = await mlKitIdentifyLanguage.setConfidence(confidence);
                  if (state) reset();
                }
              },
              text: '点击修改置信度 : $value',
            );
          },
        ),
        ElevatedText(text: '识别语言', onPressed: identifyLanguage),
        ElevatedText(
          text: '获取本地置信度',
          onPressed: () {
            mlKitIdentifyLanguage.getCurrentConfidence().then((value) {
              showToast(value.toString());
            });
          },
        ),
        ElevatedText(
          text: '识别可能的语言',
          onPressed: identifyPossibleLanguages,
        ),
        const SizedBox(height: 20),
        ValueListenableBuilder(
          valueListenable: identifiedLanguageModel,
          builder: (_, List<IdentifiedLanguageModel> value, __) {
            return Column(
              children: value.builder(
                (item) => Container(
                  margin: const EdgeInsets.symmetric(vertical: 10),
                  width: double.infinity,
                  padding: const EdgeInsets.all(10),
                  decoration: BoxDecoration(
                    borderRadius: BorderRadius.circular(6),
                  ),
                  child: BText.rich(
                    texts: [
                      '置信度:',
                      item.confidence.toString(),
                      '      语言标签:',
                      item.languageTag,
                    ],
                    textAlign: TextAlign.start,
                    style: TextStyle(fontWeight: FontWeight.bold),
                  ),
                ),
              ),
            );
          },
        ),
      ],
    );
  }

  Future<void> identifyLanguage() async {
    if (controller.text.isEmpty) {
      showToast('请输入文本');
      return;
    }
    focusNode.unfocus();
    final data = await mlKitIdentifyLanguage.identifyLanguage(controller.text);
    if (data != null) {
      identifiedLanguageModel.value = [data];
      setState(() {});
    }
  }

  Future<void> identifyPossibleLanguages() async {
    if (controller.text.isEmpty) {
      showToast('请输入文本');
      return;
    }
    context.requestFocus();
    final data = await mlKitIdentifyLanguage.identifyPossibleLanguages(controller.text);
    identifiedLanguageModel.value = data;
    setState(() {});
  }

  Future<double?> selectConfidence() {
    var confidences = [0.01, 0.1, 0.25, 0.5, 0.75, 1.0];
    return Universal(
      safeBottom: true,
      mainAxisSize: MainAxisSize.min,
      decoration: const BoxDecoration(
        borderRadius: BorderRadius.horizontal(
          left: Radius.circular(10),
          right: Radius.circular(10),
        ),
      ),
      children: confidences.builder(
        (item) => Universal(
          width: double.infinity,
          onTap: () {
            pop(item);
          },
          padding: const EdgeInsets.symmetric(vertical: 10),
          child: BText(item.toString(), textAlign: TextAlign.center),
        ),
      ),
    ).popupBottomSheet(
      options: const BottomSheetOptions(isScrollControlled: false),
    );
  }
}

class AppBarText extends AppBar {
  AppBarText(String text, {super.key})
    : super(
        elevation: 0,
        title: BText(text, fontSize: 18, fontWeight: FontWeight.bold),
        centerTitle: true,
      );
}

class ElevatedText extends ElevatedButton {
  ElevatedText({super.key, required String text, required super.onPressed})
    : super(child: Text(text));
}

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

1 回复

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


fl_mlkit_identify_language 是一个 Flutter 插件,用于在 Flutter 应用中集成 Google ML Kit 的语言识别功能。通过该插件,你可以轻松地识别一段文本所使用的语言。以下是使用 fl_mlkit_identify_language 插件的步骤:

1. 添加依赖

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

dependencies:
  flutter:
    sdk: flutter
  fl_mlkit_identify_language: ^0.0.1 # 请检查最新版本

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

2. 导入插件

在需要使用语言识别功能的 Dart 文件中导入插件:

import 'package:fl_mlkit_identify_language/fl_mlkit_identify_language.dart';

3. 初始化插件

在使用插件之前,建议先初始化它:

FlMlkitIdentifyLanguage.initialize();

4. 识别语言

你可以使用 identifyLanguage 方法来识别一段文本的语言:

void identifyLanguage(String text) async {
  try {
    String language = await FlMlkitIdentifyLanguage.identifyLanguage(text);
    print('Identified language: $language');
  } catch (e) {
    print('Error identifying language: $e');
  }
}

5. 使用示例

你可以在按钮点击事件或其他需要的地方调用 identifyLanguage 方法:

ElevatedButton(
  onPressed: () {
    identifyLanguage("Hola, ¿cómo estás?");
  },
  child: Text('Identify Language'),
);

6. 处理结果

identifyLanguage 方法会返回一个字符串,表示识别出的语言代码(如 "es" 表示西班牙语)。你可以根据这个语言代码进行后续处理。

7. 其他功能

fl_mlkit_identify_language 还提供了其他功能,例如识别多种可能的语言或获取语言的置信度分数。你可以根据需要进行调用。

8. 注意事项

  • 该插件依赖于 Google ML Kit,因此需要确保设备上安装了 Google Play 服务。
  • 语言识别功能可能需要网络连接,具体取决于设备的配置和 ML Kit 的实现。

9. 示例代码

以下是一个完整的示例代码:

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

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

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

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

class _LanguageIdentificationScreenState extends State<LanguageIdentificationScreen> {
  String identifiedLanguage = 'Unknown';

  void identifyLanguage(String text) async {
    try {
      String language = await FlMlkitIdentifyLanguage.identifyLanguage(text);
      setState(() {
        identifiedLanguage = language;
      });
    } catch (e) {
      print('Error identifying language: $e');
    }
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Language Identification'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            ElevatedButton(
              onPressed: () {
                identifyLanguage("Hola, ¿cómo estás?");
              },
              child: Text('Identify Language'),
            ),
            SizedBox(height: 20),
            Text('Identified Language: $identifiedLanguage'),
          ],
        ),
      ),
    );
  }
}
回到顶部