import 'package:canteen/bean/bean.dart'; import 'package:flutter/material.dart'; class CanteenDishListView extends StatelessWidget{ final List dishes; final void Function(int index)?onLikePressed; final void Function(int index)?onStarPressed; CanteenDishListView(this.dishes,{this.onLikePressed=null,this.onStarPressed=null}); @override Widget build(BuildContext context) { return ListView.separated( shrinkWrap: true, addRepaintBoundaries: true, itemCount: dishes.length, itemBuilder: (BuildContext context,int index){ return _DishListViewItem( index, dishes[index], onLikePressed, onStarPressed ); }, separatorBuilder: (context,index){return const Divider(color:Colors.grey);}, ); } } class _DishListViewItem extends StatelessWidget{ final int id; final Dish dish; final void Function(int index)?onLikePressed; final void Function(int index)?onStarPressed; const _DishListViewItem(this.id,this.dish,this.onLikePressed,this.onStarPressed); @override //5:3=20:12 //4:3=12:9 Widget build(BuildContext context){ return Row( mainAxisAlignment: MainAxisAlignment.end, children: [ Expanded( child: Column( children: [ Padding(child:Row( children: [ Text(dish.name,textScaleFactor: 2,), Expanded(child:Row( mainAxisAlignment: MainAxisAlignment.end, children:[Padding(child:Text(dish.cost,textScaleFactor: 1.2,), padding: EdgeInsets.fromLTRB(0,0,16,0), )])) ], ), padding:EdgeInsets.fromLTRB(6,4,4,4)), Padding(child:Row( children: [ Text(dish.canteen,textScaleFactor: 0.9,), Expanded(child:Row( mainAxisAlignment: MainAxisAlignment.end, children:[Padding(child:Text(dish.time,textScaleFactor: 0.9,), padding: EdgeInsets.fromLTRB(0,0,20,0), )])) ], ), padding: EdgeInsets.fromLTRB(6, 0, 0, 6), ) ], ), ), IconButton( onPressed: (){if(onLikePressed!=null)onLikePressed!(this.id);}, icon: Icon(dish.like?Icons.favorite:Icons.favorite_border,color:dish.like?Colors.red:null) ), IconButton( onPressed: (){if(onStarPressed!=null)onStarPressed!(this.id);}, icon: Icon(dish.star?Icons.star:Icons.star_border,color:dish.star?Colors.amber:null) ), ], ); } }