好きな Flutter / Dart パッケージ

Flutter の使いにくい PopupMenuButton および、DropdownButton の代わりに使える代物。
README に、望み通りの見た目にする Tips ものってて嬉しい。
これを使っても、なお面倒なことには変わりないが、Flutter 標準のものより、はるかにカスタマイズ性が高い。
決め手は customHeights
強み
Flutter のものから大きく変えない方針をとっているので、独自クラスなどは少なく、DropdownItem
もそのまま使える。
なので、Flutter の DropdownButton を開発している途中にこれに置き換えても、ほぼ支障がないのが素晴らしい。
こういうのは OverlayEntry
を使った方がいいことが多いが、既存コードの書き換え だったり、DropdownButtonFormField
の FormField
を活かしたいとき、PopupRoute
のアニメーションを活かしたいときなどに、かなり有効。

Calendar 表示のためのウィジェット。
望んだ見た目に大体できる。
少し癖を理解する必要がある(そもそもカレンダーっていうややこしい UI なので、ある程度の癖は許容できる)が、プロパティの命名や機能が直感的だったりで使いやすい。

yup みたいにバリデーション構築できる。
でも、required
の挙動がヘンなので、基本使わないようにするみたいな工夫がいる(ワイ調べ)。
ValidationBuilder().email().maxLength(50).build();
// 必須/任意 は ValidationBuilder のコンストラクタで切り替え
ValidationBuilder(optional: true);
ValidationBuilder(optional: false);

標準装備してくれ。
async.dart
の Timer
にはない、.pause()
ができるタイマー。
初期化したらすぐタイマーが起動する async.Timer
と違い、 .start()
しないとタイマーが起動しないの忘れがち。

これも標準装備してほしい
めちゃくちゃサポート多いから、困ることはない
/// camelCase
String get camelCase => _getCamelCase();
/// CONSTANT_CASE
String get constantCase => _getConstantCase();
/// Sentence case
String get sentenceCase => _getSentenceCase();
/// snake_case
String get snakeCase => _getSnakeCase();
/// dot.case
String get dotCase => _getSnakeCase(separator: '.');
/// param-case
String get paramCase => _getSnakeCase(separator: '-');
/// path/case
String get pathCase => _getSnakeCase(separator: '/');
/// PascalCase
String get pascalCase => _getPascalCase();
/// Header-Case
String get headerCase => _getPascalCase(separator: '-');
/// Title Case
String get titleCase => _getPascalCase(separator: ' ');

Sliver の痒いところを補っためちゃくちゃ良パッケージ。
- 複数の Sliver ウィジェットに対して、背景色(BoxDecoration)をつけたい。
- 複数の Sliver ウィジェットを、一つの
StatelessWidget
クラスにまとめたい。
がっつりウィジェットの内部構造に関わるので、プロダクトで使いづらいが、使ってみるとその良さがわかる。
グロースしない小さなアプリに採用したことがあるが、めっちゃ開発体験が良かった。
このパッケージで一番好きな、MultiSliver
の標準装備版である SliverMainAxisGroup/SliverCrossAxisGroup
が、現在 PR 出てるみたいで、めちゃくちゃ楽しみ。

Text
ウィジェットで表示する際、一部テキストの挙動を変えられるパッケージ。
Text.rich(TextSpan(children: ...))
を使えば実現できますが、明らかに可読性が高いコードで書くことができる。
README では、email や URL に機能を持たせる例が実装されているが、以下のように、「一部を太字にする」みたいなコードも、かなりシンプルに書ける。
import 'package:custom_text/custom_text.dart';
import 'package:flutter/material.dart';
import '../../utils/extensions/text_style_ex.dart';
class PartialBoldText extends StatelessWidget {
const PartialBoldText(
this.text, {
super.key,
this.style,
required this.boldTextList,
});
final String text;
final TextStyle? style;
final List<String> boldTextList;
Widget build(BuildContext context) {
return CustomText(
text,
definitions: [
...boldTextList.map(
(text) => TextDefinition(
matcher: PatternMatcher(text),
),
)
],
style: style,
matchStyle: const TextStyle(
fontWeight: FontWeight.bold,
),
);
}
}

Dart ピュアで書かれた、画像加工パッケージ。
dart:io
でも dart:html
でも動く、安全で使いやすい素晴らしいパッケージ。
同じ publisher の、zip を加工できる archive パッケージも良い。

ShhetOffset が秀逸