flutter - 断言失败:第 482 行 pos 12:'crossAxisExtent > 0.0':不正确
问题描述
我是开发新手,一般来说,我想用自定义列表制作一个网格列表,但我遇到了其中一个问题。
类别屏幕:
import 'package:flutter/material.dart';
import 'package:meals_app/widgets/category_item.dart';
import 'package:meals_app/dummy_data.dart';
class CategoriesScreen extends StatelessWidget {
const CategoriesScreen({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('DeliMeal'),
),
body: GridView(
padding: const EdgeInsets.all(25),
gridDelegate: SliverGridDelegateWithMaxCrossAxisExtent(
maxCrossAxisExtent: 200,
childAspectRatio: 3 / 2,
crossAxisSpacing: 20,
mainAxisSpacing: 20,
),
children: DUMMY_CATEGORIES
.map(
(catData) => CategoryItem(
id: catData.id,
title: catData.title,
color: catData.color,
),
)
.toList(),
),
);
}
}
解决方案
对于垂直列表,crossAxisExtent
是条子的宽度。所以断言意味着你没有给你的小部件一个宽度,试着把你包装GridView
在 a 中Container
并给它最大宽度,如下所示:
Container(
width: MediaQuery.of(context).size.width,
child: GridView(
padding: const EdgeInsets.all(25),
gridDelegate: SliverGridDelegateWithMaxCrossAxisExtent(
maxCrossAxisExtent: 200,
childAspectRatio: 3 / 2,
crossAxisSpacing: 20,
mainAxisSpacing: 20,
),
children: DUMMY_CATEGORIES
.map(
(catData) => CategoryItem(
id: catData.id,
title: catData.title,
color: catData.color,
),
)
.toList(),
),
),
实际上,您可以按照源代码SliverGridDelegateWithMaxCrossAxisExtent
查看断言的确切来源,正如您将看到的,crossAxisExtent
来自SliverConstraints
类,并且您可以看到它的文档说:
“横轴上的像素数。对于垂直列表,这是条子的宽度。”
推荐阅读
- karate - 通过传入参数重用其他功能文件中的空手道测试
- django - 为什么我的模板 html 文件不使用 bootsrap css?
- laravel - Inertiajs - 异步重定向
- c++ - C++ 原子素数筛中缺少小素数
- python - 使 testfunc 允许 0.1 + 0.2 = 0.3
- simics - 有没有办法在 Simics 2021.24 中更改为基于 PCH 的模拟?
- c++ - 如何访问 conanfile.py 中的设置环境变量
- ruby-on-rails - 由于不可思议的兼容性问题,无法使用 bundle 安装 rails
- javascript - 通过数组映射,为每个元素创建一个键值对,并为每个对赋予一个字母的键
- java - 如何创建新类并创建其类型的新变量?