我在一个灵活的列中使用了一个选项卡栏视图.因此,我得到了ParentDataWidget的错误使用.

这是我身体的密码:

Widget _buildBody() {
    TabController _topTabController = TabController(length: 2, vsync: this, animationDuration: Duration.zero);
    var loc = Utils.getLocalizations(context)!;
    double deviceWidth = Utils.deviceWidth(context);

  
    _topTabController.animateTo(tabIndex);

    _topTabController.addListener(() {
      if (!_topTabController.indexIsChanging) {
        tabIndex = _topTabController.index;
      }
    });

    //this gesture detector ensures that the search bar loses focus when an empty space on the screen is tapped
    return GestureDetector(
      onTap: () => FocusScope.of(context).unfocus(),
      child: Material(
        color: Colors.white,
        child: Column(
          mainAxisSize: MainAxisSize.min,
          children: [
            HomePageBanner(title: loc.messagesTitle,),
            Padding(
              padding: const EdgeInsets.only(top: 20),
              child: DecoratedBox(
                decoration: BoxDecoration(
                  //This is for bottom border that is needed
                  border: Border(bottom: BorderSide(color: Colors.grey.shade300, width: 0.8)),
                ),
                child: TabBar(
                  labelColor: Colors.black,
                  labelStyle: const TextStyle(fontWeight: FontWeight.bold),
                  unselectedLabelColor: Colors.black,
                  unselectedLabelStyle: const TextStyle(fontWeight: FontWeight.normal),
                  controller: _topTabController,
                  indicator: const UnderlineTabIndicator(
                    borderSide: BorderSide(color: Colors.black, width: 3.0),
                  ),
                  tabs: [
                    Tab( text: loc.messagesJustMetTabName,),
                    Tab(text: loc.messagesFriendsTabName,)
                  ],
                ),
              ),
            ),
            Flexible(
              child: Padding(
                padding: EdgeInsets.only(left: deviceWidth*0.012, right: deviceWidth*0.012, top: 5),
                child: TabBarView(
                  controller: _topTabController,
                  children: [
                    StatefulBuilder(
                      builder: (BuildContext context, void Function(void Function()) setMetState) {
                        return _justMetTab(context, setMetState);
                      },
                    ),
                    StatefulBuilder(
                      builder: (BuildContext context, void Function(void Function()) setFriendState) {
                        return _friendsTab(context, setFriendState);
                      },
                    ),
                  ],
                ),
              ),
            ),
          ],
        ),
      ),
    );
  }

我曾try 将列包装在一个大小合适的盒子中,并给它一个固定的高度,但这只会使屏幕上的每个小部件都消失.我也try 过将大小的条本身包装在一个大小的盒子中,但所有的小部件也都消失了.

Here's an example of the what the page looks like for better understanding: Screen

现在看起来一切都很好,但当我在试飞中运行应用程序时,由于ParentDataWidgetError,我会看到一个灰色的屏幕.

EDIT:

@override
  Widget build(BuildContext context) {
    return FutureBuilder<dynamic>(
      future: getAllChatRequests(), // async work
      builder: (BuildContext context, AsyncSnapshot<dynamic> snapshot) {
        switch (snapshot.connectionState) {
          case ConnectionState.waiting: return const Center(child: CircularProgressIndicator());
          default:
            if (snapshot.hasError) {
              return Center(child: Text('Error: ${snapshot.error}'));
            } else {
              return _buildBody();
            }
        }
      },
    );
  }

EDIT:

同时在此处添加错误日志(log)以了解更多上下文:

======== Exception caught by widgets library =======================================================
The following assertion was thrown while applying parent data.:
Incorrect use of ParentDataWidget.

The ParentDataWidget Expanded(flex: 1) wants to apply ParentData of type FlexParentData to a RenderObject, which has been set up to accept ParentData of incompatible type ParentData.

Usually, this means that the Expanded widget has the wrong ancestor RenderObjectWidget. Typically, Expanded widgets are placed directly inside Flex widgets.
The offending Expanded is currently placed inside a RepaintBoundary widget.

The ownership chain for the RenderObject that received the incompatible parent data was:
  Padding ← Expanded ← StatefulBuilder ← KeyedSubtree-[<0>] ← RepaintBoundary ← IndexedSemantics ← NotificationListener<KeepAliveNotification> ← KeepAlive ← AutomaticKeepAlive ← KeyedSubtree-[Key <[<0>]>] ← ⋯
When the exception was thrown, this was the stack: 
#0      RenderObjectElement._updateParentData.<anonymous closure> (package:flutter/src/widgets/framework.dart:5960:11)
#1      RenderObjectElement._updateParentData (package:flutter/src/widgets/framework.dart:5977:6)
#2      RenderObjectElement.attachRenderObject (package:flutter/src/widgets/framework.dart:5999:7)
#3      RenderObjectElement.mount (package:flutter/src/widgets/framework.dart:5673:5)
#4      SingleChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:6214:11)
...     Normal element mounting (53 frames)
#57     Element.inflateWidget (package:flutter/src/widgets/framework.dart:3817:16)
#58     Element.updateChild (package:flutter/src/widgets/framework.dart:3551:18)
#59     SliverMultiBoxAdaptorElement.updateChild (package:flutter/src/widgets/sliver.dart:1265:37)
#60     SliverMultiBoxAdaptorElement.createChild.<anonymous closure> (package:flutter/src/widgets/sliver.dart:1250:20)
#61     BuildOwner.buildScope (package:flutter/src/widgets/framework.dart:2597:19)
#62     SliverMultiBoxAdaptorElement.createChild (package:flutter/src/widgets/sliver.dart:1242:12)
#63     RenderSliverMultiBoxAdaptor._createOrObtainChild.<anonymous closure> (package:flutter/src/rendering/sliver_multi_box_adaptor.dart:349:23)
#64     RenderObject.invokeLayoutCallback.<anonymous closure> (package:flutter/src/rendering/object.dart:2025:59)
#65     PipelineOwner._enableMutationsToDirtySubtrees (package:flutter/src/rendering/object.dart:918:15)
#66     RenderObject.invokeLayoutCallback (package:flutter/src/rendering/object.dart:2025:14)
#67     RenderSliverMultiBoxAdaptor._createOrObtainChild (package:flutter/src/rendering/sliver_multi_box_adaptor.dart:338:5)
#68     RenderSliverMultiBoxAdaptor.addInitialChild (package:flutter/src/rendering/sliver_multi_box_adaptor.dart:422:5)
#69     RenderSliverFixedExtentBoxAdaptor.performLayout (package:flutter/src/rendering/sliver_fixed_extent_list.dart:205:12)
#70     RenderObject.layout (package:flutter/src/rendering/object.dart:1915:7)
#71     RenderSliverEdgeInsetsPadding.performLayout (package:flutter/src/rendering/sliver_padding.dart:137:12)
#72     _RenderSliverFractionalPadding.performLayout (package:flutter/src/widgets/sliver_fill.dart:167:11)
#73     RenderObject.layout (package:flutter/src/rendering/object.dart:1915:7)
#74     RenderViewportBase.layoutChildSequence (package:flutter/src/rendering/viewport.dart:510:13)
#75     RenderViewport._attemptLayout (package:flutter/src/rendering/viewport.dart:1580:12)
#76     RenderViewport.performLayout (package:flutter/src/rendering/viewport.dart:1489:20)
#77     RenderObject.layout (package:flutter/src/rendering/object.dart:1915:7)
#78     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
#79     RenderObject.layout (package:flutter/src/rendering/object.dart:1915:7)
#80     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
#81     RenderObject.layout (package:flutter/src/rendering/object.dart:1915:7)
#82     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
#83     RenderObject.layout (package:flutter/src/rendering/object.dart:1915:7)
#84     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
#85     RenderObject.layout (package:flutter/src/rendering/object.dart:1915:7)
#86     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
#87     RenderObject.layout (package:flutter/src/rendering/object.dart:1915:7)
#88     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
#89     RenderObject.layout (package:flutter/src/rendering/object.dart:1915:7)
#90     RenderPadding.performLayout (package:flutter/src/rendering/shifted_box.dart:233:12)
#91     RenderObject.layout (package:flutter/src/rendering/object.dart:1915:7)
#92     ChildLayoutHelper.layoutChild (package:flutter/src/rendering/layout_helper.dart:56:11)
#93     RenderFlex._computeSizes (package:flutter/src/rendering/flex.dart:896:45)
#94     RenderFlex.performLayout (package:flutter/src/rendering/flex.dart:931:32)
#95     RenderObject.layout (package:flutter/src/rendering/object.dart:1915:7)
#96     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
#97     RenderObject.layout (package:flutter/src/rendering/object.dart:1915:7)
#98     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
#99     _RenderCustomClip.performLayout (package:flutter/src/rendering/proxy_box.dart:1376:11)
#100    RenderObject.layout (package:flutter/src/rendering/object.dart:1915:7)
#101    RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
#102    RenderObject.layout (package:flutter/src/rendering/object.dart:1915:7)
#103    RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
#104    RenderObject.layout (package:flutter/src/rendering/object.dart:1915:7)
#105    RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
#106    RenderObject._layoutWithoutResize (package:flutter/src/rendering/object.dart:1757:7)
#107    PipelineOwner.flushLayout (package:flutter/src/rendering/object.dart:887:18)
#108    RendererBinding.drawFrame (package:flutter/src/rendering/binding.dart:504:19)
#109    WidgetsBinding.drawFrame (package:flutter/src/widgets/binding.dart:892:13)
#110    RendererBinding._handlePersistentFrameCallback (package:flutter/src/rendering/binding.dart:370:5)
#111    SchedulerBinding._invokeFrameCallback (package:flutter/src/scheduler/binding.dart:1146:15)
#112    SchedulerBinding.handleDrawFrame (package:flutter/src/scheduler/binding.dart:1083:9)
#113    SchedulerBinding._handleDrawFrame (package:flutter/src/scheduler/binding.dart:997:5)
#117    _invoke (dart:ui/hooks.dart:151:10)
#118    PlatformDispatcher._drawFrame (dart:ui/platform_dispatcher.dart:308:5)
#119    _drawFrame (dart:ui/hooks.dart:115:31)
(elided 3 frames from dart:async)
====================================================================================================

推荐答案

这里不需要灵活的小部件..请卸下挠性接头.或者,如果您希望用一个与设备大小相同的大小的框来包装列,并使用expanded代替flexible.

Flutter相关问答推荐

带有可滚动页面(不包括分页区)的Flutter 页面视图

如何在Flutter 中不从getX库中初始化GetxController中的变量

flutter -当使用SingleChildScrollView包装我的列小部件时,它不会填充整个高度

在Flutter 中每次点击按钮时都很难调用自定义函数

如何使页面浏览量达到活动页面所要求的高度?

如何管理枚举类型的阻塞事件?

Android工作室Flutter 热重新加载更新后不工作

无法在 Flutter 项目中安装最新版本的 image_picker

hooks_riverpod 有用途吗

Flutter居中的SizedBox无法居中

通过在父窗口小部件功能上设置状态来浏览屏幕

如何计算 Firestore 集合中的文档数量?

如何停止折线图的抖动

忽略异步函数上的 context.mounted 访问 linting 错误是否安全?

在 Flutter 中使用 HardwareKeyboard 时所有键都没有响应

Flutter 构建方法使用的是旧版本的变量?

我想在一个屏幕上有两个相同区域的列表视图,我该如何设置?

如何做到这一点,当我们在 textified 中输入 ab 然后将 applebanana 显示为一个单词?飘飘然

Flutter audioplayers错误-单击音频按钮时不播放音频

如何在Flutter 的TextSpan中填充背景 colored颜色 ?