Reputation: 868
I am new to Flutter and trying to develop my first app.
Here my code:
class PopularFoodsWidget extends StatefulWidget {
@override
_PopularFoodsWidgetState createState() => _PopularFoodsWidgetState();
}
class _PopularFoodsWidgetState extends State<PopularFoodsWidget> {
@override
Widget build(BuildContext context) {
return Container(
alignment: Alignment.center,
height: 600,
width: double.infinity,
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Expanded(
child: PopularFoodItems(),
)
],
),
);
}
}
class PopularFoodTiles extends StatelessWidget {
String name;
String imageUrl;
String rating;
String numberOfRating;
String price;
String slug;
PopularFoodTiles(
{Key key,
@required this.name,
@required this.imageUrl,
@required this.rating,
@required this.numberOfRating,
@required this.price,
@required this.slug})
: super(key: key);
@override
Widget build(BuildContext context) {
return InkWell(
onTap: () {
Navigator.push(context, ScaleRoute(page: FoodDetailsPage()));
},
child: Column(
children: <Widget>[
Container(
padding: EdgeInsets.only(left: 10, right: 5, top: 5, bottom: 5),
child: Card(
color: Colors.white,
elevation: 0,
shape: RoundedRectangleBorder(
borderRadius: const BorderRadius.all(
Radius.circular(5.0),
),
),
child: Container(
width: double.infinity,
child: Column(
children: <Widget>[
Stack(
children: <Widget>[
Align(
alignment: Alignment.topRight,
child: Container(
alignment: Alignment.topRight,
width: double.infinity,
padding: EdgeInsets.only(right: 5, top: 5),
child: Container(
height: 28,
width: 28,
decoration: BoxDecoration(
shape: BoxShape.circle,
color: Colors.white70,
boxShadow: [
BoxShadow(
color: Color(0xFFfae3e2),
blurRadius: 25.0,
offset: Offset(0.0, 0.75),
),
]),
child: Icon(
Icons.favorite,
color: Color(0xFFfb3132),
size: 16,
),
),
),
),
Align(
alignment: Alignment.centerLeft,
child: Center(
child: Image.asset(
'assets/images/popular_foods/' +
imageUrl +
".png",
width: 130,
height: 140,
)),
)
],
),
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: <Widget>[
Container(
alignment: Alignment.bottomLeft,
padding: EdgeInsets.only(left: 5, top: 5),
child: Text(name,
style: TextStyle(
color: Color(0xFF6e6e71),
fontSize: 15,
fontWeight: FontWeight.w500)),
),
Container(
alignment: Alignment.topRight,
padding: EdgeInsets.only(right: 5),
child: Container(
height: 28,
width: 28,
decoration: BoxDecoration(
shape: BoxShape.circle,
color: Colors.white70,
boxShadow: [
BoxShadow(
color: Color(0xFFfae3e2),
blurRadius: 25.0,
offset: Offset(0.0, 0.75),
),
]),
child: Icon(
Icons.near_me,
color: Color(0xFFfb3132),
size: 16,
),
),
),
],
),
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: <Widget>[
Row(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: <Widget>[
Container(
alignment: Alignment.topLeft,
padding: EdgeInsets.only(left: 5, top: 5),
child: Text(rating,
style: TextStyle(
color: Color(0xFF6e6e71),
fontSize: 10,
fontWeight: FontWeight.w400)),
),
Container(
padding: EdgeInsets.only(top: 3, left: 5),
child: Row(
children: <Widget>[
Icon(
Icons.star,
size: 10,
color: Color(0xFFfb3132),
),
Icon(
Icons.star,
size: 10,
color: Color(0xFFfb3132),
),
Icon(
Icons.star,
size: 10,
color: Color(0xFFfb3132),
),
Icon(
Icons.star,
size: 10,
color: Color(0xFFfb3132),
),
Icon(
Icons.star,
size: 10,
color: Color(0xFF9b9b9c),
),
],
),
),
Container(
alignment: Alignment.topLeft,
padding: EdgeInsets.only(left: 5, top: 5),
child: Text("($numberOfRating)",
style: TextStyle(
color: Color(0xFF6e6e71),
fontSize: 10,
fontWeight: FontWeight.w400)),
),
],
),
Container(
alignment: Alignment.bottomLeft,
padding: EdgeInsets.only(left: 5, top: 5, right: 5),
child: Text('\$' + price,
style: TextStyle(
color: Color(0xFF6e6e71),
fontSize: 12,
fontWeight: FontWeight.w600)),
)
],
)
],
),
)),
),
],
),
);
}
}
class PopularFoodItems extends StatelessWidget {
@override
Widget build(BuildContext context) {
return ListView(
scrollDirection: Axis.vertical,
children: <Widget>[
PopularFoodTiles(
name: "Fried Egg",
imageUrl: "ic_popular_food_1",
rating: '4.9',
numberOfRating: '200',
price: '15.06',
slug: "fried_egg"),
PopularFoodTiles(
name: "Mixed Vegetable",
imageUrl: "ic_popular_food_3",
rating: "4.9",
numberOfRating: "100",
price: "17.03",
slug: ""),
PopularFoodTiles(
name: "Salad With Chicken",
imageUrl: "ic_popular_food_4",
rating: "4.0",
numberOfRating: "50",
price: "11.00",
slug: ""),
PopularFoodTiles(
name: "Mixed Salad",
imageUrl: "ic_popular_food_5",
rating: "4.00",
numberOfRating: "100",
price: "11.10",
slug: ""),
PopularFoodTiles(
name: "Red meat,Salad",
imageUrl: "ic_popular_food_2",
rating: "4.6",
numberOfRating: "150",
price: "12.00",
slug: ""),
PopularFoodTiles(
name: "Mixed Salad",
imageUrl: "ic_popular_food_5",
rating: "4.00",
numberOfRating: "100",
price: "11.10",
slug: ""),
PopularFoodTiles(
name: "Potato,Meat fry",
imageUrl: "ic_popular_food_6",
rating: "4.2",
numberOfRating: "70",
price: "23.0",
slug: ""),
PopularFoodTiles(
name: "Fried Egg",
imageUrl: "ic_popular_food_1",
rating: '4.9',
numberOfRating: '200',
price: '15.06',
slug: "fried_egg"),
PopularFoodTiles(
name: "Red meat,Salad",
imageUrl: "ic_popular_food_2",
rating: "4.6",
numberOfRating: "150",
price: "12.00",
slug: ""),
],
);
}
}
I am trying to display a list of food on a page where I have 2 Widgets: one for the search form and one for ListView.
The problem is that my list can't take all the available space on the screen:
I tried to change the height from 400 to 600, it looks better now so I can scroll down, but I still not able to see all items...
Any suggestion plz?
Upvotes: 0
Views: 76
Reputation: 1
wrap the container with an expanded widget
class PopularFoodsWidget extends StatefulWidget {
@override
_PopularFoodsWidgetState createState() => _PopularFoodsWidgetState();
}
class _PopularFoodsWidgetState extends State<PopularFoodsWidget> {
@override
Widget build(BuildContext context) {
return Expanded(
child: Container(
alignment: Alignment.center,
width: double.infinity,
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Expanded(
child: PopularFoodItems(),
)
],
),
),
);
}
}
Upvotes: 0
Reputation: 705
Instead of putting 600, can you calculate the correct available height for the list view? Like this,
height : MediaQuery.of(context).size.height
- Your_top_bar_height_including_searchBar
- Bottom_TabBar_Height
Upvotes: 1