タグ

ブックマーク / medium.com (9)

  • Flutter/Dartにおけるimmutableの実践的な扱い方

    以下の記事でも触れている StateNotifier は状態値をimmutableで扱うことが実質必須ですが、そのimmutableプログラミングがあまり理解できていない様子が散見されたり質問を受けることが多いのでそれについて記事にしてみました。 immutableについての良い解説記事なども色々ありますが、Flutter/Dartにおいての実践的な扱い方に対して飛躍がある気がしていて、それを埋められることを意識して順を追って説明してきます。 以下で示したコードは https://github.com/mono0926/riverpod_example/blob/main/test/test.dart に大体含まれています。 mutableなクラスの挙動まず、mutableなクラスの挙動は以下のようになります。 class Mutable { Mutable(this.value); in

    Flutter/Dartにおけるimmutableの実践的な扱い方
  • Flutterアプリにおける、過不足ない設計の考察🎅

    Photo by Hush Naidoo Jade Photography on Unsplash「一般的なモバイルアプリ」の設計全般において、特に何に気を付ける必要があるか、あるいは逆にあまり気にしてなくても良いのではと思うことなどを述べていきます。 (…のつもりでしたが、後者含めると1記事に収めるの困難で、最後にさらっと触れつつ別記事で手厚く書きたいところです🤔) ここでの「一般的なモバイルアプリ」は規模観点では以下程度のイメージですが、それを超えるような規模でも通ずる内容も多いと思っています。 コード量: 数万〜十数万行実装者: 一桁人種類としては(スマホ向けの)クライアントアプリコードであり、以下などではないです。 パッケージ・ライブラリではないサーバーサイドではないこの種類によって適切な組み方はけっこう変わり、アプリコードは依存関係の末端側(基的に依存される側にはならない)な

    Flutterアプリにおける、過不足ない設計の考察🎅
  • Dart の JSON エンコード・デコード処理の Tips 集

    そのため例えば、FirestoreのTimestampなどが入ったMap構造は”JSON”ではないです。なので、そういった値を含むものをJSONと呼ぶのはおかしいという声をたまに聞きます。 それはそうですが、Dartの場合は以下が慣例になっているため、厳密な定義に拘らず「JSON構造の Map<String, dynamic> 」をJSONと呼んで済ませる程度の割り切りをするのが良いと思っています。 エンコード: Map<String, dynamic> toJson() => {...}; 形式のメソッド定義デコード: fromJson(Map<String dynamic> json) 名前付きコンストラクタ定義

    Dart の JSON エンコード・デコード処理の Tips 集
  • Stateful Widget のパフォーマンスを考慮した正しい扱い方

    FlutterのStateful Widgetは唯一のStateを持つWidgetであり、アプリの状態を保ちながら画面更新する際に必須の存在です。一方、Stateful Widget の不適切な使い方はパフォーマンス劣化や思わぬバグを招きます。 記事では具体的な例を用いて、Stateful Widgetをどう扱うのが適切なのかを説明してきます。 以下の記事を書きましたが、これを理解した前提の内容となっています(RenderObject周りはあまり関係しないのでスキップしてもOKです)。

    Stateful Widget のパフォーマンスを考慮した正しい扱い方
  • Flutter の Widget ツリーの裏側で起こっていること – Flutter 🇯🇵 – Medium

    Flutterでアプリを普通に開発していると、触れるのはWidgetと(Stateful Widgetの)Stateがメインとなりますが、その裏側のElement・RenderObjectがどうなっているかを知ると品質・パフォーマンスともに良い正確なコードを書きやすくなると思っています。 また、公式ドキュメントのPerformance considerationsに書いてあることも、そのあたりを分かっていないと、きちんと理解するのが難しく、理解があやふやなまま何となく単なるお作法として形式的に守ることになりがちな気がしています。 というわけで記事ではWidgetの裏側のライフサイクルや実際の描画処理に至るまでの流れを説明していきます。 説明に使うサンプルアプリ新規プロジェクトを作成したらできる雛形とほぼ同じで、少しシンプルに調整してます(右下のボタンが四角い青色なのは普通のFABだとエフ

    Flutter の Widget ツリーの裏側で起こっていること – Flutter 🇯🇵 – Medium
  • Flutter の Platform 判定を正しく理解する

    Flutter Interact ’19 での “Flutter Octopus” よりFlutterは、Android・iOS・Web・WindowsmacOSLinux・Fuchsia の7プラットフォームに対応するマルチプラットフォームフレームワークですが、それらの分岐対応などのためにPlatform判定することがあります(Flutterフレームワーク内でしてくれる対応だけで済むことが多く自前で書く機会は少なめですが)。 その際、いくつか判定方法があり、その扱いに迷ったり適当に勘で済ませてしまうこともありがちだと思うので、この記事で体系的に整理しながら解説します。 また、Platformに関する値がそれぞれの実行環境でどうなるのか、カスタマイズ可能な値を弄るとそれがどう作用するのか、を以下のサンプルで試せるように用意したので適宜活用ください。 デモアプリ: https://flu

    Flutter の Platform 判定を正しく理解する
  • Flutter FAQ 🇯🇵

    さらに自分なりに表現すると、次のように思っています。 Hot Reload/Restartによって、実装と確認のフィードバックサイクルが極めて速い(ビルドで数十秒以上程度待たされることの多いネイティブ開発環境と比べて)ネイティブアプリと見分けの付かないような高クオリティ・高パフォーマンスなアプリの開発も可能リッチなフルカスタムUIも組みやすいさらに、Google I/O 2019でもアピールされていたデスクトップ・Webへのクロスプラットフォームアプリの開発も可能になりつつある(まだプレビュー版で現時点でのプロダクション利用は厳しい)のも、今後への期待ポイントです。 Flutterの学習コストは?個人的には、以下程度に思っています。 簡単なプロトタイプ・ごくシンプルなアプリ: まあまあ簡単ある程度複雑・中規模以上のアプリ: 簡単ではない(iOSネイティブよりも少し習熟しやすいかも?程度)簡

    Flutter FAQ 🇯🇵
  • Flutterの効率良い学び方

    “Spider-Man leaning on concrete brick while reading book” by Raj Eiamworakul on Unsplash 数ヶ月間Flutterに関する大量のインプットを行い、単純なアプリならサクッと、複雑なアプリでも都度調べながらなら慣れているiOSネイティブアプリ開発と比べても遜色ないレベルのものを普通に作れるであろう自信が出てきました。記事では、自身の過去の取り組みを踏まえてFlutterを学ぶにはこういう道筋が良いだろうということを書いていきます。 まずはとにかく公式ドキュメント

    Flutterの効率良い学び方
  • Flutter×GCP/Firebaseでしっかり作る時のポイント13個。

    Flutter×GCP/Firebaseで何かを作っていく(る)方に参考になればと思います。 上記の技術構成でリリースした Othellode というアプリは、 iOS/Android で公開済みなので、興味あればダウンロードしてみて下さい。 “しっかり”とは?下記のような観点を考慮することを指しています。 運用を前提とする設計やフロー整備多言語対応負荷分散セキュリティモニタリング費用バックアップロギングdevelopment/staging/production 管理これらに関する知見から、13個厳選して広く浅く書きました。 (ポイントというより感想みたいな項目もありますが..) なお、情報漏洩対策(IP制限やBasic認証)やアセットパイプライン,BQによる分析等は、今回腰を入れてない( 必要がなかった)ため触れませんし、詳しくありません。 目次Useful Information

    Flutter×GCP/Firebaseでしっかり作る時のポイント13個。
  • 1