Ryoichi Izumita

Ryoichi Izumita

SwiftUIでのMVVM例 - 本当にMVVMはComposableではないのか

Qiitaに【SwiftUI】なぜ、MVVMをやめて、The Composable Architecture(TCA)を採用するのか?という記事が上がっていました。 趣旨は以下のようです。 MVVMはComposableではないTCAはComposableであるMVVMよりTCAがおすすめ本当にMVVMはComposableではないのでしょうか?この記事のMVVMのコードにはいろいろ問題があるので、修正してSwiftUIでのMVVMのコード例を作成してみましょう。 当該記事のコードの問題点当該記事のMVVMのコードはCounterViewに対するViewModelをRandomCounterViewのViewModelに流用していることです。 RandomCounterViewにはRandomCounterViewModelを作成するのが一般的な実装です。 もう一つの実装方法はモデルレベルで抽象化してしまう方法です。この記事ではこの方法を採用します。 TCA版ではCounterViewをCounter/RandomCounterに利用しているのでMVVMでもそのように実装してみましょう。 修正版MVVM修正してみましょう。 まずモデルです。 protocol Countable { var count: Int { get } func increment() func decrement() } class

FlutterのテストでGiven When Thenスタイルを使えるようにするライブラリを公開

FlutterのテストでGiven When Thenスタイルのテストを書くためのライブラリはいくつか存在しますが、シンプルに書けるライブラリが無いので作成しました。 simple_gwt | Flutter Package void main() { String? a; String? b; aIsNull() => a = null; bIsNull() => b = null; test('Test1', gwt(() { given('', aIsNull); and('', bIsNull); when('set

Dartのパッケージをpub.devに登録する方法を調査した

pubspecフォーマットとパッケージレイアウトの規約に従うLICENSEファイルが必要。DartとFlutterが使用しているBSD 3-clauseライセンスが推奨だがパッケージに適した別のライセンスでも良い。パッケージをgzip圧縮して100MBより小さくなければならない。大きい場合は複数パッケージに分割するか、.pubignoreファイルにより不要なコンテンツを削除する。パッケージはホストされた依存関係とSDKの依存関係にのみ依存する必要がある。パッケージのアップロードにはGoogleアカウントが必要。Pubがパッケージを作成するために必要なファイルを作成するREADME.md - Markdownとしてレンダリングされる。Writing package pages | Dartを参考にして記述する。CHANGELOG.md - CHANGELOG.mdが存在するとpub.devのパッケージページのタブに表示される。pubspec.yaml - パッケージページの右側の説明やホームページなどの詳細情報。認証済みパブリッシャーパッケージの公開に認証済みパブリッシャーか独立したGoogleアカウントを使用できる。認証済みパブリッシャーには以下の利点がある。 パブリッシャードメインが認証されていることがわかる。pub.devに個人のメールアドレスを表示させないようにでき、代わりにパブリッシャーのドメインと連絡先アドレスを表示できる。検索ページと個別パッケージページに検証済みバッジが表示される。

私が使っている栞

私は電子書籍は目がつかれるのと集中できないので、流して読んで情報だけを手に入れる書籍だけを電子書籍で購入している。それ以外の多くの書籍は紙媒体で読んでいる。 紙の書籍なので栞が必要になる。普通のページに挟むタイプの栞だと落ちやすいのでBOOK DARTSというクリップのような栞を使っている。 BOOK DARTSだとどの行まで読んだかすぐに分かり、複数個を使うと付箋の代わりにもなるのでおすすめ。

FlutterのTestでCallbackをモックする

FlutterのTestでCallbackをmockitoでモックする FlutterのテストでChangeNotifierのサブクラスのaddListenerに渡したCallbackが呼ばれたかテストしたい場合に、ダミーのコールバックでフラグを立ててフラグをexpectで検査することがある。 これをmockitoを使ってverifyで検証する方法がある。 返値がVoidのモックまず以下のmixin(もしくはclassでも可)を作成する。 mixin Callback<T> { T call(); } callメソッドを持ったクラスは関数のようにcallメソッドを呼ぶことができるようになる。例えば以下のように。 class A { void call() { print('a'); } } final a = A(); a(); // a.call()が実行されaが出力される 次にmockitoのGenerateMocksアノテーションで、CallbackからCallbackのモックを作成する。以下を記述してbuild_runner