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

#flutter-layout #sliver-grid

#flutter-layout #сетка sliver-grid

Вопрос:

Получение очень неприятной ошибки в этом сегменте моего приложения 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, но ошибка остается. просмотр домашней страницы с продуктами

Ответ №1:

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

Я был в такой же ситуации, и у меня была такая же проблема, тесто на поперечной оси. Проблема в том, что вы предоставляете оба mainAxisSpacing: 30.0 crossAxisSpacing: 20.0 значения and . С помощью a 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;
                });
  

Ответ №2:

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

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

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

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

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

Поставьте лайк, если найдете это полезным! 🙂

Ответ №3:

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

Я использовал пустой список в gridview builder

     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 не было никаких значений