Flutter拼音输入法插件bpmf_py的使用
Flutter拼音输入法插件bpmf_py的使用
特點
- 對「注音符號」和「漢語拼音」進行綴字分析,識別音節(含聲調),生成音節對象(BpSyllable)
- 支持非標準 ASCII 拼音(以 v 代 ü,以數字標調)
- 實現注音、拼音、ASCII 拼音兩兩相互轉換
- 輕量、高效
- 無外部依賴
- 充分測試
- 簡潔易用。只包括一個class,並配備直觀應手的 props 和 methods
- 只支持小寫拼音
用法
首先需要在 pubspec.yaml
文件中添加 bpmf_py
依赖:
dependencies:
bpmf_py: ^x.x.x
然后通过以下代码来使用该插件:
import 'package:bpmf_py/bpmf_py.dart';
import 'package:bpmf_py/bpmf_codes.dart';
void main() {
// 可以直接使用构造函数创建一个普通话音节。
const shuai4 = BpmfSyllable($sh, $u, $ai, 4);
print(shuai4); // 输出:ㄕㄨㄞˋ
// `$sh, $u, $ai` 是整数字符码,因为 Dart 中没有字符类型,
// 我们必须使用整数,`bpmf_codes` 定义了注音符号和拼音中使用的完整字符集:
// 小写字母表示注音符号 - 例如 $eng 表示 'ㄥ'
// 大写字母表示普通的拉丁字母 - 例如 $Z 表示 'z'
// $1 - $5 是注音符号声调标记
var txt = '\t ㄎㄨㄟˋ ㄖㄣˊ';
// 解析注音符号
var (syl, pos) = BpmfSyllable.parseBopomofo('\t ㄎㄨㄟˋ ㄖㄣˊ');
// 它会跳过空格,并返回第一个识别出的音节和音节后立即出现的字母的新位置。
print(syl); // 输出:'ㄎㄨㄟˋ'
// 继续解析下一个音节
(syl, pos) = BpmfSyllable.parseBopomofo(txt, pos: pos);
print(syl); // 输出:'ㄖㄣˊ'
// 如果你不在意连续解析,可以简单地使用工厂方法,忽略位置。
syl = BpmfSyllable.fromBopomofo(txt);
print("'$syl' again!"); // 输出:'ㄎㄨㄟˋ' again!
// 解析拼音和 ASCII 拼音类似:
txt = 'ráo';
syl = BpmfSyllable.fromPinyin(txt);
print(syl.pinyin); // 输出:'ráo'
txt = 'lve4';
syl = BpmfSyllable.fromAsciiPinyin(txt);
print(syl.pinyin); // 输出:'lüè'
// 尝试自己使用 BpmfSyllable.parsePinyin 和 BpmfSyllable.parseAsciiPinyin!
// 音节对象是可比较的
syl = BpmfSyllable($r, $u, $ang, 3); // 一个虚构的声音
final syl2 = BpmfSyllable.fromAsciiPinyin('ruang3');
assert(syl == syl2);
final syllables = ['zhuan4', 'an3', 'an1', 'bo2', 'qi3']
.map(BpmfSyllable.fromAsciiPinyin)
.toList();
syllables.sort((a, b) => a.compareTo(b));
print(
syllables.map((x) => x.asciiPinyin)); // 输出:(bo2, qi3, zhuan4, an1, an3)
// 排序顺序符合注音符号的顺序:b p ... i u ü
// 为了方便起见,还提供了以下辅助函数:
print(pinyinToAsciiPinyin('ráo')); // 输出:rao2
print(asciiPinyinToPinyin('rao2')); // 输出:ráo
print(bopomofoToPinyin('ㄑㄩㄥ')); // 输出:'qiōng'
print(pinyinToBopomofo('qiōng')); // 输出:'ㄑㄩㄥ'
print(asciiPinyinToBopomofo('qiong1')); // 输出:'ㄑㄩㄥ'
print(bopomofoToAsciiPinyin('ㄑㄩㄥ')); // 输出:'qiong1'
}
更多关于Flutter拼音输入法插件bpmf_py的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
1 回复