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