Flutter语言识别插件fl_mlkit_identify_language的使用
Flutter语言识别插件fl_mlkit_identify_language的使用
识别Android和iOS上的文本语言
使用fl_mlkit_identify_language
插件可以识别给定文本的语言。如果调用成功,则会返回BCP-47语言代码tag
和confidence
值。如果没有检测到语言,则返回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
更多关于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'),
],
),
),
);
}
}