0

ステートフル ウィジェットにゲーム画面があり、プレイヤーがステップを戻す (前の動きを元に戻す) ことができる関数が含まれています。onUnityAdsFinish() が別のウィジェットから実行されたときに、この関数をトリガーしたいと思います。

ゲームがプレイされる game.dart のステートフル ウィジェットは次のとおりです。

class GameScreen extends StatefulWidget {
  @override
  GameScreenState createState() => GameScreenState();
}

class GameScreenState extends State<GameScreen> with SingleTickerProviderStateMixin {

  @override
  Widget build(BuildContext context) {
    return Column(
      children: <Widget>[
        Container( 
            // game content here
        ),
        MaterialButton(
          child: Text("Tap Here to Watch Ad to Undo Move"),
          onPressed: () => unityBloc.showUnityAd(),
          // (side note: unityBloc is accessable because I have it declared as "final unityBloc = UnityBloc();" higher up the widget tree on app.dart.)
        ),
      ],
    ),                  
  }

  // This is the function I want to call after the ad is finished.
  void undoMove() {
    setState(() {
      // code to undo move
    });
  }
}

ボタンを押して広告を見ると、unity_bloc.dart の UnityBloc クラスで showUnityAd() 関数が呼び出されます。

import 'package:unity_ads_flutter/unity_ads_flutter.dart';

class UnityBloc with UnityAdsListener {
...
  showUnityAd() {
    UnityAdsFlutter.show('rewardedVideo').whenComplete(() => null);
  } // called when undo button is pressed on game.dart

  @override
  void onUnityAdsFinish(String placementId, FinishState result) {
    print("Finished $placementId with $result");
    // here is where I want to call the undoMove() function from game.dart
  }
}

広告は完全に表示され、広告が終了すると onUnityAdsFinish の print ステートメントがコンソールに出力されますが、その時点で undoMove を呼び出す方法がわかりません。

私は一日中チュートリアルを見たり、コールバックやグローバルキーなどに関するスタックオーバーフローを読んだりしましたが、まだ理解できていません.

誰か助けてくれませんか?unity_bloc.dart で onUnityAdsFinish() が起動したときに、game.dart で undoMove() 関数をトリガーするにはどうすればよいですか? (または、これを行うための別の/より良い方法はありますか?)

ありがとうございました!

4

2 に答える 2