firebase StreamBuilder< QuerySnapshot>出错

wwwo4jvm  于 2023-05-23  发布在  其他
关注(0)|答案(1)|浏览(116)

我正在创建一个交付应用程序,如果交付距离2公里,它会向司机显示订单,但我不知道为什么它会出错。
此错误很可能是由StreamBuilder引起的。这是用Flutter做的。我使用Firebase Firestore作为我的数据库。
密码:

import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:flutter/material.dart';
import 'package:geocoding/geocoding.dart';
import 'package:geolocator/geolocator.dart';
import 'package:homekitchen_delivery_app_new/globals.dart';
import 'package:homekitchen_delivery_app_new/models/DriversRequest.dart';

class DemoNearMe extends StatefulWidget {
  const DemoNearMe({super.key});

  @override
  State<DemoNearMe> createState() => _DemoNearMeState();
}

class _DemoNearMeState extends State<DemoNearMe> {
  Placemark? placemark;
  List positions = [];
  Position? position;
  List<Placemark>? placemarks;
  getCurrentLocation() async {
    await Geolocator.requestPermission().whenComplete(() async {
      Position newPos = await Geolocator.getCurrentPosition(
          desiredAccuracy: LocationAccuracy.high);
      position = newPos;
      placemarks = await placemarkFromCoordinates(
          position!.latitude, position!.longitude);
      Placemark pMark = placemarks![0];
      placemark = pMark;
    });
    return [placemark, position!.latitude, position!.longitude];
  }

  @override
  void initState() {
    WidgetsBinding.instance.addPostFrameCallback((_) async {
      positions = await getCurrentLocation();
    });
    super.initState();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      backgroundColor: Colors.white,
      body: StreamBuilder<QuerySnapshot>(
          stream: FirebaseFirestore.instance
              .collection("driverRequest")
              .where("booked", isEqualTo: false)
              .where("orederType", isEqualTo: "demo")
              .where("city", isEqualTo: driverData!.city)
              .snapshots(),
          builder: (context, snapshot) {
            if (snapshot.connectionState == ConnectionState.waiting) {
              return Center(child: CircularProgressIndicator());
            }
            return snapshot.hasData
                ? ListView.builder(
                    shrinkWrap: true,
                    itemCount: snapshot.data!.docs.length,
                    itemBuilder: (context, index) {
                      final data = snapshot.data!.docs[index].data();
                      DriverRequest driverRequest =
                          DriverRequest.fromJson(data as Map<String, dynamic>);
                      double distanceBetween = Geolocator.distanceBetween(
                              positions[1],
                              positions[2],
                              driverRequest.sellerLat,
                              driverRequest.sellerLng) /
                          1000;
                      if (distanceBetween <= 2) {
                        return Padding(
                          padding: const EdgeInsets.all(20.0),
                          child: Material(
                            elevation: 40,
                            child: Container(
                              child: InkWell(
                                onTap: () {
                                  // Navigator.push(context, MaterialPageRoute(builder: (c) => ))
                                },
                                child: Column(
                                  children: [
                                    ListTile(
                                      leading: CircleAvatar(
                                        backgroundImage: NetworkImage(
                                            driverRequest.sellerProfilePic),
                                      ),
                                      title: Text(driverRequest.sellerName),
                                      subtitle: Text(
                                          '${distanceBetween.toStringAsFixed(2)} km'),
                                    ),
                                  ],
                                ),
                              ),
                            ),
                          ),
                        );
                      } else {
                        return Container();
                      }
                    },
                  )
                : Container(
                    height: 0.0,
                  );
          }),
    );
  }
}

错误:

Restarted application in 3,940ms.

════════ Exception caught by rendering library ═════════════════════════════════
The following assertion was thrown during performLayout():
RenderCustomMultiChildLayoutBox object was given an infinite size during layout.

This probably means that it is a render object that tries to be as big as possible, but it was put inside another render object that allows its children to pick their own size.
The nearest ancestor providing an unbounded height constraint is: _RenderSingleChildViewport#b1d96 relayoutBoundary=up10 NEEDS-LAYOUT NEEDS-COMPOSITING-BITS-UPDATE
The constraints that applied to the RenderCustomMultiChildLayoutBox were: BoxConstraints(0.0<=w<=392.7, 0.0<=h<=Infinity)
The exact size it was given was: Size(392.7, Infinity)

See https://flutter.dev/docs/development/ui/layout/box-constraints for more information.

The relevant error-causing widget was
Scaffold
When the exception was thrown, this was the stack
#0      RenderBox.debugAssertDoesMeetConstraints.<anonymous closure>
#1      RenderBox.debugAssertDoesMeetConstraints
#2      RenderBox.size=.<anonymous closure>
#3      RenderBox.size=
#4      RenderCustomMultiChildLayoutBox.performLayout
#5      RenderObject.layout
#6      RenderBox.layout
#7      RenderProxyBoxMixin.performLayout
#8      RenderObject.layout
#9      RenderBox.layout
#10     RenderProxyBoxMixin.performLayout
#11     _RenderCustomClip.performLayout
#12     RenderObject.layout
#13     RenderBox.layout
#14     _RenderSingleChildViewport.performLayout
#15     RenderObject.layout
#16     RenderBox.layout
#17     RenderProxyBoxMixin.performLayout
#18     RenderObject.layout
#19     RenderBox.layout
#20     RenderProxyBoxMixin.performLayout
#21     RenderObject.layout
#22     RenderBox.layout
#23     RenderProxyBoxMixin.performLayout
#24     RenderObject.layout
#25     RenderBox.layout
#26     RenderProxyBoxMixin.performLayout
#27     RenderObject.layout
#28     RenderBox.layout
#29     RenderProxyBoxMixin.performLayout
#30     RenderObject.layout
#31     RenderBox.layout
#32     RenderProxyBoxMixin.performLayout
#33     RenderObject.layout
#34     RenderBox.layout
#35     RenderProxyBoxMixin.performLayout
#36     RenderObject.layout
#37     RenderBox.layout
#38     RenderProxyBoxMixin.performLayout
#39     RenderCustomPaint.performLayout
#40     RenderObject.layout
#41     RenderBox.layout
#42     RenderProxyBoxMixin.performLayout
#43     RenderObject.layout
#44     RenderBox.layout
#45     MultiChildLayoutDelegate.layoutChild
#46     _ScaffoldLayout.performLayout
#47     MultiChildLayoutDelegate._callPerformLayout
#48     RenderCustomMultiChildLayoutBox.performLayout
#49     RenderObject._layoutWithoutResize
#50     PipelineOwner.flushLayout
#51     RendererBinding.drawFrame
#52     WidgetsBinding.drawFrame
#53     RendererBinding._handlePersistentFrameCallback
#54     SchedulerBinding._invokeFrameCallback
#55     SchedulerBinding.handleDrawFrame
#56     SchedulerBinding._handleDrawFrame
#57     _invoke (dart:ui/hooks.dart:145:13)
#58     PlatformDispatcher._drawFrame (dart:ui/platform_dispatcher.dart:338:5)
#59     _drawFrame (dart:ui/hooks.dart:112:31)
The following RenderObject was being processed when the exception was fired: RenderCustomMultiChildLayoutBox#8b10f relayoutBoundary=up13 NEEDS-LAYOUT NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE
RenderObject: RenderCustomMultiChildLayoutBox#8b10f relayoutBoundary=up13 NEEDS-LAYOUT NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE
    parentData: <none> (can use size)
    constraints: BoxConstraints(0.0<=w<=392.7, 0.0<=h<=Infinity)
    size: Size(392.7, Infinity)
    child 1: RenderPositionedBox#9b587 NEEDS-LAYOUT NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE
        parentData: offset=Offset(0.0, 0.0); id=_ScaffoldSlot.body
        constraints: MISSING
        size: MISSING
        alignment: Alignment.center
        textDirection: ltr
        widthFactor: expand
        heightFactor: expand
        child: RenderSemanticsAnnotations#9cd70 NEEDS-LAYOUT NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE
            parentData: offset=Offset(0.0, 0.0)
            constraints: MISSING
            size: MISSING
            child: RenderConstrainedBox#6da8f NEEDS-LAYOUT NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE
                parentData: <none>
                constraints: MISSING
                size: MISSING
                additionalConstraints: BoxConstraints(36.0<=w<=Infinity, 36.0<=h<=Infinity)
                child: RenderCustomPaint#b87c0 NEEDS-LAYOUT NEEDS-PAINT
                    parentData: <none>
                    constraints: MISSING
                    size: MISSING
                    painter: _CircularProgressIndicatorPainter#44b11()
    child 2: RenderStack#7e46e NEEDS-LAYOUT NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE
        parentData: offset=Offset(0.0, 0.0); id=_ScaffoldSlot.floatingActionButton
        constraints: MISSING
        size: MISSING
        alignment: Alignment.centerRight
        textDirection: ltr
        fit: loose
        child 1: RenderTransform#f9ee2 NEEDS-LAYOUT NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE
            parentData: not positioned; offset=Offset(0.0, 0.0)
            constraints: MISSING
            size: MISSING
            transform matrix: [0] 0.0,0.0,0.0,0.0
[1] 0.0,0.0,0.0,0.0
[2] 0.0,0.0,1.0,0.0
[3] 0.0,0.0,0.0,1.0
            origin: null
            alignment: Alignment.center
            textDirection: ltr
            transformHitTests: true
            child: RenderTransform#cb5bb NEEDS-LAYOUT NEEDS-PAINT
                parentData: <none>
                constraints: MISSING
                size: MISSING
                transform matrix: [0] 0.7,0.7,0.0,0.0
[1] -0.7,0.7,0.0,0.0
[2] 0.0,0.0,1.0,0.0
[3] 0.0,0.0,0.0,1.0
                origin: null
                alignment: Alignment.center
                textDirection: ltr
                transformHitTests: true
════════════════════════════════════════════════════════════════════════════════

════════ Exception caught by rendering library ═════════════════════════════════
_RenderInkFeatures object was given an infinite size during layout.
The relevant error-causing widget was
Scaffold
════════════════════════════════════════════════════════════════════════════════

════════ Exception caught by rendering library ═════════════════════════════════
RenderPhysicalModel object was given an infinite size during layout.
The relevant error-causing widget was
Scaffold
════════════════════════════════════════════════════════════════════════════════
W/DynamiteModule(24486): Local module descriptor class for com.google.android.gms.providerinstaller.dynamite not found.
I/DynamiteModule(24486): Considering local module com.google.android.gms.providerinstaller.dynamite:0 and remote module com.google.android.gms.providerinstaller.dynamite:0
W/ProviderInstaller(24486): Failed to load providerinstaller module: No acceptable module com.google.android.gms.providerinstaller.dynamite found. Local version is 0 and remote version is 0.

════════ Exception caught by rendering library ═════════════════════════════════
RenderCustomMultiChildLayoutBox object was given an infinite size during layout.
The relevant error-causing widget was
Scaffold
════════════════════════════════════════════════════════════════════════════════

════════ Exception caught by rendering library ═════════════════════════════════
_RenderInkFeatures object was given an infinite size during layout.
The relevant error-causing widget was
Scaffold
════════════════════════════════════════════════════════════════════════════════

════════ Exception caught by rendering library ═════════════════════════════════
RenderPhysicalModel object was given an infinite size during layout.
The relevant error-causing widget was
Scaffold
════════════════════════════════════════════════════════════════════════════════

════════ Exception caught by rendering library ═════════════════════════════════
RenderBox was not laid out: RenderRepaintBoundary#9998e NEEDS-LAYOUT NEEDS-PAINT
'package:flutter/src/rendering/box.dart':
Failed assertion: line 2009 pos 12: 'hasSize'

The relevant error-causing widget was
Scaffold
════════════════════════════════════════════════════════════════════════════════

当我用列 Package StreamBuilder时,它给出错误:

Restarted application in 3,092ms.

════════ Exception caught by rendering library ═════════════════════════════════
The following assertion was thrown during performLayout():
RenderCustomMultiChildLayoutBox object was given an infinite size during layout.

This probably means that it is a render object that tries to be as big as possible, but it was put inside another render object that allows its children to pick their own size.
The nearest ancestor providing an unbounded height constraint is: _RenderSingleChildViewport#54eba relayoutBoundary=up10 NEEDS-LAYOUT NEEDS-COMPOSITING-BITS-UPDATE
The constraints that applied to the RenderCustomMultiChildLayoutBox were: BoxConstraints(0.0<=w<=392.7, 0.0<=h<=Infinity)
The exact size it was given was: Size(392.7, Infinity)

See https://flutter.dev/docs/development/ui/layout/box-constraints for more information.

The relevant error-causing widget was
Scaffold
When the exception was thrown, this was the stack
#0      RenderBox.debugAssertDoesMeetConstraints.<anonymous closure>
#1      RenderBox.debugAssertDoesMeetConstraints
#2      RenderBox.size=.<anonymous closure>
#3      RenderBox.size=
#4      RenderCustomMultiChildLayoutBox.performLayout
#5      RenderObject.layout
#6      RenderBox.layout
#7      RenderProxyBoxMixin.performLayout
#8      RenderObject.layout
#9      RenderBox.layout
#10     RenderProxyBoxMixin.performLayout
#11     _RenderCustomClip.performLayout
#12     RenderObject.layout
#13     RenderBox.layout
#14     _RenderSingleChildViewport.performLayout
#15     RenderObject.layout
#16     RenderBox.layout
#17     RenderProxyBoxMixin.performLayout
#18     RenderObject.layout
#19     RenderBox.layout
#20     RenderProxyBoxMixin.performLayout
#21     RenderObject.layout
#22     RenderBox.layout
#23     RenderProxyBoxMixin.performLayout
#24     RenderObject.layout
#25     RenderBox.layout
#26     RenderProxyBoxMixin.performLayout
#27     RenderObject.layout
#28     RenderBox.layout
#29     RenderProxyBoxMixin.performLayout
#30     RenderObject.layout
#31     RenderBox.layout
#32     RenderProxyBoxMixin.performLayout
#33     RenderObject.layout
#34     RenderBox.layout
#35     RenderProxyBoxMixin.performLayout
#36     RenderObject.layout
#37     RenderBox.layout
#38     RenderProxyBoxMixin.performLayout
#39     RenderCustomPaint.performLayout
#40     RenderObject.layout
#41     RenderBox.layout
#42     RenderProxyBoxMixin.performLayout
#43     RenderObject.layout
#44     RenderBox.layout
#45     MultiChildLayoutDelegate.layoutChild
#46     _ScaffoldLayout.performLayout
#47     MultiChildLayoutDelegate._callPerformLayout
#48     RenderCustomMultiChildLayoutBox.performLayout
#49     RenderObject._layoutWithoutResize
#50     PipelineOwner.flushLayout
#51     RendererBinding.drawFrame
#52     WidgetsBinding.drawFrame
#53     RendererBinding._handlePersistentFrameCallback
#54     SchedulerBinding._invokeFrameCallback
#55     SchedulerBinding.handleDrawFrame
#56     SchedulerBinding._handleDrawFrame
#57     _invoke (dart:ui/hooks.dart:145:13)
#58     PlatformDispatcher._drawFrame (dart:ui/platform_dispatcher.dart:338:5)
#59     _drawFrame (dart:ui/hooks.dart:112:31)
The following RenderObject was being processed when the exception was fired: RenderCustomMultiChildLayoutBox#3c1d3 relayoutBoundary=up13 NEEDS-LAYOUT NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE
RenderObject: RenderCustomMultiChildLayoutBox#3c1d3 relayoutBoundary=up13 NEEDS-LAYOUT NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE
    parentData: <none> (can use size)
    constraints: BoxConstraints(0.0<=w<=392.7, 0.0<=h<=Infinity)
    size: Size(392.7, Infinity)
    child 1: RenderFlex#6f952 NEEDS-LAYOUT NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE
        parentData: offset=Offset(0.0, 0.0); id=_ScaffoldSlot.body
        constraints: MISSING
        size: MISSING
        direction: vertical
        mainAxisAlignment: start
        mainAxisSize: max
        crossAxisAlignment: center
        verticalDirection: down
        child 1: RenderPositionedBox#bb9d9 NEEDS-LAYOUT NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE
            parentData: offset=Offset(0.0, 0.0); flex=null; fit=null
            constraints: MISSING
            size: MISSING
            alignment: Alignment.center
            textDirection: ltr
            widthFactor: expand
            heightFactor: expand
            child: RenderSemanticsAnnotations#ca31f NEEDS-LAYOUT NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE
                parentData: offset=Offset(0.0, 0.0)
                constraints: MISSING
                size: MISSING
                child: RenderConstrainedBox#93da4 NEEDS-LAYOUT NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE
                    parentData: <none>
                    constraints: MISSING
                    size: MISSING
                    additionalConstraints: BoxConstraints(36.0<=w<=Infinity, 36.0<=h<=Infinity)
    child 2: RenderStack#cea44 NEEDS-LAYOUT NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE
        parentData: offset=Offset(0.0, 0.0); id=_ScaffoldSlot.floatingActionButton
        constraints: MISSING
        size: MISSING
        alignment: Alignment.centerRight
        textDirection: ltr
        fit: loose
        child 1: RenderTransform#c5da0 NEEDS-LAYOUT NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE
            parentData: not positioned; offset=Offset(0.0, 0.0)
            constraints: MISSING
            size: MISSING
            transform matrix: [0] 0.0,0.0,0.0,0.0
[1] 0.0,0.0,0.0,0.0
[2] 0.0,0.0,1.0,0.0
[3] 0.0,0.0,0.0,1.0
            origin: null
            alignment: Alignment.center
            textDirection: ltr
            transformHitTests: true
            child: RenderTransform#42b70 NEEDS-LAYOUT NEEDS-PAINT
                parentData: <none>
                constraints: MISSING
                size: MISSING
                transform matrix: [0] 0.7,0.7,0.0,0.0
[1] -0.7,0.7,0.0,0.0
[2] 0.0,0.0,1.0,0.0
[3] 0.0,0.0,0.0,1.0
                origin: null
                alignment: Alignment.center
                textDirection: ltr
                transformHitTests: true
════════════════════════════════════════════════════════════════════════════════

════════ Exception caught by rendering library ═════════════════════════════════
_RenderInkFeatures object was given an infinite size during layout.
The relevant error-causing widget was
Scaffold
════════════════════════════════════════════════════════════════════════════════

════════ Exception caught by rendering library ═════════════════════════════════
RenderPhysicalModel object was given an infinite size during layout.
The relevant error-causing widget was
Scaffold
════════════════════════════════════════════════════════════════════════════════
W/DynamiteModule(24486): Local module descriptor class for com.google.android.gms.providerinstaller.dynamite not found.
I/elivery_app_ne(24486): Background concurrent copying GC freed 65713(2MB) AllocSpace objects, 5(228KB) LOS objects, 49% free, 3MB/6MB, paused 11.556ms total 412.304ms
I/DynamiteModule(24486): Considering local module com.google.android.gms.providerinstaller.dynamite:0 and remote module com.google.android.gms.providerinstaller.dynamite:0
W/ProviderInstaller(24486): Failed to load providerinstaller module: No acceptable module com.google.android.gms.providerinstaller.dynamite found. Local version is 0 and remote version is 0.
tyu7yeag

tyu7yeag1#

使用Expanded小部件 Package ListView.builder。这将使ListView占用尽可能多的可用空间,而不会溢出。
另外,尽可能不要使用shrinkWrap: true。这对性能来说是很糟糕的,因为每次滚动位置改变时,它都必须计算滚动视图的大小。

相关问题