【Flutter】built_collectionについて

Flutter

built_collectionとは

built_collectionは、Dart言語用の不変コレクションを提供するパッケージです。
ビルダーパターンを使用して、コレクションの不変性を確保します。不変コレクションは、安全に共有できるため、防御的なコピーを行う必要がありません。built_collectionは、特に不変値と組み合わせて使用すると効果的です。

built_collection | Dart package
Immutable collections based on the SDK collections. Each SDK collection class is split into a new immutable collection c...

使い方

パッケージのインストール

まず、pubspec.yamlファイルにbuilt_collectionパッケージを追加します。

dependencies:
  built_collection: ^5.1.1

その後、以下のコマンドを実行してパッケージをインストールします。

flutter pub get

基本的な使用方法

以下は、built_collectionパッケージの基本的な使い方の例です。この例では、不変リストとそのビルダーを使用します。

import 'package:built_collection/built_collection.dart';

void main() {
  // 不変リストを作成
  final BuiltList<int> builtList = BuiltList<int>([1, 2, 3]);
  print('BuiltList: $builtList');

  // ビルダーを使って不変リストを変更
  final listBuilder = builtList.toBuilder();
  listBuilder.add(4);
  final BuiltList<int> newList = listBuilder.build();
  print('New BuiltList: $newList');

  // 不変マップの作成
  final BuiltMap<String, int> builtMap = BuiltMap<String, int>({'one': 1, 'two': 2});
  print('BuiltMap: $builtMap');

  // ビルダーを使って不変マップを変更
  final mapBuilder = builtMap.toBuilder();
  mapBuilder['three'] = 3;
  final BuiltMap<String, int> newMap = mapBuilder.build();
  print('New BuiltMap: $newMap');
}

パラメータの詳細

BuiltList

  • BuiltListは不変リストです。リストを変更する場合は、toBuilderメソッドを使ってビルダーを取得し、変更を加えた後に再度buildメソッドを使って不変リストに戻します。
  • BuiltListIterableを実装していますが、Listを実装していません。

BuiltMap

  • BuiltMapは不変マップです。マップを変更する場合は、toBuilderメソッドを使ってビルダーを取得し、変更を加えた後に再度buildメソッドを使って不変マップに戻します。
  • BuiltMapMapを実装していません。

コレクションの不変性

  • built_collectionは、要素が不変である場合に不変性を保証します。
  • 不変コレクションは変更を加えるメソッドを提供しません。変更を行う場合は、必ずビルダーを使用します。

比較とハッシュ

  • built_collectionは、同じ型の他の不変コレクションと深い比較を行います。これにより、高速な比較が可能です。
  • built_collectionは深いハッシュコードを計算し、キャッシュします。これにより、ハッシュセットやハッシュマップ内での使用が効率的になります。

無駄なコピーの回避

  • BuiltList.toListBuiltMap.toMapなどのメソッドは、コピーを作成せずにコアSDKコレクションとの互換性を提供します。
  • 変更不可コレクションを提供する場合、BuiltList.asListBuiltMap.asMapを使用して、変更が試みられた際に例外をスローするコレクションを作成できます。

Buy me a coffee!

Flutterアプリ開発
シェアする
sogaをフォローする
タイトルとURLをコピーしました