home_page.dart 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. import 'package:flutter/material.dart';
  2. import 'package:flutter_screenutil/flutter_screenutil.dart';
  3. import 'package:get/get.dart';
  4. import 'package:gobang/components/game_action_bar.dart';
  5. import 'package:gobang/components/game_status_text.dart';
  6. import 'package:gobang/controllers/game_controller.dart';
  7. import 'package:gobang/widgets/gobang_board.dart';
  8. class HomePage extends GetView<GameController> {
  9. const HomePage({super.key});
  10. @override
  11. Widget build(BuildContext context) {
  12. return Obx(() {
  13. final themeColor = controller.themeColor;
  14. // 订阅形状切换,刷新 AppBar icon
  15. final _ = controller.useCircle.value;
  16. final boardSize = (1.sw * 0.8).clamp(0.0, 1.sh * 0.55);
  17. return Scaffold(
  18. appBar: AppBar(
  19. elevation: 0,
  20. backgroundColor: themeColor,
  21. title: const Text('南瓜五子棋'),
  22. actions: [
  23. IconButton(
  24. onPressed: controller.toggleTheme,
  25. icon: controller.currentLight,
  26. ),
  27. IconButton(
  28. onPressed: controller.toggleShape,
  29. icon: controller.currentShape,
  30. ),
  31. ],
  32. ),
  33. body: Container(
  34. width: double.infinity,
  35. decoration: BoxDecoration(
  36. gradient: LinearGradient(
  37. colors: [themeColor, Colors.white],
  38. begin: Alignment.topCenter,
  39. end: Alignment.bottomCenter,
  40. ),
  41. ),
  42. child: SafeArea(
  43. child: SingleChildScrollView(
  44. padding: EdgeInsets.symmetric(vertical: 16.h),
  45. child: Column(
  46. children: [
  47. Padding(
  48. padding: EdgeInsets.only(bottom: 20.h),
  49. child: const GameStatusText(),
  50. ),
  51. GobangBoard(size: boardSize.toDouble()),
  52. SizedBox(height: 16.h),
  53. const GameActionBar(),
  54. ],
  55. ),
  56. ),
  57. ),
  58. ),
  59. );
  60. });
  61. }
  62. }