blocks.dart 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. import 'package:flutter/material.dart';
  2. import 'package:flutter_2048/service/block_factory.dart';
  3. import 'package:flutter_2048/model/block_info.dart';
  4. import 'package:flutter_2048/store/game_state.dart';
  5. import 'package:flutter_2048/utils/screen.dart';
  6. import 'package:flutter_redux/flutter_redux.dart';
  7. class Blocks extends StatefulWidget {
  8. @override
  9. _BlocksState createState() => _BlocksState();
  10. }
  11. class _BlocksState extends State<Blocks> with TickerProviderStateMixin {
  12. @override
  13. Widget build(BuildContext context) {
  14. return StoreConnector<GameState, BlocksProps>(
  15. converter: (store) => BlocksProps(
  16. data: store.state.data,
  17. mode: store.state.mode,
  18. padding: Screen.getBorderWidth(store.state.mode),
  19. ),
  20. builder: (context, props) {
  21. var blockFactory = BlockFactory(this, props.mode);
  22. blockFactory.play();
  23. return Container(
  24. width: Screen.stageWidth,
  25. height: Screen.stageWidth,
  26. padding: EdgeInsets.fromLTRB(props.padding, props.padding, 0, 0),
  27. child: Stack(
  28. fit: StackFit.expand,
  29. children: getBlocks(blockFactory, props),
  30. ),
  31. );
  32. },
  33. );
  34. }
  35. getBlocks(BlockFactory blockFactory, BlocksProps props) {
  36. var blocks = <Widget>[];
  37. props.data.forEach((row) {
  38. row.forEach((block) {
  39. if (block.value != 0) {
  40. blocks.add(blockFactory.create(block));
  41. }
  42. });
  43. });
  44. return blocks;
  45. }
  46. }
  47. class BlocksProps {
  48. int mode;
  49. double padding;
  50. List<List<BlockInfo>> data;
  51. BlocksProps({this.padding, this.mode, this.data});
  52. }