Утверждение с ошибкой: строка 556 поз. 15: ‘scrollOffsetCorrection!= 0.0’: неверно

#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,);

     ]