🔖

【Flutter/Dart】 「最小値、最大値を1組として扱えるMinMaxクラス」をfreezedで作成 ※総称型(Generics)利用

2023/01/11に公開

はじめに

①「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 の横幅制限

など

脚注
  1. 用意されていない理由があるのかもしれません。もし最適なクラスが存在するようでしたら知りたいです。 ↩︎

Discussion