cart.dart 4.1 KB

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