書籍やインターネットだけでは中々得られない経験知的なところが勉強になったのでメモしておきます。
一人でやっているだけでは得ることのできない知識や感覚に触れられたので、大変為になりました
世の中のFlutterエンジニアはすごいな、自分まだまだだな、と思いました。
元の講演動画はこちらから:https://flutterkaigi.jp/2023/sessions
1.ゆめみのFlutterエンジニア育成方法
・正方形を書くときは、SizedBoxよりAspectRationの方が可読性が高い。
・レスポンシブ対応はMediaQueryではなく、FractionallySizedBoxを使用しているか。
・sleepはUI処理をブロックする。Future.delayedはブロックしない。
2.Flutterアプリのセキュリティ対策を考えてみる。
・shared_preferenesを使用して保存したデータはroot化やjailbreakされていると見れる
→flutter_secure_storageを使うと暗号化される。
・WebView Cookieは適切なタイミングで削除する。
・アプリがバックグラウンドに移動すると画面のスクショを撮られるので、機密情報が見えないようにWidgetを切り替える(secure_applicationと言うライブラリもある)
3.なぜわれわれはRiverpodを使うのか
・UI = f(State), UIは常に状態(State)のbuildメソッド(f)の実行結果。
・親子関係はElementが保持している。
・どのような状態管理手法でも、ElementのmarkNeedsBuildが呼び出されることでWidgetがリビルドされる。
・RiverpodはInheritedWidgetの再実装を目指しているパッケージ。StatefulWidgetの代替ではない。
・Provider:stateにアクセスするためのキー。存在することが意義でProvider自体は何もしない。
・初めてアプリ内でref.read/.watch/.listenしたときにProvider,Notifier,Stateが生成される。
・命令的に状態を更新するときは、Notifierに用意したメソッドでしか状態を変更できない。と言う思想。StateNotifierは非推奨になった。
・RiverpodのState管理はWidget(Element)ツリーとは独立している。
4.魅せろ!Flutterで目を惹くUIデザインを実装する。
・RenderObjectツリー:画面上に何をどのように描画するかを決定する。
・RenderView:RenderObjectツリーのルート
・Constrains(height,widthのmax, min)が親から子に伝播していく。->末端で決定したSize(height, width)が親に返される。Position(親の座標系からの子の位置)は親が保持する。
・RenderObjectのカスタマイズは難易度が高いのでまずはCustomPaintなどを検討する。
・Riveと言うアプリで2Dアニメーションを作れる。
5.Master of Flutter Lifecycle
・ライフサイクルには、Widget自体のライフサイクルとアプリ全体のライフサイクルの2種類がある。
・Widgetにconstをつけると親のstateが変わってもdidUpdateWidgetが呼ばれず子のリビルドを避けれる。