import 'package:canteen/model/dish_model.dart'; import 'package:flutter/material.dart'; /// Description: 食堂菜谱 /// Time : 07/25/2022 Monday /// Author : liuyuqi.gov@msn.cn 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 DishModel 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)), ], ); } }