ScrollExtent отрицателен при трепете

Получаю очень неприятную ошибку в этом сегменте моего приложения Flutter и не знаю почему:

       child: GridView.builder(
    gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
        crossAxisCount: 1,
        childAspectRatio: 4 / 3,
        mainAxisSpacing: 30.0,
        crossAxisSpacing: 20.0),
    padding: EdgeInsets.only(left: 20),
    scrollDirection: Axis.horizontal,
    itemCount: products.length,
    itemBuilder: (context, i) => ChangeNotifierProvider.value(
      value: products[i],
      child: Consumer<Product>(
        builder: (context, product, _) {
          return ProductCard(
              product: product,
              onSelected: (prod) {
                setState(() {
                  products.forEach(
                    (item) {
                      item.isSelected = false;
                    },
                  );
                  prod.isSelected = true;
                });
here's the error: SliverGeometry is not valid: The "scrollExtent" is negative.geometry: SliverGeometry(scrollExtent: -10.0, paintExtent: 20.0, maxPaintExtent: -10.0, cacheExtent: 20.0)
scrollExtent: -10.0
paintExtent: 20.0
maxPaintExtent: -10.0
cacheExtent: 20.0

отступы: EdgeInsets(20.0, 0.0, 0.0, 0.0)

Эта ошибка предотвращает эмуляцию на Android, хотя apk установлен, но просто не запускается. Он работает на iOS, но ошибка остается.

3 ответа

Почти уверен, что вы уже разобрались, но, поскольку я не вижу ни одного принятого ответа, я оставлю свой, чтобы он был полезен другим.

Я был в такой же ситуации, и у меня была такая же проблема, тесто в поперечной оси. Проблема в том, что вы предоставляете оба mainAxisSpacing: 30.0а также crossAxisSpacing: 20.0ценности. С crossAxisCount: 1вы не используете главную ось, поэтому mainAxisSpacingбросает печально известный SliverGeometry is not valid: The "scrollExtent" is negative.ошибка. Независимо от вашего scrollingDirectionВы должны только пройти crossAxisSpacingценность.

      child: GridView.builder(
    gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
        crossAxisCount: 1,
        childAspectRatio: 4 / 3,
        crossAxisSpacing: 20.0),
    padding: EdgeInsets.only(left: 20),
    scrollDirection: Axis.horizontal,
    itemCount: products.length,
    itemBuilder: (context, i) => ChangeNotifierProvider.value(
      value: products[i],
      child: Consumer<Product>(
        builder: (context, product, _) {
          return ProductCard(
              product: product,
              onSelected: (prod) {
                setState(() {
                  products.forEach(
                    (item) {
                      item.isSelected = false;
                    },
                  );
                  prod.isSelected = true;
                });

Это мой код, который вызывал то же самое, Исключение перед исключением

Я много искал, короче вот как решаю

Что я сделал, чтобы это исправить

В моем случае, меняя gridDelegate , мое исключение исправлено!

Примечание: не используйте математические операции, такие как (/,*), которые могут привести к двойному значению !!!

поставьте лайк, если он Вам пригодится! :)

Я нашел проблему,

Я использовал пустой список в построителе сетки

          List<int> myList = [];

    GridView.builder(
      gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
        crossAxisSpacing: Dimensions.PADDING_SIZE_LARGE,
        mainAxisSpacing: ResponsiveHelper.isDesktop(context)
            ? Dimensions.PADDING_SIZE_LARGE
            : 0.01,
        childAspectRatio:
            ResponsiveHelper.isDesktop(context) ? 4 : 4,
        crossAxisCount:
            ResponsiveHelper.isMobile(context) ? 1 : 2,
      ),
      physics: BouncingScrollPhysics(),
      shrinkWrap: true,
      itemCount: myList.length,
      itemBuilder: (context, index) {
        return Text("");
      },
    )

myList не имел никаких значений

Другие вопросы по тегам