🔖
【Flutter/Dart】 「最小値、最大値を1組として扱えるMinMaxクラス」をfreezedで作成 ※総称型(Generics)利用
はじめに
①「width, height を 1 組で扱えるクラス」 => Size クラス
②「dx, dy を 1 組で扱えるクラス」 => Offset クラス
③「min, max を 1 組で扱えるクラス」 => ??? クラス
①、② は Size、Offset など、用意されているクラスを見つけられました。
一方、③ は見つけられませんでした[1]。
そのため、freezed を利用して、③ に該当する MinMax クラスを作成しました。
※総称型(Generics)で型指定するようにしました。
MinMax クラス
min_max.dart
import 'package:freezed_annotation/freezed_annotation.dart';
import 'package:flutter/foundation.dart';
part 'min_max.freezed.dart';
class MinMax<T> with _$MinMax<T> {
const factory MinMax._({
required T min,
required T max,
}) = _MinMax<T>;
factory MinMax.create({
required T min,
required T max,
}) {
return MinMax<T>._(
min: min,
max: max,
);
}
}
使い方
final minMax = MinMax<int>.create(min: 8, max: 20);
final minMax = MinMax<double>.create(min: 0.1, max: 0.3);
など
ユースケース例
- TextFormField の validator で入力文字数制限(min 文字以上、max 文字以下で入力)
- BoxConstraints の minWidth, maxWidth で Widget の横幅制限
など
-
用意されていない理由があるのかもしれません。もし最適なクラスが存在するようでしたら知りたいです。 ↩︎
Discussion