TUTlityの構造
りn
TUTilityの構造
- model
- provider
- router
- page
- widget
model
- データの形式(構造体,クラス)がまとめられている
- Subject
- Timetable
- …
- JSON(構造化したデータをテキストでやりとりするための形式)に変換するための関数を自動生成している(freezedパッケージ)
provider
- アプリ全体で共有したいデータ(状態)がまとめられている
- 例えば,Timetableクラスはアプリのあらゆる場所から読み書きしたい
- riverpodというライブラリを使用している
router
- アプリ内のページ(画面)をどのようにルーティングするか書いてある
- 時間割,食堂,リンク,その他
- 時間割取得ページは独立させている
page
- routerによって切り替えられる,各画面のレイアウト
- 後述するWidgetを配置している
widget
- FlutterにおけるWidgetをまとめている
- Dialog
- Timetableの各種Tile
- …
アプリ起動の流れ
- Flutterのエンジンを初期化
- 端末画面の向きを縦に固定(iPadには適用されない)
- 各種Providerの準備
- Shared Preferences(アプリ固有の設定を保持する機構)の準備
- AppRouterがNavigationPageとTimetablePageにルーティング
- TimetablePageにTimetableNotifierProviderから時間割データが供給されて描画される
Dart
- JavaScript, Java, C#みたいな見た目の言語
- Google製
- 主にFlutterで使われるが,汎用プログラミング言語なので一般的なプログラム(コマンドラインで動作するアプリ等)も作成可能
- Dart VM上で動かすこともできるし,機械語にコンパイルすることも可能
Flutter
- 主にスマートフォン向けアプリを作るためのフレームワーク
- 一つのコードで複数のOS向けにビルドできる
- Google製
- Dartで記述する(OS固有の機能を呼び出したい時はSwiftやKotlin, Javaを触る必要がある)
Flutterでクロスプラットフォームを実現する仕組み
- Framework: アプリ開発者が触る層,Dart
- Engine: Dartのランタイム実行,EmbedderとFrameworkを繋げる,C/C++
- Embedder: 描画する画面の準備,各種スレッドのセットアップなど,OS依存