- [[Dart]]でマルチプラットフォームGUIアプリが作れる[[SDK]]
- [[iOS]], [[Android]], [[macOS]], [[Windows]], [[Linux]](Gtk), [[Web]]
- プロジェクトを作成: `flutter create --project-name my_app --org dev.flutter --android-language kotlin --ios-language swift my_app`
- 動かす: `flutter run`
- 特定のデバイスで動かす
- device一覧: `flutter devices`
- iOSのSimulatorで動かしたい場合は、予め起動しておく
- `flutter run -d [device id]`
Widget
- 画面の構成単位
- [StatefulWidget](https://api.flutter.dev/flutter/widgets/StatefulWidget-class.html): ステートを持つ
- [StatelessWidget](https://api.flutter.dev/flutter/widgets/StatelessWidget-class.html): ステートを持たない
- ウィジェットカタログ
- [https://docs.flutter.dev/ui/widgets](https://docs.flutter.dev/ui/widgets)
State Management
- Ephemeralなステートと、App Stateがある(前者はウィジェット内で完結)
- App Stateの管理
- [[provider (flutter)]]
Devtool
- Widget Inspectorでウィジェットツリーを見たり、レイアウトの確認ができる
- メモリマップみたり、ネットワークみたり、などもできる
- 実機プロファイラとかも使えるみたい
Test
[[Flutter テスト]]
- Unit TestとWidget Test、Integration Testがある
- Widget Test: 仮想的にウィジェット画面を構築し、色々テストする
- Integration Test: 実際にエミュレータで動かしてテスト
C FFI
- [[ffigen]]でBindingが作れる
- ffigen.yaml: [https://pub.dev/packages/ffigen#configurations](https://pub.dev/packages/ffigen#configurations)
- `flutter pub run ffigen --config ffigen.yaml`
- Tutorial: [https://codelabs.developers.google.com/codelabs/flutter-ffigen?hl=ja#0](https://codelabs.developers.google.com/codelabs/flutter-ffigen?hl=ja#0)
- Dart FFI: [[Dart FFI]]
- 基本的にはPluginを作る、という感じぽいなぁ(kekeho)
- `flutter create --template=plugin_ffi --platforms=android,ios,linux,macos,windows ffigen_app`
- 全プラットフォーム共通: https://dart.dev/interop/c-interop
- iOS
- [https://docs.flutter.dev/platform-integration/ios/c-interop](https://docs.flutter.dev/platform-integration/ios/c-interop)
- Android
- [https://docs.flutter.dev/platform-integration/android/c-interop](https://docs.flutter.dev/platform-integration/android/c-interop)
Rust FFI
- [https://github.com/fzyzcjy/flutter_rust_bridge](https://github.com/fzyzcjy/flutter_rust_bridge)
- 中身的には共有ライブラリ使っているぽい
- マジでよくできている(kekeho)
i18n
[[flutter i18n]]
- [https://docs.flutter.dev/ui/accessibility-and-internationalization/internationalization](https://docs.flutter.dev/ui/accessibility-and-internationalization/internationalization)
- [[arb]]ファイルの記法
- [https://github.com/google/app-resource-bundle/wiki/ApplicationResourceBundleSpecification](https://github.com/google/app-resource-bundle/wiki/ApplicationResourceBundleSpecification)
- arbファイルを書き換える度に、そこからdartファイルを生成する必要がある
- 都度`flutter pub get`をすれば自動で生成される
Plugin
- [https://docs.flutter.dev/packages-and-plugins/developing-packages](https://docs.flutter.dev/packages-and-plugins/developing-packages)
デフォルトディレクトリの取得
- [https://pub.dev/packages/path_provider](https://pub.dev/packages/path_provider)