CanteenDishListView.dart 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. import 'package:canteen/bean/bean.dart';
  2. import 'package:flutter/material.dart';
  3. class CanteenDishListView extends StatelessWidget{
  4. final List<Dish> dishes;
  5. final void Function(int index)?onLikePressed;
  6. final void Function(int index)?onStarPressed;
  7. CanteenDishListView(this.dishes,{this.onLikePressed=null,this.onStarPressed=null});
  8. @override
  9. Widget build(BuildContext context) {
  10. return ListView.separated(
  11. shrinkWrap: true,
  12. addRepaintBoundaries: true,
  13. itemCount: dishes.length,
  14. itemBuilder: (BuildContext context,int index){
  15. return _DishListViewItem(
  16. index,
  17. dishes[index],
  18. onLikePressed,
  19. onStarPressed
  20. );
  21. },
  22. separatorBuilder: (context,index){return const Divider(color:Colors.grey);},
  23. );
  24. }
  25. }
  26. class _DishListViewItem extends StatelessWidget{
  27. final int id;
  28. final Dish dish;
  29. final void Function(int index)?onLikePressed;
  30. final void Function(int index)?onStarPressed;
  31. const _DishListViewItem(this.id,this.dish,this.onLikePressed,this.onStarPressed);
  32. @override
  33. //5:3=20:12
  34. //4:3=12:9
  35. Widget build(BuildContext context){
  36. return Row(
  37. mainAxisAlignment: MainAxisAlignment.end,
  38. children: [
  39. Expanded(
  40. child: Column(
  41. children: [
  42. Padding(child:Row(
  43. children: [
  44. Text(dish.name,textScaleFactor: 2,),
  45. Expanded(child:Row(
  46. mainAxisAlignment: MainAxisAlignment.end,
  47. children:[Padding(child:Text(dish.cost,textScaleFactor: 1.2,),
  48. padding: EdgeInsets.fromLTRB(0,0,16,0),
  49. )]))
  50. ],
  51. ),
  52. padding:EdgeInsets.fromLTRB(6,4,4,4)),
  53. Padding(child:Row(
  54. children: [
  55. Text(dish.canteen,textScaleFactor: 0.9,),
  56. Expanded(child:Row(
  57. mainAxisAlignment: MainAxisAlignment.end,
  58. children:[Padding(child:Text(dish.time,textScaleFactor: 0.9,),
  59. padding: EdgeInsets.fromLTRB(0,0,20,0),
  60. )]))
  61. ],
  62. ),
  63. padding: EdgeInsets.fromLTRB(6, 0, 0, 6),
  64. )
  65. ],
  66. ),
  67. ),
  68. IconButton(
  69. onPressed: (){if(onLikePressed!=null)onLikePressed!(this.id);},
  70. icon: Icon(dish.like?Icons.favorite:Icons.favorite_border,color:dish.like?Colors.red:null)
  71. ),
  72. IconButton(
  73. onPressed: (){if(onStarPressed!=null)onStarPressed!(this.id);},
  74. icon: Icon(dish.star?Icons.star:Icons.star_border,color:dish.star?Colors.amber:null)
  75. ),
  76. ],
  77. );
  78. }
  79. }