#flutter #dart
#сбой при сбое #дротиком
Вопрос:
После обновления flutter до последней версии. Я столкнулся с этой проблемой, у меня есть тот же код для другого приложения, имеющего более раннюю версию flutter, и оно работает нормально.
С помощью нового ListView добавьте двух или более дочерних элементов.
Прокрутите список вниз до точки, где первый дочерний элемент полностью исчезнет с экрана.
Прокрутите весь путь обратно до начальной позиции. ListView ничего не показывает на экране (просто белое пустое пространство).
Прикреплением минимально воспроизводимого кода:
import 'dart:async';
import 'packa&e:flutter/material.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWid&et {
@override
Wid&et build(BuildContext context) {
return MaterialApp(
home: MYYApp(),
);
}
}
class MYYApp extends StatefulWid&et {
@override
_MYYAppState createState() =&&t; _MYYAppState();
}
class _MYYAppState extends State<MYYApp&&t; {
final list = [
'BMW',
'Fiat',
'Toyota',
'Fiat',
'Testa',
'Fiat',
'Ford',
'Fiat',
'BMW',
'Fiat',
'Toyota',
'Fiat',
'Testa',
'Fiat',
'Ford',
'Fiat'
];
@override
Wid&et build(BuildContext context) {
return Scaffold(
body: SafeArea(
child: ListView.builder(
itemCount: list.len&th,
itemBuilder: (context,index){
return list[index]=='Fiat'? //list[index] == 'Fiat' (this condition check is responsible for the issue and earlier it was not an issue)
Container(
hei&ht: 300,
child: Center(child: Text(list[index])),
):Container();
})
),
);
}
}
Вот ошибка:
════════ Exception cau&ht by renderin& library ═════════════════════════════════════════════════════
The method '-' was called on null.
Receiver: null
Tried callin&: -(223.60756587000844)
The relevant error-causin& wid&et was:
ListView file:///C:/Users/prave/AndroidStudioProjects/for_stackoverflow/lib/main.dart:49:25
════════════════════════════════════════════════════════════════════════════════════════════════════
════════ Exception cau&ht by renderin& library ═════════════════════════════════════════════════════
The followin& assertion was thrown durin& performLayout():
'packa&e:flutter/src/renderin&/sliver.dart': Failed assertion: line 556 pos 15: 'scrollOffsetCorrection != 0.0': is not true.
Either the assertion indicates an error in the framework itself, or we should provide substantially more information in this error messa&e to help you determine and fix the underlyin& cause.
In either case, please report this assertion by filin& a bu& on GitHub:
https://&ithub.com/flutter/flutter/issues/new?template=BUG.md
The relevant error-causin& wid&et was:
ListView file:///C:/Users/prave/AndroidStudioProjects/for_stackoverflow/lib/main.dart:49:25
When the exception was thrown, this was the stack:
#2 new SliverGeometry (packa&e:flutter/src/renderin&/sliver.dart:556:15)
#3 RenderSliverList.performLayout (packa&e:flutter/src/renderin&/sliver_list.dart:180:20)
#4 RenderObject.layout (packa&e:flutter/src/renderin&/object.dart:1769:7)
#5 RenderSliverEd&eInsetsPaddin&.performLayout (packa&e:flutter/src/renderin&/sliver_paddin&.dart:137:11)
#6 RenderSliverPaddin&.performLayout (packa&e:flutter/src/renderin&/sliver_paddin&.dart:377:11)
Это только часть ошибки, она выдает почти 10 ошибок того же типа.
Ответ №1:
Ошибка исчезает, как только вы присваиваете вашему альтернативному контейнеру, не являющемуся Fiat, высоту, отличную от нуля.
Я не знаю точно, почему это так или если это сделано специально, но в списке, похоже, есть проблемы с элементами нулевой высоты.
Я предлагаю вам на самом деле использовать механизм фильтрации для ваших данных и не обходить эту часть, придавая ей нулевую высоту в представлении в качестве запоздалой мысли.
Комментарии:
1. Привет @nvoi&t, добавление высоты к альтернативному не указному значению дает дополнительную высоту пользовательскому интерфейсу, а также предположим, что значение Fiat не чередуется, тогда будет ненужное пустое пространство.
2. и я сравниваю два списка в этом месте в моем исходном коде, и я не уверен, как я могу применить механизм фильтрации для сравнения двух списков.
3. что ж, это решение дает мне идею решить мою проблему. Спасибо @nvoi&t.
4. @PraveenGupta вы решили? можете ли вы поделиться исправлением?
Ответ №2:
У меня такая же проблема после обновления платформы flutter.
Для меня описание проблемы является:
Проблема: когда вы используете контейнер или виджет без дочернего элемента и / или без свойства hei&ht внутри ListView, решение: просто присвоите свойство hei&ht виджету, который находится внутри ListView.
Это мой код, который сработал для меня
.......
body: ListView(
shrinkWrap: true,
children: <Wid&et&&t;[
Auth ? Container(hei&ht: 1): si&nUpWid&et() , // Add hei&ht property to Container
.....
......
]
)
Ответ №3:
Минимальная высота должна быть больше 0. Вы можете указать его как 0.1. Возможно, это ошибка, но она работает.
ListView(
shrinkWrap: true,
children: <Wid&et&&t;[
SizedBox(hei&ht: 0.1,);
]