底部溢出 418 像素的 RenderFlex

Posted

技术标签:

【中文标题】底部溢出 418 像素的 RenderFlex【英文标题】:A RenderFlex overflowed by 418 pixels on the bottom 【发布时间】:2020-09-30 01:38:44 【问题描述】:

在此之前,一切都在Container中,没有任何问题,但是动画出现错误。谁能帮忙?)

return AnimatedContainer(
          curve: Curves.easeInCirc,
          duration: Duration(milliseconds: 200),
          height: _heightWidget,
          decoration: isTaped
              ? BoxDecoration(
                  border: Border(
                    bottom: BorderSide(
                        width: 0.0, color: Color.fromRGBO(131, 134, 163, 0.52)),
                  ),
                )
              : BoxDecoration(
                  border: Border(
                    bottom: BorderSide(
                        width: 1.0, color: Color.fromRGBO(131, 134, 163, 0.52)),
                  ),
                ),
          child: Expanded(
            child: Column(
              children: <Widget>[
                Row(
                  children: <Widget>[
                    Container(
                      height: 43.0,
                      width: 60.0,
                      color: widget.dateBackgroundColor != null
                          ? widget.dateBackgroundColor
                          : Colors.green,
                      child: Center(
                        child: MaterialButton(
                          onPressed: () 
                            _pageController.previousPage(
                              duration: widget.pageChangeDuration != null
                                  ? widget.pageChangeDuration
                                  : Duration(microseconds: 500),
                              curve: Curves.easeIn,
                            );
                          ,
                          child: Icon(
                            widget.backwardIcon == null
                                ? Icons.arrow_back
                                : widget.backwardIcon,
                            color: Colors.black,
                          ),
                        ),
                      ),
                    ),
                    Expanded(
                      child: Container(
                        height: 43.0,
                        color: widget.dateBackgroundColor != null
                            ? widget.dateBackgroundColor
                            : Colors.red,
                        child: Padding(
                          padding: EdgeInsets.only(top: 0.0, bottom: 0.0),
                          child: Center(
                              child: Row(
                            mainAxisAlignment: MainAxisAlignment.center,
                            children: <Widget>[
                              GestureDetector(
                                  onTap: () 
                                    setState(() 
                                      isTaped = !isTaped;
                                      isTaped
                                          ? _heightWidget = 464.0
                                          : _heightWidget = 44.0;
                                    );
                                  ,
                                  child: Row(
                                    children: <Widget>[
                                      Image.asset('assets/icons/calendar.png'),
                                      SizedBox(
                                        width: 10.0,
                                      ),
                                      Text(
                                        checkDateToday(DateFormat(
                                                widget.displayDateFormat == null
                                                    ? widget.displayDateFormat
                                                    : "dd.MM.yyyy")
                                            .format(_selectedDate)),
                                        style: widget.dateStyle != null
                                            ? widget.dateStyle
                                            : TextStyle(
                                                color: Colors.black,
                                                fontSize: 14.0,
                                                fontWeight: FontWeight.w100,
                                              ),
                                      ),
                                    ],
                                  )),
                            ],
                          )),
                        ),
                      ),
                    ),
                    Container(
                      height: 43.0,
                      width: 60.0,
                      color: widget.dateBackgroundColor != null
                          ? widget.dateBackgroundColor
                          : Colors.red,
                      child: Center(
                        child: MaterialButton(
                          onPressed: () 
                            _pageController.nextPage(
                              duration: widget.pageChangeDuration != null
                                  ? widget.pageChangeDuration
                                  : Duration(milliseconds: 700),
                              curve: Curves.easeIn,
                            );
                          ,
                          child: Icon(
                            widget.forwardIcon == null
                                ? Icons.arrow_forward
                                : widget.forwardIcon,
                            color: Colors.black,
                          ),
                        ),
                      ),
                    ),
                  ],
                ),
                Container(
                    decoration: BoxDecoration(
                      border: isTaped
                          ? Border(
                              top: BorderSide(
                                  width: 1.0,
                                  color: Color.fromRGBO(131, 134, 163, 0.52)),
                            )
                          : null,
                    ),
                    padding: EdgeInsets.only(left: 0, right: 0),
                    child: isTaped
                        ? Column(
                            children: <Widget>[
                              SizedBox(height: 12.0),
                              Container(
                                child: SizedBox(
                                    height: 21.0,
                                    child: GridView.count(
                                      crossAxisCount: 7,
                                      primary: false,
                                      children: weekDaysOnTop,
                                    )),
                              ),
                              Row(
                                children: <Widget>[
                                  Container(
                                      margin: EdgeInsets.only(
                                          left: 25, top: 10, bottom: 0),
                                      child: Text(
                                        _currentMonth,
                                        style: TextStyle(
                                          color: Color.fromRGBO(83, 83, 83, 1),
                                          fontWeight: FontWeight.bold,
                                          fontSize: 24.0,
                                        ),
                                      )),
                                ],
                              ),
                              Container(
                                child: _calendarCarousel,
                              ),
                              Row(
                                children: <Widget>[
                                  Container(
                                      margin: EdgeInsets.only(
                                          left: 25, top: 10, bottom: 0),
                                      child: Text(
                                        _nextMonth,
                                        style: TextStyle(
                                          color: Color.fromRGBO(83, 83, 83, 1),
                                          fontWeight: FontWeight.bold,
                                          fontSize: 24.0,
                                        ),
                                      )),
                                ],
                              ),
                            ],
                          )
                        : null),
                Expanded(
                    child: PageView.builder(
                        controller: _pageController,
                        scrollDirection: Axis.horizontal,
                        itemCount: _totalPages,
                        onPageChanged: (direction) => _onPageChange(direction),
                        itemBuilder: (context, index) 
                          return _buildPage(index);
                        )),
              ],
            ),
          ),
        );

════════小部件库捕获的异常═════════════════════════════════════ ═ 应用父数据时抛出以下断言: ParentDataWidget 使用不正确。

ParentDataWidget Expanded(flex: 1) 想要将 FlexParentData 类型的 ParentData 应用于 RenderObject,该 RenderObject 已设置为接受不兼容类型 BoxParentData 的 ParentData。

通常,这意味着 Expanded 小部件具有错误的祖先 RenderObjectWidget。通常,扩展小部件直接放置在 Flex 小部件中。 有问题的 Expanded 当前放置在 Padding 小部件中。

接收到不兼容父数据的 RenderObject 的所有权链是: Column ← Expanded ← Padding ← DecoratedBox ← ConstrainedBox ← Container ← AnimatedContainer ← ScrollingDayCalendar ← DecoratedBox ← ConstrainedBox ← ⋯

【问题讨论】:

【参考方案1】:

您不能在 AnimatedContainer 中使用扩展,因为它是扩展 Row、Column 或 Flex 的子级的小部件,以便子级填充可用空间。尝试在列内使用它。并用mainAxisSize: MainAxisSize.max标记列

【讨论】:

我删除了所有展开的小部件,但这无济于事。也许问题是别的( 你的代码真的很难复制。请尝试清理它,添加缺失的部分并更新它,以便我们更好地帮助您

以上是关于底部溢出 418 像素的 RenderFlex的主要内容,如果未能解决你的问题,请参考以下文章

如何解决无限像素溢出的底部?

颤振 - 底部溢出像素数

一个 RenderFlex 在底部溢出了 729 个像素。在 SingleChildScrollView

我收到此错误 A renderFlex 在底部溢出 100 像素

一个 RenderFlex 在底部问题上溢出了 40 个像素

除非用户向上滚动,否则保持溢出 div 滚动到底部