質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
Flutter

Flutterは、iOSとAndroidのアプリを同じコードで開発するためのフレームワークです。オープンソースで開発言語はDart。双方のプラットフォームにおける高度な実行パフォーマンスと開発効率を提供することを目的としています。

Dart

Dartは、Googleによって開発されたJavaScriptの代替となることを目的に作られた、ウェブ向けのプログラミング言語である。

Q&A

解決済

1回答

1007閲覧

Dart : freezedパッケージの仕組みについて

moriman

総合スコア615

Flutter

Flutterは、iOSとAndroidのアプリを同じコードで開発するためのフレームワークです。オープンソースで開発言語はDart。双方のプラットフォームにおける高度な実行パフォーマンスと開発効率を提供することを目的としています。

Dart

Dartは、Googleによって開発されたJavaScriptの代替となることを目的に作られた、ウェブ向けのプログラミング言語である。

0グッド

1クリップ

投稿2020/09/19 05:47

https://pub.dev/packages/freezed#the-syntax
change_notifier,riverpodなどで出てくるfreezedパッケージについて見ているのですが、
説明を読んでもよくわかりません。
コードジェネレータというものが初めてなので(説明によるとよくあるものみたいですが)、
具体的に何をしているのかイメージできません。

providerなどで出てくるので状態管理の話だと思うのですが、その前段階の、
データベースからjsonデータ(文字列)を受け取って
map→クライアント側固有のモデルクラス
に変換する作業のように感じます。
そのモデルクラスをstate(状態)にセットして、
どう状態管理するか、という話に繋がっていく。
その変換をシンプルに、簡単に行うパッケージがfreezed、ということですかね?

結局中まで見て何をしているのか把握すべきでしょうか?
それともとにかく公式ページの説明に書いてある通りにすれば、
こういう結果になりますよ、
という使い方を覚えて使えば良い、ということなんでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

map→クライアント側固有のモデルクラス

に変換する作業のように感じます。

その変換をシンプルに、簡単に行うパッケージがfreezed、ということですかね?

その通りです。

例えば、以下のような機能を持つコードを、

dart

1class Person { 2 final String name; 3 final int age; 4 5 Person({ 6 this.name, 7 this.age, 8 }); 9 10 Person copyWith({ 11 String name, 12 int age, 13 }) { 14 return Person( 15 name: name ?? this.name, 16 age: age ?? this.age, 17 ); 18 } 19 20 21 int get hashCode => this.name.hashCode ^ this.age.hashCode; 22 23 24 bool operator ==(dynamic other) { 25 return identical(this, other) || 26 (other is Person && other.name == this.name && other.age == this.age); 27 } 28}

たったこれだけ書くだけで、自動生成してくれます。

dart

1 2abstract class Person with _$Person { 3 const factory Person({String name, int age}) = _Person; 4}

結局中まで見て何をしているのか把握すべきでしょうか?

そこまでする必要はないと思います。

投稿2020/09/19 08:48

編集2020/09/20 01:23
nskhei

総合スコア704

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

moriman

2020/09/19 09:47

回答を頂きましてありがとうございます。 理解力が低くて申し訳ないのですが、確認させてもらって良いでしょうか。 お示しいただいた一つ目のコードを「(1)のコード」、 二つ目のコードを「(2)のコード」と呼びます。 freezedを使わなければ(1)のコードを自分で書かないといけないところを、 freezedを使えば、自分で(2)のコードを書くだけで、あとはコードを自動生成すると、(1)のコードを書いたのと同じ状態になるので、その後は(1)のコードがある前提で(1)のコードを利用したコードを書くことができる、 という理解で良いでしょうか?
nskhei

2020/09/19 09:50

そういうことです。
nskhei

2020/09/20 01:24

誤解を招くような文章だったのを修正しました。 あと一応補足ですが、map -> モデルクラスへの変換コード自体を生成するのは、 JsonSerializableというパッケージです。 freezedが担うのは、モデルクラスのcopyWithメソッドや==オペレータの生成です。
moriman

2020/09/25 03:49

もう少し調べてみます。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問