- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我是 Flutter 新手,我正在开发一个电子商务网站,我想在我的欢迎页面中添加一个 Grid 来显示最近的产品,我正在尝试使用 GridVeiw.builder,但出现错误
Failed assertion: line 551 pos 12: 'child.hasSize': is not true.
import 'package:ecommerce_practice/components/carousel.dart';
import 'package:ecommerce_practice/components/horizontal_list.dart';
import 'package:ecommerce_practice/components/products.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
class WelcomePage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('E-commerce'),
backgroundColor: Colors.red,
actions: [
IconButton(
icon: Icon(
Icons.search,
),
color: Colors.white,
onPressed: () {},
),
IconButton(
icon: Icon(Icons.shopping_cart),
color: Colors.white,
onPressed: () {},
)
],
),
drawer: Drawer(
child: ListView(
children: [
UserAccountsDrawerHeader(
accountName: Text("Aleem"),
accountEmail: Text('aleem.alam@outlook.com'),
currentAccountPicture: GestureDetector(
child: CircleAvatar(
backgroundColor: Colors.grey,
child: Icon(
Icons.person,
color: Colors.white,
),
),
),
decoration: BoxDecoration(color: Colors.red),
),
DrawerMenuButton(
title: 'Home',
icon: Icon(
Icons.home,
color: Colors.red,
),
),
DrawerMenuButton(
title: 'My Account',
icon: Icon(
Icons.person,
color: Colors.red,
),
),
DrawerMenuButton(
title: 'My Order',
icon: Icon(
Icons.shopping_basket,
color: Colors.red,
),
),
DrawerMenuButton(
title: 'Category',
icon: Icon(
Icons.category,
color: Colors.red,
),
),
DrawerMenuButton(
title: 'Favourites',
icon: Icon(
Icons.favorite,
color: Colors.red,
),
),
Divider(),
DrawerMenuButton(
title: 'Settings',
icon: Icon(
Icons.settings,
color: Colors.blue,
),
),
DrawerMenuButton(
title: 'About Us',
icon: Icon(
Icons.help,
color: Colors.blue,
),
),
],
),
),
body: ListView(
children: [
ImageCarousel(),
Padding(
padding: EdgeInsets.all(10.0),
child: Text('Category'),
),
HorizontalList(),
Padding(
padding: EdgeInsets.all(10.0),
child: Text('Recent Product'),
),
Products(),
],
),
);
}
}
class DrawerMenuButton extends StatelessWidget {
DrawerMenuButton({this.title, this.icon});
final String title;
final Icon icon;
@override
Widget build(BuildContext context) {
return InkWell(
onTap: () {},
child: ListTile(
title: Text(title),
leading: icon,
),
);
}
}
产品.dart
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
class Products extends StatefulWidget {
@override
_ProductsState createState() => _ProductsState();
}
class _ProductsState extends State<Products> {
List<dynamic> products = [
{
'name': 'Shirt',
'image': 'images/category.jpg',
'old_price': 200,
'price': 140,
},
{
'name': 'Shirt',
'image': 'images/category.jpg',
'old_price': 200,
'price': 140,
}
];
@override
Widget build(BuildContext context) {
return GridView.builder(
itemCount: products.length,
gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
crossAxisCount: 2,
),
itemBuilder: (context, index) {
return Product(
name: products[index]['name'],
image: products[index]['image'],
oldPrice: products[index]['old_price'],
finalPrice: products[index]['price'],
);
},
);
}
}
class Product extends StatelessWidget {
Product({this.name, this.image, this.oldPrice, this.finalPrice});
final String name, image;
final int oldPrice, finalPrice;
@override
Widget build(BuildContext context) {
return Card(
child: Hero(
tag: name,
child: Material(
child: InkWell(
onTap: () {},
child: GridTile(
footer: Container(
color: Colors.white,
child: ListTile(
leading: Text(
name,
style: TextStyle(
fontWeight: FontWeight.bold,
),
),
),
),
child: Image.asset(
image,
fit: BoxFit.cover,
),
),
),
),
),
);
}
}
最佳答案
尝试设置 shrinkWrap
GridView
的属性(property)至 true
所以它只需要基于它的项目所需的空间:
我使用您的代码添加了一个演示作为示例:
return GridView.builder(
itemCount: products.length,
shrinkWrap: true, // new line
physics: NeverScrollableScrollPhysics(), // new line
gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
crossAxisCount: 2,
),
itemBuilder: (context, index) {
return Product(
name: products[index]['name'],
image: products[index]['image'],
oldPrice: products[index]['old_price'],
finalPrice: products[index]['price'],
);
},
);
GridView
在您的
ListView
中单独滚动,设置
physics
的
GridView
至
NeverScrollablePhysics
.
关于flutter - 失败的断言 : line 551 pos 12: 'child.hasSize' : is not true,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63842062/
当我将容器包装在列小部件中时出现错误。我在一列中需要 2 个容器,但是当我将它包装在列小部件中时,它显示此错误 'package:flutter/src/rendering/box.dart': Fa
有人可以启动一个快速的 flutter 项目并将 main.dart 替换为以下内容,看看我做错了什么吗?我正在尝试在 ListView 中进行拖放操作。 我什至不确定这是正确的方法,所以如果不正确,
我使用 Mockito 和 Hamcrest 在 Java 中进行单元测试。 我经常使用 Hamcrests hasSize断言某些集合具有一定的大小。几分钟前,我正在编写一个测试,捕获 List的调
我正尝试在 Spring MVC Controller 中实现一个方法的单元测试,如下所示: @Test public void testGetProfile() { Person mockP
我是 Flutter 的新手。我正在使用底部导航 View 。在 仪表板 类,有底部导航。底部导航第一个是首页 具有选项卡 View 的类。 tabview的第一页是新请求 类(class)。当应用程
我是 Flutter 新手,我正在开发一个电子商务网站,我想在我的欢迎页面中添加一个 Grid 来显示最近的产品,我正在尝试使用 GridVeiw.builder,但出现错误 Failed asser
我无法修复此错误 RenderBox was not laid out: RenderPointerListener#2b92arelayoutBoundary=up9 NEEDS-PAINT NEE
我在 flutter 中有以下代码。 Widget build(BuildContext context) { return Center( child: Card(
我是一名优秀的程序员,十分优秀!