この章では、3Dモデルの読み込み状況を表す状態を定義します。
3Dモデルは、画面を開いた瞬間に表示されるとは限りません。インターネット上からファイルを取得し、解析して描画するまでに時間がかかります。また、通信環境やURLの問題によって読み込みに失敗する場合もあります。
そこで、現在の状況を一つの状態として管理し、後の章で状態に応じた表示へ切り替えられるようにします。
今回のビューアーでは、次の3つの状態を扱います。
| 状態 | 意味 |
|---|---|
loading |
3Dモデルを読み込んでいる |
ready |
読み込みが完了し、操作できる |
error |
読み込みに失敗した |
アプリを起動した直後は、まだモデルが表示されていないためloadingです。正常に読み込まれればreadyへ変化し、失敗した場合はerrorへ変化します。
loading ──成功──▶ ready
│
└──失敗──▶ error
エラー後に再読み込みする場合は、errorから再びloadingへ戻します。
enumで状態を定義する複数の決まった選択肢を表す場合は、Dartのenumを使用します。
model_viewer_screen.dartのimport文より下へ、次の定義を追加します。
enum ViewerStatus {
loading,
ready,
error,
}
ViewerStatusは、3Dビューアーの状態を表す独自の型です。この型の値には、定義した3種類以外を代入できません。
1行で記述することもできます。
enum ViewerStatus { loading, ready, error }
教材では意味を確認しやすいように複数行で記述しても、完成コードに合わせて1行で記述しても構いません。
_ModelViewerScreenStateの中へ、現在の状態を保持するフィールドを追加します。
class _ModelViewerScreenState extends State<ModelViewerScreen> {
final Flutter3DController _controller = Flutter3DController();
ViewerStatus _status = ViewerStatus.loading;
}