🌱

BudouXをFlutterで動かしてみた

2023/09/26に公開

BudouX

つい先日 Google Developers Japan ブログで BudouX についての記事が公開されたこともあり、バズっていましたね。

https://github.com/google/budoux

リポジトリを見てみると、(2023/09/26 現時点では)Python、JavaScript、Java に対応しているようです。
実装自体はとてもシンプルだったので、Dart に移植して Flutter で動かすとどんな感じか試してみました。

BudouX-Dart

https://github.com/KoheiKanagu/budoux-dart

導入方法は README を参照いただければと思いますが、分かち書きした結果はList<String>で返ってくるので、TextWrap でくくってあげるといい感じに改行されるようになりました。

final budouX = BudouX(
  await rootBundle.loadString('packages/budoux_dart/models/ja.json'),
);
return Scaffold(
  body: DefaultTextStyle(
    style: const TextStyle(
      fontSize: 48,
      color: Colors.black,
    ),
    child: Column(
      mainAxisAlignment: MainAxisAlignment.center,
      crossAxisAlignment: CrossAxisAlignment.start,
      children: [
        const Text('今日はいい天気ですね。'),
        const Divider(),
        Wrap(
          children: budouX
              .parse(
                '今日はいい天気ですね。',
              )
              .map(Text.new)
              .toList(),
        ),
      ],
    ),
  ),
);

実行例

Dart への移植

Dart への移植は Java 版を参考にさせていただきました。

https://github.com/google/budoux/blob/main/java/src/main/java/com/google/budoux/Parser.java

とは言え、ほぼそのままコピペしただけで、強いて言えばtotalScoreは予め計算するようにしたぐらいの変更点ですね。

https://github.com/KoheiKanagu/budoux-dart/blob/main/lib/src/budoux_dart.dart

GitHubで編集を提案

Discussion