Flutter: ListView.builder аварийно завершает работу, вызывая 'child.hasSize' и '! _DebugDoingThisLayout', не является истинной ошибкой - PullRequest
0 голосов
/ 14 апреля 2020

Мой ListView.builder потерпел крах, когда достиг моей второй стороны поднятия элемента: MISSING error. Мой виджет находится в другом виджете с состоянием, который отображается на моем главном экране. Этот метод получает данные из магазина и отображает их с индикатором refre sh в конце. Если нет inte rnet, мой streambuilder загружает кэшированные данные, которые хранятся в списке. Мой виджет allNews () прикреплен к телу в скаффолде этого класса. вот мой код:

    Widget allNews() {
return  StreamBuilder(
    stream: databaseReference
        .collection("posts")
        .where('isaccepting', isEqualTo: true)
        .orderBy('date', descending: true)
        .limit(10 + feed.length)
        .snapshots(),
    builder: (BuildContext context, AsyncSnapshot snapshot) {
      if (!snapshot.hasData) {
        return FutureBuilder(
          builder: (BuildContext context, AsyncSnapshot snapshot) {
            if (!snapshot.hasData) {
              return CircularProgressIndicator(strokeWidth: 2.0,);
            } else {
              return new ListView.builder(
                itemCount: feed.length,
                itemBuilder: (_, index) {
                  return 
                      Post(
                        context,
                        appliedPeople,
                        feed[index]['uid'].toString(),
                        feed[index]['type'].toString(),
                      );

                },
              );
            }
          },
        );
      } else {
        List<DocumentSnapshot> item = snapshot.data.documents;
        for (int i = 0; i < snapshot.data.documents.length; i++) {
          databaseReference
              .collection('posts')
              .document(item[i].documentID)
              .updateData({'gigID': item[i].documentID});
        }
        return new RefreshIndicator(
          child: ListView.builder(
              controller: controller,
              itemCount: _data.length + 1,
              itemBuilder: (_, int index) {
                if (index < _data.length) {
                  final DocumentSnapshot ds = _data[index];

                  return 
                      Post(
                        context,
                        ds['uid'].toString(),
                        ds['type'].toString(),

                  );
                }else 
                return Center(
                  child: new Opacity(
                    opacity: _isLoading ? 1.0 : 0.0,
                    child: new SizedBox(
                        width: 32.0,
                        height: 32.0,
                        child: new CircularProgressIndicator(strokeWidth: 2.0)),
                  ),
                );
              }),
          onRefresh: () async {
            _data.clear();
            _lastVisible = null;
            await _getData();
          },
        );
      }
    },

);
}

журнал ошибок показывает это:

'' '

════════ Exception caught by rendering library ═════════════════════════════════
'package:flutter/src/rendering/object.dart': Failed assertion: line 1651 pos 12: '!_debugDoingThisLayout': is not true.
The relevant error-causing widget was
    ListView 
lib\…\HomeHelpers\Feed.dart:698
════════════════════════════════════════════════════════════════════════════════

════════ Exception caught by rendering library ═════════════════════════════════
'package:flutter/src/rendering/sliver_multi_box_adaptor.dart': Failed assertion: line 549 pos 12: 'child.hasSize': is not true.
The relevant error-causing widget was
    ListView 
lib\…\HomeHelpers\Feed.dart:698
════════════════════════════════════════════════════════════════════════════════
D/ViewRootImpl@16abb27[MainActivity]( 5794): ViewPostIme pointer 0
E/flutter ( 5794): [ERROR:flutter/lib/ui/ui_dart_state.cc(157)] Unhandled Exception: Cannot hit test a render box that has never been laid out.
E/flutter ( 5794): The hitTest() method was called on this RenderBox: RenderIndexedSemantics#05f19 relayoutBoundary=up3 NEEDS-LAYOUT NEEDS-PAINT:
E/flutter ( 5794):   needs compositing
E/flutter ( 5794):   creator: IndexedSemantics ← NotificationListener<KeepAliveNotification> ← KeepAlive ← AutomaticKeepAlive ← KeyedSubtree ← SliverList ← MediaQuery ← SliverPadding ← Viewport ← IgnorePointer-[GlobalKey#0b98a] ← Semantics ← _PointerListener ← ⋯
      E/flutter ( 5794):   parentData: index=2; layoutOffset=902.0 (can use size)
      E/flutter ( 5794):   constraints: BoxConstraints(w=360.0, 0.0<=h<=Infinity)
      E/flutter ( 5794):   semantic boundary
      E/flutter ( 5794):   size: MISSING
      E/flutter ( 5794):   index: 2
      E/flutter ( 5794): Unfortunately, this object's geometry is not known at this time, probably because it has never been laid out. This means it cannot be accurately hit-tested.
      flutter ( 5794): If you are trying to perform a hit test during the layout phase itself, make sure you only hit test nodes that have completed layout (e.g. the node's children, after their layout() method has been called).
      E/flutter ( 5794): #0      RenderBox.hitTest.<anonymous closure> 
      package:flutter/…/rendering/box.dart:2102
E/flutter ( 5794): #1      RenderBox.hitTest 
package:flutter/…/rendering/box.dart:2133
E/flutter ( 5794): #2      RenderSliverHelpers.hitTestBoxChild.<anonymous closure> 
package:flutter/…/rendering/sliver.dart:1654
E/flutter ( 5794): #3      BoxHitTestResult.addWithRawTransform 
package:flutter/…/rendering/box.dart:801
E/flutter ( 5794): #4      BoxHitTestResult.addWithPaintOffset 
package:flutter/…/rendering/box.dart:758
E/flutter ( 5794): #5      RenderSliverHelpers.hitTestBoxChild 
package:flutter/…/rendering/sliver.dart:1650
E/flutter ( 5794): #6      RenderSliverMultiBoxAdaptor.hitTestChildren 
package:flutter/…/rendering/sliver_multi_box_adaptor.dart:564
E/flutter ( 5794): #7      RenderSliver.hitTest 
package:flutter/…/rendering/sliver.dart:1269
E/flutter ( 5794): #8      SliverHitTestResult.addWithAxisOffset 
package:flutter/…/rendering/sliver.dart:844
E/flutter ( 5794): #9      RenderSliverEdgeInsetsPadding.hitTestChildren 
package:flutter/…/rendering/sliver_padding.dart:219
E/flutter ( 5794): #10     RenderSliver.hitTest 
package:flutter/…/rendering/sliver.dart:1269
E/flutter ( 5794): #11     RenderViewportBase.hitTestChildren.<anonymous closure> 
package:flutter/…/rendering/viewport.dart:589
E/flutter ( 5794): #12     BoxHitTestResult.addWithRawTransform 
package:flutter/…/rendering/box.dart:801
E/flutter ( 5794): #13     BoxHitTestResult.addWithPaintTransform 
package:flutter/…/rendering/box.dart:729
E/flutter ( 5794): #14     RenderViewportBase.hitTestChildren 
package:flutter/…/rendering/viewport.dart:585
E/flutter ( 5794): #15     RenderBox.hitTest 
package:flutter/…/rendering/box.dart:2135
E/flutter ( 5794): #16     RenderProxyBoxMixin.hitTestChildren 
package:flutter/…/rendering/proxy_box.dart:114
E/flutter ( 5794): #17     RenderBox.hitTest 
package:flutter/…/rendering/box.dart:2135
E/flutter ( 5794): #18     RenderIgnorePointer.hitTest 
package:flutter/…/rendering/proxy_box.dart:3064
E/flutter ( 5794): #19     RenderProxyBoxMixin.hitTestChildren 
package:flutter/…/rendering/proxy_box.dart:114
E/flutter ( 5794): #20     RenderBox.hitTest 
package:flutter/…/rendering/box.dart:2135
E/flutter ( 5794): #21     RenderProxyBoxMixin.hitTestChildren 
package:flutter/…/rendering/proxy_box.dart:114
E/flutter ( 5794): #22     RenderProxyBoxWithHitTestBehavior.hitTest 
package:flutter/…/rendering/proxy_box.dart:161
E/flutter ( 5794): #23     RenderProxyBoxMixin.hitTestChildren 
package:flutter/…/rendering/proxy_box.dart:114
E/flutter ( 5794): #24     RenderBox.hitTest 
package:flutter/…/rendering/box.dart:2135
E/flutter ( 5794): #25     RenderProxyBoxMixin.hitTestChildren 
package:flutter/…/rendering/proxy_box.dart:114
E/flutter ( 5794): #26     RenderProxyBoxWithHitTestBehavior.hitTest 
package:flutter/…/rendering/proxy_box.dart:161
E/flutter ( 5794): #27     RenderProxyBoxMixin.hitTestChildren 
package:flutter/…/rendering/proxy_box.dart:114
E/flutter ( 5794): #28     RenderBox.hitTest 
package:flutter/…/rendering/box.dart:2135
E/flutter ( 5794): #29     RenderProxyBoxMixin.hitTestChildren 
package:flutter/…/rendering/proxy_box.dart:114
E/flutter ( 5794): #30     RenderBox.hitTest 
package:flutter/…/rendering/box.dart:2135
E/flutter ( 5794): #31     RenderProxyBoxMixin.hitTestChildren 
package:flutter/…/rendering/proxy_box.dart:114
D/ViewRootImpl@16abb27[MainActivity]( 5794): ViewPostIme pointer 1
V/InputMethodManager( 5794): Starting input: tba=android.view.inputmethod.EditorInfo@e7f56e9 nm : com.jobs.freelance.gigs.gigs_ethiopia ic=null
I/InputMethodManager( 5794): startInputInner - mService.startInputOrWindowGainedFocus
D/SurfaceView( 5794): BG show() Surface(name=Background for - SurfaceView - com.jobs.freelance.gigs.gigs_ethiopia/com.jobs.freelance.gigs.gigs_ethiopia.MainActivity@c83afbe@1) io.flutter.embedding.android.FlutterSurfaceView{c83afbe V.E...... ........ 0,0-1080,1920}
D/SurfaceView( 5794): surfaceDestroyed 1 io.flutter.embedding.android.FlutterSurfaceView{c83afbe V.E...... ........ 0,0-1080,1920}
D/FlutterView( 5794): Detaching from a FlutterEngine: io.flutter.embedding.engine.FlutterEngine@9e64f7d
V/InputMethodManager( 5794): Starting input: tba=android.view.inputmethod.EditorInfo@1d0e60f nm : com.jobs.freelance.gigs.gigs_ethiopia ic=null
I/InputMethodManager( 5794): startInputInner - mService.startInputOrWindowGainedFocus
D/ViewRootImpl@16abb27[MainActivity]( 5794): performDraw() was skipped by AOD_SHOW_STATE... DisplayState=3
D/ViewRootImpl@16abb27[MainActivity]( 5794): MSG_WINDOW_FOCUS_CHANGED 0
D/SurfaceView( 5794): BG show() Surface(name=Background for - SurfaceView - com.jobs.freelance.gigs.gigs_ethiopia/com.jobs.freelance.gigs.gigs_ethiopia.MainActivity@c83afbe@1) io.flutter.embedding.android.FlutterSurfaceView{c83afbe V.E...... .......D 0,0-1080,1920}
D/OpenGLRenderer( 5794): eglDestroySurface = 0x707f4f1bd0
D/ViewRootImpl@16abb27[MainActivity]( 5794): Relayout returned: old=[0,0][1080,1920] new=[0,0][1080,1920] result=0x5 surface={valid=false 0} changed=true'''
...