cart.dart 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146
  1. import 'package:flutter/cupertino.dart';
  2. import 'package:flutter/material.dart';
  3. import 'package:flutter_svg/svg.dart';
  4. import 'package:fooddeliveryapp/constants.dart';
  5. import 'package:fooddeliveryapp/models/tableDetail.dart';
  6. import 'package:fooddeliveryapp/screen/check_out.dart';
  7. import 'package:fooddeliveryapp/screen/details/components/add_to_cart.dart';
  8. import 'package:fooddeliveryapp/screen/table.dart';
  9. import 'package:provider/provider.dart';
  10. class OrderCart extends StatelessWidget {
  11. static const routeName = "/cart";
  12. @override
  13. Widget build(BuildContext context) {
  14. int index = ModalRoute.of(context).settings.arguments;
  15. return Scaffold(
  16. // appBar: AppBar(
  17. // title: Text('购物车'),
  18. // ),
  19. appBar: buildAppBar(context),
  20. body: ItemList(
  21. index: index,
  22. ),
  23. );
  24. }
  25. }
  26. class ItemList extends StatelessWidget {
  27. final int index;
  28. const ItemList({Key key, this.index}) : super(key: key);
  29. @override
  30. Widget build(BuildContext context) {
  31. return Column(
  32. children: <Widget>[
  33. Expanded(child: CartList()),
  34. // TotalPrice(),
  35. Padding(
  36. padding: const EdgeInsets.symmetric(horizontal: kDefaultPaddin / 2),
  37. child: AddToCart(pressButton: () {
  38. //进行路由跳转 直接删除栈中元素 跳转到tablepage
  39. Navigator.of(context).pushNamedAndRemoveUntil(
  40. CheckOut.routeName, ModalRoute.withName(TablePage.routeName),
  41. arguments: index);
  42. }),
  43. )
  44. ],
  45. );
  46. }
  47. }
  48. class CartList extends StatelessWidget {
  49. const CartList({
  50. Key key,
  51. }) : super(key: key);
  52. @override
  53. Widget build(BuildContext context) {
  54. return Consumer<TableDetail>(
  55. builder: (c, cart, child) {
  56. return ListView.separated(
  57. itemBuilder: (c, index) {
  58. return Row(
  59. mainAxisAlignment: MainAxisAlignment.start,
  60. children: <Widget>[
  61. Expanded(
  62. flex: 1,
  63. child: Container(
  64. constraints: BoxConstraints(maxHeight: kDefaultPaddin * 3),
  65. child: Image.asset(
  66. cart.items[index].product.image,
  67. fit: BoxFit.contain,
  68. ),
  69. ),
  70. ),
  71. Expanded(
  72. flex: 2,
  73. child: Text(
  74. '${cart.items[index].product.title}',
  75. style: TextStyle(fontSize: 25),
  76. ),
  77. ),
  78. Expanded(flex: 1, child: Text('数量:${cart.items[index].count}')),
  79. Expanded(
  80. flex: 1,
  81. child: cart.items[index].product.status == true
  82. ? Text("已制作")
  83. : FlatButton(
  84. color: cart.items[index].product.color,
  85. child: Text("退菜"),
  86. onPressed: () {
  87. print("退菜");
  88. cart.removeItem(cart.items[index].product);
  89. },
  90. ),
  91. )
  92. ],
  93. );
  94. },
  95. separatorBuilder: (_, __) => Divider(),
  96. itemCount: cart.items.length,
  97. );
  98. },
  99. );
  100. }
  101. }
  102. AppBar buildAppBar(BuildContext context) {
  103. return AppBar(
  104. elevation: 0,
  105. // backgroundColor: product.color,
  106. leading: IconButton(
  107. icon: SvgPicture.asset(
  108. 'assets/icons/back.svg',
  109. color: Colors.white,
  110. ),
  111. onPressed: () => Navigator.pop(context),
  112. ),
  113. title: TotalPrice(),
  114. actions: <Widget>[
  115. IconButton(
  116. icon: SvgPicture.asset("assets/icons/search.svg"),
  117. onPressed: () {},
  118. ),
  119. // IconButton(
  120. // icon: SvgPicture.asset("assets/icons/cart.svg"),
  121. // onPressed: () {
  122. // Navigator.pushNamed(context, OrderCart.routeName);
  123. // },
  124. // ),
  125. SizedBox(width: kDefaultPaddin / 2)
  126. ],
  127. );
  128. }
  129. class TotalPrice extends StatelessWidget {
  130. @override
  131. Widget build(BuildContext context) {
  132. return Consumer<TableDetail>(
  133. builder: (context, cart, widget) {
  134. return Text('总额:${cart.getTotalPrices()}',
  135. style: TextStyle(color: Colors.white, fontSize: 20));
  136. },
  137. );
  138. }
  139. }