首页 > 解决方案 > 断言失败:第 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(),
      ),
    );
  }
}

标签: flutter

解决方案


对于垂直列表,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类,并且您可以看到它的文档说:

“横轴上的像素数。对于垂直列表,这是条子的宽度。”


推荐阅读