この章では、3Dモデルの読み込み状況をFlutter3DViewerから受け取り、前章で定義したViewerStatusへ反映します。

3Dモデルの読み込みは、画面表示とは別に進む非同期処理です。そのため、開始直後、読み込み完了時、失敗時で画面の状態を切り替える必要があります。

12.1 コールバック関数とは何か

コールバック関数とは、ある処理が発生したときに呼び出される関数です。

3Dビューアーでは、次のようなタイミングで処理を受け取れます。

画面側は、これらのイベントへ対応する関数を渡しておきます。3Dビューアーは、必要なタイミングでその関数を呼び出します。

12.2 読み込み完了を受け取る

モデルの読み込みが完了したときは、onLoadが呼び出されます。

onLoad: () {
  _handleModelLoaded();
},

処理本体は、専用のメソッドへ分離します。

/// 3Dモデルの読み込み完了を画面状態へ反映します。
///
/// 入力: なし
/// 出力: なし
void _handleModelLoaded() {
  if (!mounted) {
    return;
  }

  setState(() {
    _status = ViewerStatus.ready;
    _errorMessage = '';
  });
}

読み込みが成功したため、状態をreadyへ変更します。同時に、以前のエラーメッセージを空に戻します。

12.3 エラーを受け取る

モデルの取得や解析に失敗すると、onErrorが呼び出されます。

onError: (String error) {
  _handleModelError(error);
},

受け取ったエラー内容を、状態変数へ保存します。

/// 3Dモデルの読み込みエラーを画面状態へ反映します。
///
/// 入力: パッケージから受け取ったエラー文字列
/// 出力: なし
void _handleModelError(String error) {
  if (!mounted) {
    return;
  }

  setState(() {
    _status = ViewerStatus.error;
    _errorMessage = error;
  });
}