flutter 如何将多个statefulWidget显示

import 'package:flutter/material.dart';
import 'package:flutter_swiper/flutter_swiper.dart';
class HomeView extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Home'),
      ),
      body: Column(
        children: <Widget>[
          Text('1'),
          Text('2'),
          Text('3'),
          Text('4'),
          GetHttp(),
          GetBanner(),
        ],
      ),
    );
  }
}

class GetHttp extends StatefulWidget {
  @override
  _GetHttpState createState() => _GetHttpState();
}

class _GetHttpState extends State<GetHttp> {
  @override
  Widget build(BuildContext context) {
    return GridView.count(
      crossAxisCount: 2,
      children: <Widget>[
        Container(
          child: Image.asset('images/swipe_1.jpeg',fit: BoxFit.cover,),
        ),
        Container(
          child: Image.asset('images/swipe_2.jpeg',fit: BoxFit.cover,),
        ),
        Container(
          child: Image.asset('images/swipe_3.jpeg',fit: BoxFit.cover,),
        ),
        Container(
          child: Image.asset('images/swipe_4.jpeg',fit: BoxFit.cover,),
        ),
      ],
    );
  }
}

// 轮播图
class GetBanner extends StatefulWidget {
  @override
  _GetBannerState createState() => _GetBannerState();
}

class _GetBannerState extends State<GetBanner> {
  @override
  Widget build(BuildContext context) {
    return Container(
      child: Swiper(
        itemBuilder: (BuildContext context, int index) {
          return new Image.asset('images/swipe_${index+1}.jpeg', fit: BoxFit.fill,);
        },
        itemCount: 4,
        pagination: new SwiperPagination(),
        control: new SwiperControl(
          iconPrevious: null,
          iconNext: null,
        ),
      )
    );
  }
}

我加了后面两个 statefulWidget类型的 GetHttp就报错了,,,
该用什么widget?

报错信息:

Performing hot reload...                                               ⣻flutter: ══╡ EXCEPTION CAUGHT BY RENDERING LIBRARY ╞═════════════════════════════════════════════════════════
flutter: The following assertion was thrown during performResize():
flutter: Vertical viewport was given unbounded height.
flutter: Viewports expand in the scrolling direction to fill their container.In this case, a vertical
flutter: viewport was given an unlimited amount of vertical space in which to expand. This situation
flutter: typically happens when a scrollable widget is nested inside another scrollable widget.
flutter: If this widget is always nested in a scrollable widget there is no need to use a viewport because
flutter: there will always be enough vertical space for the children. In this case, consider using a Column
flutter: instead. Otherwise, consider using the "shrinkWrap" property (or a ShrinkWrappingViewport) to size
flutter: the height of the viewport to the sum of the heights of its children.
flutter:
flutter: Widget creation tracking is currently disabled. Enabling it enables improved error messages. It can
flutter: be enabled by passing `--track-widget-creation` to `flutter run` or `flutter test`.
flutter:
flutter: When the exception was thrown, this was the stack:
flutter: #0      RenderViewport.performResize.<anonymous closure> (package:flutter/src/rendering/viewport.dart:1165:15)
flutter: #1      RenderViewport.performResize (package:flutter/src/rendering/viewport.dart:1218:6)
flutter: #2      RenderObject.layout (package:flutter/src/rendering/object.dart:1686:9)
flutter: #3      RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:105:13)
flutter: #4      RenderObject.layout (package:flutter/src/rendering/object.dart:1701:7)
flutter: #5      RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:105:13)
flutter: #6      RenderObject.layout (package:flutter/src/rendering/object.dart:1701:7)
flutter: #7      RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:105:13)
flutter: #8      RenderObject.layout (package:flutter/src/rendering/object.dart:1701:7)
flutter: #9      RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:105:13)
flutter: #10     RenderObject.layout (package:flutter/src/rendering/object.dart:1701:7)
flutter: #11     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:105:13)
flutter: #12     RenderObject.layout (package:flutter/src/rendering/object.dart:1701:7)
flutter: #13     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:105:13)
flutter: #14     RenderObject.layout (package:flutter/src/rendering/object.dart:1701:7)
flutter: #15     RenderFlex.performLayout (package:flutter/src/rendering/flex.dart:744:15)
flutter: #16     RenderObject.layout (package:flutter/src/rendering/object.dart:1701:7)
flutter: #17     MultiChildLayoutDelegate.layoutChild (package:flutter/src/rendering/custom_layout.dart:142:11)
flutter: #18     _ScaffoldLayout.performLayout (package:flutter/src/material/scaffold.dart:444:7)
flutter: #19     MultiChildLayoutDelegate._callPerformLayout (package:flutter/src/rendering/custom_layout.dart:212:7)
flutter: #20     RenderCustomMultiChildLayoutBox.performLayout (package:flutter/src/rendering/custom_layout.dart:356:14)
flutter: #21     RenderObject.layout (package:flutter/src/rendering/object.dart:1701:7)
flutter: #22     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:105:13)
flutter: #23     RenderObject.layout (package:flutter/src/rendering/object.dart:1701:7)
flutter: #24     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:105:13)
flutter: #25     _RenderCustomClip.performLayout (package:flutter/src/rendering/proxy_box.dart:1232:11)
flutter: #26     RenderObject.layout (package:flutter/src/rendering/object.dart:1701:7)
flutter: #27     MultiChildLayoutDelegate.layoutChild (package:flutter/src/rendering/custom_layout.dart:142:11)
flutter: #28     _ScaffoldLayout.performLayout (package:flutter/src/material/scaffold.dart:444:7)
flutter: #29     MultiChildLayoutDelegate._callPerformLayout (package:flutter/src/rendering/custom_layout.dart:212:7)
flutter: #30     RenderCustomMultiChildLayoutBox.performLayout (package:flutter/src/rendering/custom_layout.dart:356:14)
flutter: #31     RenderObject.layout (package:flutter/src/rendering/object.dart:1701:7)
flutter: #32     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:105:13)
flutter: #33     RenderObject.layout (package:flutter/src/rendering/object.dart:1701:7)
flutter: #34     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:105:13)
flutter: #35     _RenderCustomClip.performLayout (package:flutter/src/rendering/proxy_box.dart:1232:11)
flutter: #36     RenderObject.layout (package:flutter/src/rendering/object.dart:1701:7)
flutter: #37     MultiChildLayoutDelegate.layoutChild (package:flutter/src/rendering/custom_layout.dart:142:11)
flutter: #38     _ScaffoldLayout.performLayout (package:flutter/src/material/scaffold.dart:444:7)
flutter: #39     MultiChildLayoutDelegate._callPerformLayout (package:flutter/src/rendering/custom_layout.dart:212:7)
flutter: #40     RenderCustomMultiChildLayoutBox.performLayout (package:flutter/src/rendering/custom_layout.dart:356:14)
flutter: #41     RenderObject.layout (package:flutter/src/rendering/object.dart:1701:7)
flutter: #42     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:105:13)
flutter: #43     RenderObject.layout (package:flutter/src/rendering/object.dart:1701:7)
flutter: #44     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:105:13)
flutter: #45     _RenderCustomClip.performLayout (package:flutter/src/rendering/proxy_box.dart:1232:11)
flutter: #46     RenderObject.layout (package:flutter/src/rendering/object.dart:1701:7)
flutter: #47     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:105:13)
flutter: #48     RenderObject.layout (package:flutter/src/rendering/object.dart:1701:7)
flutter: #49     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:105:13)
flutter: #50     RenderObject.layout (package:flutter/src/rendering/object.dart:1701:7)
flutter: #51     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:105:13)
flutter: #52     RenderObject.layout (package:flutter/src/rendering/object.dart:1701:7)
flutter: #53     RenderStack.performLayout (package:flutter/src/rendering/stack.dart:510:15)
flutter: #54     RenderObject.layout (package:flutter/src/rendering/object.dart:1701:7)
flutter: #55     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:105:13)
flutter: #56     RenderObject.layout (package:flutter/src/rendering/object.dart:1701:7)
flutter: #57     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:105:13)
flutter: #58     RenderObject.layout (package:flutter/src/rendering/object.dart:1701:7)
flutter: #59     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:105:13)
flutter: #60     RenderObject.layout (package:flutter/src/rendering/object.dart:1701:7)
flutter: #61     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:105:13)
flutter: #62     RenderObject.layout (package:flutter/src/rendering/object.dart:1701:7)
flutter: #63     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:105:13)
flutter: #64     RenderObject.layout (package:flutter/src/rendering/object.dart:1701:7)
flutter: #65     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:105:13)
flutter: #66     RenderOffstage.performLayout (package:flutter/src/rendering/proxy_box.dart:3140:13)
flutter: #67     RenderObject.layout (package:flutter/src/rendering/object.dart:1701:7)
flutter: #68     RenderStack.performLayout (package:flutter/src/rendering/stack.dart:510:15)
flutter: #69     RenderObject.layout (package:flutter/src/rendering/object.dart:1701:7)
flutter: #70     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:105:13)
flutter: #71     RenderObject.layout (package:flutter/src/rendering/object.dart:1701:7)
flutter: #72     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:105:13)
flutter: #73     RenderObject.layout (package:flutter/src/rendering/object.dart:1701:7)
flutter: #74     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:105:13)
flutter: #75     RenderObject.layout (package:flutter/src/rendering/object.dart:1701:7)
flutter: #76     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:105:13)
flutter: #77     RenderObject.layout (package:flutter/src/rendering/object.dart:1701:7)
flutter: #78     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:105:13)
flutter: #79     RenderObject.layout (package:flutter/src/rendering/object.dart:1701:7)
flutter: #80     RenderView.performLayout (package:flutter/src/rendering/view.dart:152:13)
flutter: #81     RenderObject._layoutWithoutResize (package:flutter/src/rendering/object.dart:1578:7)
flutter: #82     PipelineOwner.flushLayout (package:flutter/src/rendering/object.dart:844:18)
flutter: #83     RendererBinding.drawFrame (package:flutter/src/rendering/binding.dart:341:19)
flutter: #84     WidgetsBinding.drawFrame (package:flutter/src/widgets/binding.dart:761:13)
flutter: #85     RendererBinding._handlePersistentFrameCallback (package:flutter/src/rendering/binding.dart:280:5)
flutter: #86     SchedulerBinding._invokeFrameCallback (package:flutter/src/scheduler/binding.dart:1033:15)
flutter: #87     SchedulerBinding.handleDrawFrame (package:flutter/src/scheduler/binding.dart:975:9)
flutter: #88     SchedulerBinding.scheduleWarmUpFrame.<anonymous closure> (package:flutter/src/scheduler/binding.dart:784:7)
flutter: #90     _Timer._runTimers (dart:isolate-patch/timer_impl.dart:382:19)
flutter: #91     _Timer._handleMessage (dart:isolate-patch/timer_impl.dart:416:5)
flutter: #92     _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:172:12)
flutter: (elided one frame from package dart:async-patch)
flutter:
flutter: The following RenderObject was being processed when the exception was fired: RenderViewport#3e402 NEEDS-LAYOUT NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE:
flutter:   needs compositing
flutter:   creator: Viewport ← IgnorePointer-[GlobalKey#183b2] ← Semantics ← _PointerListener ← Listener ←
flutter:     _GestureSemantics ← RawGestureDetector-[LabeledGlobalKey<RawGestureDetectorState>#a4cde] ←
flutter:     _PointerListener ← Listener ← _ScrollableScope ← _ScrollSemantics-[GlobalKey#f52a7] ← Scrollable ←
flutter:     ⋯
flutter:   parentData: <none> (can use size)
flutter:   constraints: BoxConstraints(0.0<=w<=414.0, 0.0<=h<=Infinity)
flutter:   layer: OffsetLayer#0ac41 DETACHED
flutter:   size: MISSING
flutter:   axisDirection: down
flutter:   crossAxisDirection: right
flutter:   offset: ScrollPositionWithSingleContext#d6235(offset: 0.0, range: null..null, viewport: null,
flutter:     ScrollableState, AlwaysScrollableScrollPhysics -> BouncingScrollPhysics, IdleScrollActivity#2245c,
flutter:     ScrollDirection.idle)
flutter:   anchor: 0.0
flutter: This RenderObject had the following descendants (showing up to depth 5):
flutter:     center child: RenderSliverPadding#48a7c NEEDS-LAYOUT NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE
flutter:       child: RenderSliverGrid#8bb85 NEEDS-LAYOUT NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE
flutter: ════════════════════════════════════════════════════════════════════════════════════════════════════
flutter: Another exception was thrown: RenderBox was not laid out: RenderViewport#3e402 NEEDS-LAYOUT NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE
flutter: Another exception was thrown: RenderBox was not laid out: RenderViewport#3e402 NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE
flutter: Another exception was thrown: RenderBox was not laid out: RenderIgnorePointer#bfb07 relayoutBoundary=up13 NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE
flutter: Another exception was thrown: RenderBox was not laid out: RenderSemanticsAnnotations#96d37 relayoutBoundary=up12 NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE
flutter: Another exception was thrown: RenderBox was not laid out: RenderPointerListener#073bd relayoutBoundary=up11 NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE
flutter: Another exception was thrown: RenderBox was not laid out: RenderSemanticsGestureHandler#f3f0e relayoutBoundary=up10 NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE
flutter: Another exception was thrown: RenderBox was not laid out: RenderPointerListener#79bd7 relayoutBoundary=up9 NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE
flutter: Another exception was thrown: RenderBox was not laid out: _RenderScrollSemantics#9c289 relayoutBoundary=up8 NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE
flutter: Another exception was thrown: RenderBox was not laid out: RenderViewport#3e402 NEEDS-PAINT
        
Reloaded 0 of 590 libraries in 436ms.
阅读 4.3k
3 个回答

GetHttp返回的是一个GridView,而GridView是一个滚动控件,而滚动控件必须指明自身大小,才能进行滚动,所以你在Column中放了一个未指明高度的GridView,就导致了这个问题。

body那里改成这样吧

 body: Column(
        children: <Widget>[
          Text('1'),
          Text('2'),
          Text('3'),
          Text('4'),
          Expanded(child:GetHttp()),
          Expanded(child:GetBanner()),
        ],
      ),

因为一些widget在一个方向上必须有大小(可以是Expanded)。具体要看里面的约束。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题