Flutter字符串规范化插件unorm_dart的使用

发布于 1周前 作者 caililin 来自 Flutter

Flutter字符串规范化插件unorm_dart的使用

unorm_dart 是一个用于Dart语言的库,它实现了Unicode 8.0的标准化操作,包括NFC(Canonical Decomposition, followed by Canonical Composition)、NFD(Canonical Decomposition)、NFKC(Compatibility Decomposition, followed by Canonical Composition)和NFKD(Compatibility Decomposition)。这个库是 unorm 的Dart2移植版。

Functions

该模块导出四个函数,分别对应四种Unicode标准化形式:

  • unorm.nfd(str) – 规范分解
  • unorm.nfc(str) – 规范分解后进行规范组合
  • unorm.nfkd(str) – 兼容性分解
  • unorm.nfkc(str) – 兼容性分解后进行规范组合

Usage

下面是一个简单的使用示例,演示了如何在Flutter项目中使用unorm_dart对字符串进行不同类型的规范化处理。请确保你已经在pubspec.yaml文件中添加了unorm_dart依赖项。

import 'package:flutter/material.dart';
import 'package:unorm_dart/unorm_dart.dart' as unorm;

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(title: Text('unorm_dart Example')),
        body: Center(
          child: StringNormalizationExample(),
        ),
      ),
    );
  }
}

class StringNormalizationExample extends StatelessWidget {
  final String text = "The \u212B symbol invented by A. J. \u00C5ngstr\u00F6m " +
      "(1814, L\u00F6gd\u00F6, \u2013 1874) denotes the length " +
      "10\u207B\u00B9\u2070 m.";

  final RegExp combining = RegExp(r"[\u0300-\u036F]");

  @override
  Widget build(BuildContext context) {
    return Padding(
      padding: const EdgeInsets.all(16.0),
      child: Column(
        mainAxisAlignment: MainAxisAlignment.center,
        children: <Widget>[
          Text("Regular:  ${text}"),
          SizedBox(height: 8),
          Text("NFC:      ${unorm.nfc(text)}"),
          SizedBox(height: 8),
          Text("NFKC:     ${unorm.nfkc(text)}"),
          SizedBox(height: 8),
          Text("NFKD: *   ${unorm.nfkd(text).replaceAll(combining, '')}"),
          SizedBox(height: 8),
          Text("* = Combining characters removed from decomposed form."),
        ],
      ),
    );
  }
}

说明

  • 文本展示:通过Text小部件展示了原始字符串以及经过不同规范化处理后的结果。
  • RegExp:用于移除分解形式中的组合字符。
  • 布局:使用了ColumnSizedBox来组织和调整UI元素之间的间距,以确保良好的阅读体验。

这段代码创建了一个简单的Flutter应用,在屏幕上显示了一段文本及其经过不同Unicode标准化形式处理后的版本。你可以根据需要修改输入文本或调整样式,以适应你的应用场景。

Generating Unicode data

有关生成Unicode数据的信息,请参阅yshrsmz/unorm-dart-data-generator

Features and bugs

如果你有任何功能请求或者发现了bug,请前往issue tracker提交报告。


更多关于Flutter字符串规范化插件unorm_dart的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter字符串规范化插件unorm_dart的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是如何在Flutter项目中使用unorm_dart插件来进行字符串规范化的代码示例。unorm_dart是一个Dart库,用于Unicode规范化,支持NFC、NFD、NFKC和NFKD四种规范化形式。

1. 添加依赖

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

dependencies:
  flutter:
    sdk: flutter
  unorm_dart: ^x.y.z  # 请替换为最新版本号

2. 导入库

在你需要使用规范化功能的Dart文件中导入unorm_dart库:

import 'package:unorm_dart/unorm_dart.dart';

3. 使用示例

下面是一个完整的示例,展示了如何使用unorm_dart进行不同形式的Unicode规范化:

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'unorm_dart Example',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  String originalString = 'Hello 𝄞 World! 𝄞';
  String nfcString = '';
  String nfdString = '';
  String nfkcString = '';
  String nfkdString = '';

  @override
  void initState() {
    super.initState();
    nfcString = normalize(originalString, NormalizationForm.NFC);
    nfdString = normalize(originalString, NormalizationForm.NFD);
    nfkcString = normalize(originalString, NormalizationForm.NFKC);
    nfkdString = normalize(originalString, NormalizationForm.NFKD);
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('unorm_dart Example'),
      ),
      body: Padding(
        padding: const EdgeInsets.all(16.0),
        child: Column(
          crossAxisAlignment: CrossAxisAlignment.start,
          children: <Widget>[
            Text('Original String:', style: TextStyle(fontWeight: FontWeight.bold)),
            Text(originalString),
            SizedBox(height: 16),
            Text('NFC:', style: TextStyle(fontWeight: FontWeight.bold)),
            Text(nfcString),
            SizedBox(height: 16),
            Text('NFD:', style: TextStyle(fontWeight: FontWeight.bold)),
            Text(nfdString),
            SizedBox(height: 16),
            Text('NFKC:', style: TextStyle(fontWeight: FontWeight.bold)),
            Text(nfkcString),
            SizedBox(height: 16),
            Text('NFKD:', style: TextStyle(fontWeight: FontWeight.bold)),
            Text(nfkdString),
          ],
        ),
      ),
    );
  }
}

解释

  1. 添加依赖:在pubspec.yaml文件中添加unorm_dart依赖。
  2. 导入库:在需要使用该库的Dart文件中导入unorm_dart
  3. 初始化状态:在initState方法中,使用normalize函数对原始字符串进行四种形式的规范化,并将结果存储在相应的字符串变量中。
  4. 展示结果:在build方法中,使用Text组件展示原始字符串和四种规范化后的字符串。

这个示例展示了如何在Flutter应用中使用unorm_dart库对字符串进行Unicode规范化。你可以根据需要调整示例代码来适应你的具体需求。

回到顶部