table.dart 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160
  1. import 'package:flutter/material.dart';
  2. import 'package:fooddeliveryapp/model/tableDetail.dart';
  3. import 'package:fooddeliveryapp/pages/order/order_home_screen.dart';
  4. import 'package:provider/provider.dart';
  5. import '../model/table.dart';
  6. class TablePage extends StatefulWidget {
  7. static const String routeName = '/table';
  8. @override
  9. State<StatefulWidget> createState() {
  10. return _TableState();
  11. }
  12. }
  13. class _TableState extends State<TablePage> {
  14. @override
  15. Widget build(BuildContext context) {
  16. return Consumer<TableStatusList>(
  17. builder: (context, tableStatusList, child) {
  18. return Scaffold(
  19. body: NestedScrollView(
  20. headerSliverBuilder: (context, bool innerBoxIsScrolled) {
  21. return <Widget>[
  22. SliverAppBar(
  23. primary: true,
  24. expandedHeight: 200,
  25. pinned: true,
  26. floating: true,
  27. snap: false,
  28. flexibleSpace: _getFlexBar(tableStatusList),
  29. )
  30. ];
  31. },
  32. body: _getTableItems(tableStatusList, context),
  33. ));
  34. });
  35. }
  36. _getFlexBar(TableStatusList tableStatusList) {
  37. return FlexibleSpaceBar(
  38. title: Column(
  39. mainAxisSize: MainAxisSize.min,
  40. children: [
  41. Text('目前开台数:' + tableStatusList.size().toString(),
  42. style: TextStyle(fontSize: 12)),
  43. Text(
  44. '剩余空位:' + (30 - tableStatusList.size()).toString(),
  45. style: TextStyle(fontSize: 10),
  46. ),
  47. ],
  48. ),
  49. background: Image.network(
  50. 'https://picsum.photos/200/300/?blur',
  51. fit: BoxFit.fill,
  52. ),
  53. );
  54. }
  55. _getTableItems(TableStatusList tableStatusList, BuildContext context) {
  56. return GridView.extent(
  57. maxCrossAxisExtent: 150,
  58. padding: EdgeInsets.all(4),
  59. mainAxisSpacing: 4,
  60. crossAxisSpacing: 4,
  61. children: _buildGridTileList(30, tableStatusList, context));
  62. }
  63. /*
  64. * 单写了一个私有方法,创建指定数量的组件
  65. * */
  66. List<Widget> _buildGridTileList(
  67. int count, TableStatusList tableStatusList, BuildContext context) {
  68. List<Widget> containers = [];
  69. final statusList = Provider.of<TableStatusList>(context);
  70. final myTableDetail = Provider.of<TableDetail>(context);
  71. for (var i = 0; i < count; i++) {
  72. // var image = Image.network('https://picsum.photos/id/$i/150');
  73. // containers.add(image);
  74. containers.add(GestureDetector(
  75. child: _tableCell(tableStatusList, i),
  76. onTap: () {
  77. if (tableStatusList.isopen(i)) {
  78. print("点击该台已开台,台号为=> " + "$i");
  79. Navigator.push(context,
  80. MaterialPageRoute(builder: (context) => HomeSrcreen(index: i)));
  81. } else {
  82. print("点击该台号为=> " + "$i");
  83. statusList.addtable(TableStatus(i));
  84. myTableDetail.setTableId(i);
  85. Navigator.push(context,
  86. MaterialPageRoute(builder: (context) => HomeSrcreen(index: i)));
  87. }
  88. },
  89. ));
  90. }
  91. return containers;
  92. }
  93. _tableCell(TableStatusList tableStatusList, int index) {
  94. if (tableStatusList.isopen(index)) {
  95. return Container(
  96. padding: EdgeInsets.all(2),
  97. decoration: BoxDecoration(
  98. borderRadius: BorderRadius.all(Radius.circular(10)),
  99. color: Colors.green,
  100. ),
  101. child: Column(
  102. children: [
  103. Row(
  104. children: [
  105. Icon(
  106. Icons.warning,
  107. color: Colors.white,
  108. size: 30.0,
  109. ),
  110. Text(
  111. index.toString(),
  112. style: TextStyle(fontSize: 15),
  113. )
  114. ],
  115. ),
  116. Icon(Icons.table_chart),
  117. Text("已开台"),
  118. ],
  119. ));
  120. } else {
  121. return Container(
  122. padding: EdgeInsets.all(2),
  123. decoration: BoxDecoration(
  124. borderRadius: BorderRadius.all(Radius.circular(10)),
  125. color: Colors.blue,
  126. ),
  127. child: Column(
  128. children: [
  129. Row(
  130. children: [
  131. Icon(
  132. Icons.audiotrack,
  133. color: Colors.white,
  134. size: 30.0,
  135. ),
  136. Text(
  137. index.toString(),
  138. style: TextStyle(fontSize: 15),
  139. )
  140. ],
  141. ),
  142. Icon(
  143. Icons.table_chart,
  144. color: Colors.white,
  145. ),
  146. Text("空桌"),
  147. ],
  148. ));
  149. }
  150. }
  151. }