Open9

好きな Flutter / Dart パッケージ

づだづだ

Flutter の使いにくい PopupMenuButton および、DropdownButton の代わりに使える代物。
README に、望み通りの見た目にする Tips ものってて嬉しい。

これを使っても、なお面倒なことには変わりないが、Flutter 標準のものより、はるかにカスタマイズ性が高い。
決め手は customHeights

https://pub.dev/packages/dropdown_button2

強み

Flutter のものから大きく変えない方針をとっているので、独自クラスなどは少なく、DropdownItem もそのまま使える。
なので、Flutter の DropdownButton を開発している途中にこれに置き換えても、ほぼ支障がないのが素晴らしい。

こういうのは OverlayEntry を使った方がいいことが多いが、既存コードの書き換え だったり、DropdownButtonFormFieldFormField を活かしたいとき、PopupRoute のアニメーションを活かしたいときなどに、かなり有効。

づだづだ

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

https://pub.dev/packages/table_calendar

づだづだ

yup みたいにバリデーション構築できる。
でも、required の挙動がヘンなので、基本使わないようにするみたいな工夫がいる(ワイ調べ)。

ValidationBuilder().email().maxLength(50).build();

// 必須/任意 は ValidationBuilder のコンストラクタで切り替え
ValidationBuilder(optional: true);
ValidationBuilder(optional: false);

https://pub.dev/packages/form_validator

づだづだ

標準装備してくれ。
async.dartTimer にはない、.pause() ができるタイマー。

https://pub.dev/packages/pausable_timer

初期化したらすぐタイマーが起動する 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: ' ');

https://pub.dev/packages/recase

づだづだ

Sliver の痒いところを補っためちゃくちゃ良パッケージ。

  • 複数の Sliver ウィジェットに対して、背景色(BoxDecoration)をつけたい。
  • 複数の Sliver ウィジェットを、一つの StatelessWidget クラスにまとめたい。

がっつりウィジェットの内部構造に関わるので、プロダクトで使いづらいが、使ってみるとその良さがわかる。
グロースしない小さなアプリに採用したことがあるが、めっちゃ開発体験が良かった。

https://pub.dev/packages/sliver_tools

このパッケージで一番好きな、MultiSliver の標準装備版である SliverMainAxisGroup/SliverCrossAxisGroup が、現在 PR 出てるみたいで、めちゃくちゃ楽しみ。
https://github.com/flutter/flutter/pull/129310

づだづだ

Text ウィジェットで表示する際、一部テキストの挙動を変えられるパッケージ。
Text.rich(TextSpan(children: ...)) を使えば実現できますが、明らかに可読性が高いコードで書くことができる。

https://pub.dev/packages/custom_text

README では、email や URL に機能を持たせる例が実装されているが、以下のように、「一部を太字にする」みたいなコードも、かなりシンプルに書ける。

partial_bold_text.dart
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 パッケージも良い。

https://pub.dev/packages/image