instance_view.dart 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. import 'package:trackoffical_app/service/game/game_instance.dart';
  2. import 'package:flutter/material.dart';
  3. export 'package:flutter/material.dart';
  4. import 'package:get/get.dart';
  5. import 'in_game_loading2.dart';
  6. class InstanceView extends StatefulWidget{
  7. const InstanceView({
  8. super.key,
  9. this.closingView,
  10. required this.instance,
  11. required this.child});
  12. final GameInstance instance;
  13. final Widget child;
  14. final Widget? closingView;
  15. @override
  16. State<StatefulWidget> createState() {
  17. return _InstanceState();
  18. }
  19. }
  20. class _InstanceState extends State<InstanceView>{
  21. final state = GameInstanceState.uninitialized.obs;
  22. @override
  23. void initState() {
  24. state.value=widget.instance.state;
  25. state.bindStream(widget.instance.stateStream);
  26. super.initState();
  27. }
  28. @override
  29. void dispose() {
  30. state.close();
  31. super.dispose();
  32. }
  33. @override
  34. Widget build(BuildContext context) {
  35. final instance = widget.instance;
  36. return Obx((){
  37. switch(state.value){
  38. case GameInstanceState.uninitialized:
  39. return InGameLoadingView(instance: instance);
  40. case GameInstanceState.initialized:
  41. return widget.child;
  42. case GameInstanceState.closing:
  43. case GameInstanceState.closed:
  44. return widget.closingView??widget.child;
  45. }
  46. });
  47. }
  48. }