play_bot.dart 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. import 'package:flutter/material.dart';
  2. import '../models/game_event.dart';
  3. import '../models/game_manager.dart';
  4. /// 引擎提示框
  5. class PlayBot extends StatefulWidget {
  6. const PlayBot({Key? key}) : super(key: key);
  7. @override
  8. State<PlayBot> createState() => PlayStepState();
  9. }
  10. class PlayStepState extends State<PlayBot> {
  11. List<String> botMessages = [];
  12. late ScrollController _controller;
  13. late GameManager gamer = GameManager.instance;
  14. @override
  15. void initState() {
  16. super.initState();
  17. _controller = ScrollController(keepScrollOffset: true);
  18. gamer.on<GameEngineEvent>(updateMessage);
  19. }
  20. @override
  21. void dispose() {
  22. gamer.off<GameEngineEvent>(updateMessage);
  23. super.dispose();
  24. }
  25. void updateMessage(GameEvent event) {
  26. if (event.data == null || event.data.isEmpty) return;
  27. if (event.data == 'clear') {
  28. setState(() {
  29. botMessages = [];
  30. });
  31. } else {
  32. setState(() {
  33. botMessages.add(event.data);
  34. });
  35. }
  36. Future.delayed(const Duration(milliseconds: 16)).then((value) {
  37. ScrollPositionWithSingleContext position =
  38. _controller.position as ScrollPositionWithSingleContext;
  39. _controller.animateTo(
  40. position.maxScrollExtent,
  41. duration: const Duration(milliseconds: 100),
  42. curve: Curves.easeOut,
  43. );
  44. });
  45. }
  46. @override
  47. Widget build(BuildContext context) {
  48. return ListView(
  49. controller: _controller,
  50. padding: const EdgeInsets.all(10),
  51. children: botMessages.map<Widget>((e) => Text(e)).toList(),
  52. );
  53. }
  54. }