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