【问题标题】:Failed assertion: line 556 pos 15: 'scrollOffsetCorrection != 0.0': is not true断言失败:第 556 行 pos 15:'scrollOffsetCorrection != 0.0':不正确
【发布时间】:2020-08-11 05:26:43
【问题描述】:

将flutter升级到最新版本后。我正面临这个问题,我为另一个具有早期版本颤振的应用程序提供了相同的代码,它工作正常。

使用新的 ListView 添加两个或多个子视图。

向下滚动列表,直到第一个孩子完全离开屏幕。

一直向上滚动到初始位置。 ListView 在屏幕上不显示任何内容(只是空白区域)。

附加最少的可重现代码:

import 'dart:async';

import 'package:flutter/material.dart';


void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: MYYApp(),
    );
  }
}

class MYYApp extends StatefulWidget {
  @override
  _MYYAppState createState() => _MYYAppState();
}

class _MYYAppState extends State<MYYApp> {

  final list = [
    'BMW',
    'Fiat',
    'Toyota',
    'Fiat',
    'Testa',
    'Fiat',
    'Ford',
    'Fiat',
    'BMW',
    'Fiat',
    'Toyota',
    'Fiat',
    'Testa',
    'Fiat',
    'Ford',
    'Fiat'
  ];

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body:  SafeArea(
        child: ListView.builder(
          itemCount: list.length,
            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(
            height: 300,
            child: Center(child: Text(list[index])), 
          ):Container();
        })

      ),
    );
  }
}

错误如下:

════════ Exception caught by rendering library ═════════════════════════════════════════════════════
The method '-' was called on null.
Receiver: null
Tried calling: -(223.60756587000844)
The relevant error-causing widget was: 
  ListView file:///C:/Users/prave/AndroidStudioProjects/for_stackoverflow/lib/main.dart:49:25
════════════════════════════════════════════════════════════════════════════════════════════════════

════════ Exception caught by rendering library ═════════════════════════════════════════════════════
The following assertion was thrown during performLayout():
'package:flutter/src/rendering/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 message to help you determine and fix the underlying cause.
In either case, please report this assertion by filing a bug on GitHub:
  https://github.com/flutter/flutter/issues/new?template=BUG.md

The relevant error-causing widget 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 (package:flutter/src/rendering/sliver.dart:556:15)
#3      RenderSliverList.performLayout (package:flutter/src/rendering/sliver_list.dart:180:20)
#4      RenderObject.layout (package:flutter/src/rendering/object.dart:1769:7)
#5      RenderSliverEdgeInsetsPadding.performLayout (package:flutter/src/rendering/sliver_padding.dart:137:11)
#6      RenderSliverPadding.performLayout (package:flutter/src/rendering/sliver_padding.dart:377:11)

这只是错误的一部分,它会产生近10个相同类型的错误。

【问题讨论】:

    标签: flutter dart


    【解决方案1】:

    只要您为替代的非 Fiat 容器提供非零的高度,错误就会消失。

    我不知道为什么会这样或者是否是故意的,但该列表似乎存在零高度元素的问题。

    我建议您实际上对您的数据使用过滤机制,而不是事后将其设置为零高度来解决该部分问题。

    【讨论】:

    • 嗨@nvoigt,向替代非菲亚特添加高度会为用户界面提供额外的高度,并且假设菲亚特没有交替,那么会有不必要的空白空间。
    • 我在原始代码的这个地方比较两个列表,我不确定如何应用过滤机制来比较两个列表。
    • 这个解决方案给了我解决问题的想法。谢谢@nvoigt。
    • @PraveenGupta 你解决了吗?可以分享一下解决方法吗?
    【解决方案2】:

    升级颤振框架后我遇到同样的问题。

    对我来说问题的描述是:

    问题:当您在 ListVIew 中使用没有子级和或没有 height 属性的 Container 或 Widget 解决方案:只需将高度属性赋予ListView内的Widget即可。

    这是我的代码,对我有用

    .......
    body: ListView(
              shrinkWrap: true,
              children: <Widget>[
                Auth ? Container(height: 1): signUpWidget() , // Add height property to Container
                .....
                ......
              ]
           )
    

    【讨论】:

      【解决方案3】:

      最小高度应该大于0。你可以把它设置为0.1。这可能是一个错误,但它可以工作。

      ListView(
          shrinkWrap: true,
          children: <Widget>[
      
          SizedBox(height: 0.1,);
      
           ]
      

      【讨论】:

        猜你喜欢
        • 2021-05-12
        • 1970-01-01
        • 2019-05-24
        • 2020-08-31
        • 1970-01-01
        • 2020-12-14
        • 1970-01-01
        • 2020-04-22
        • 2020-12-29
        相关资源
        最近更新 更多