代码之家  ›  专栏  ›  技术社区  ›  Joe

底部无限像素溢出的renderflex

  •  0
  • Joe  · 技术社区  · 7 年前

    我有一个非常简单的控件,在这里我试图用几个文本字段显示DrodownButton。当这个应用程序在模拟器中运行时,我得到一个错误,说“底部被无限像素溢出”。堆栈跟踪提示了这个问题,并为我提供了一些相关的文档,但是由于对flutter非常陌生,我不确定需要更改什么。我试过所有基于类似错误的问题的建议,但没有任何运气。

    I/flutter (10708): ══╡ EXCEPTION CAUGHT BY RENDERING LIBRARY ╞═════════════════════════════════════════════════════════
    I/flutter (10708): The following assertion was thrown during performLayout():
    I/flutter (10708): RenderIndexedStack object was given an infinite size during layout.
    I/flutter (10708): This probably means that it is a render object that tries to be as big as possible, but it was put
    I/flutter (10708): inside another render object that allows its children to pick their own size.
    I/flutter (10708): The nearest ancestor providing an unbounded width constraint is:
    I/flutter (10708):   RenderFlex#1d3ef relayoutBoundary=up7 NEEDS-LAYOUT NEEDS-PAINT
    I/flutter (10708):   creator: Row ← Padding ← Container ← DefaultTextStyle ← Stack ← Listener ← _GestureSemantics ←
    I/flutter (10708):   RawGestureDetector ← GestureDetector ← Semantics ← DropdownButton<String> ← Column ← ⋯
    I/flutter (10708):   parentData: offset=Offset(0.0, 0.0) (can use size)
    I/flutter (10708):   constraints: BoxConstraints(0.0<=w<=391.4, 0.0<=h<=Infinity)
    I/flutter (10708):   size: MISSING
    I/flutter (10708):   direction: horizontal
    I/flutter (10708):   mainAxisAlignment: spaceBetween
    I/flutter (10708):   mainAxisSize: min
    I/flutter (10708):   crossAxisAlignment: center
    I/flutter (10708):   textDirection: ltr
    I/flutter (10708):   verticalDirection: down
    I/flutter (10708): The nearest ancestor providing an unbounded height constraint is:
    I/flutter (10708):   RenderFlex#bb3f8 relayoutBoundary=up1 NEEDS-LAYOUT NEEDS-PAINT
    I/flutter (10708):   creator: Column ← MediaQuery ← LayoutId-[<_ScaffoldSlot.body>] ← CustomMultiChildLayout ←
    I/flutter (10708):   AnimatedBuilder ← DefaultTextStyle ← AnimatedDefaultTextStyle ← _InkFeatures-[GlobalKey#6a13f ink
    I/flutter (10708):   renderer] ← NotificationListener<LayoutChangedNotification> ← PhysicalModel ←
    I/flutter (10708):   AnimatedPhysicalModel ← Material ← ⋯
    I/flutter (10708):   parentData: offset=Offset(0.0, 0.0); id=_ScaffoldSlot.body (can use size)
    I/flutter (10708):   constraints: BoxConstraints(0.0<=w<=391.4, 0.0<=h<=659.9)
    I/flutter (10708):   size: MISSING
    I/flutter (10708):   direction: vertical
    I/flutter (10708):   mainAxisAlignment: start
    I/flutter (10708):   mainAxisSize: max
    I/flutter (10708):   crossAxisAlignment: center
    I/flutter (10708):   verticalDirection: down
    I/flutter (10708): The constraints that applied to the RenderIndexedStack were:
    I/flutter (10708):   BoxConstraints(unconstrained)
    I/flutter (10708): The exact size it was given was:
    I/flutter (10708):   Size(Infinity, Infinity)
    I/flutter (10708): See https://flutter.io/layout/ for more information.
    

    这里的代码删除了文本字段,以便在出现错误时简洁明了。

    import 'package:flutter/material.dart';
    import 'package:todo_app/model/todo.dart';
    import 'package:todo_app/util/dbhelper.dart';
    import 'package:intl/intl.dart';
    
    class TodoDetail extends StatefulWidget {
      Todo todo;
      TodoDetail(Todo todo) {
        this.todo = todo;
        debugPrint("called ctor with " + todo.title + "!!");
      }
    
      @override
      State<StatefulWidget> createState() => TodoDetailState(todo);
    }
    
    class TodoDetailState extends State {
      final Todo todo;
      TodoDetailState(this.todo);
    
      final _priorites = ["High, Medium", "Low"];
      String _priority = "Low";
      TextEditingController titleController = TextEditingController();
      TextEditingController descriptionController = TextEditingController();
    
      @override
      Widget build(BuildContext context) {
        titleController.text = todo.title;
        descriptionController.text = todo.description;
        TextStyle textStyle = Theme.of(context).textTheme.title;
    
        return Padding(
            padding: EdgeInsets.only(top: 35, right: 10, left: 10),
            child: Scaffold(
                appBar: AppBar(
                  automaticallyImplyLeading: false,
                  title: Text('Add New'), //todo.title
                ),
                body: Column(children: <Widget>[
                  DropdownButton<String>(
                      isExpanded: true,
                      items: _priorites.map((String value) {
                        return DropdownMenuItem<String>(
                            value: value, child: Text(value));
                      }).toList(),
                      style: textStyle,
                      value: "Low",
                      onChanged: null)
                ])));
        //);
      }
    }
    
    1 回复  |  直到 7 年前
        1
  •  1
  •   Kostya Vyrodov    7 年前

    只需尝试在下拉按钮周围用固定宽度包装容器。

    @override
    Widget build(BuildContext context) {
      titleController.text = todo.title;
      descriptionController.text = todo.description;
      TextStyle textStyle = Theme.of(context).textTheme.title;
    
      return Padding(
        padding: EdgeInsets.only(top: 35, right: 10, left: 10),
        child: Scaffold(
          appBar: AppBar(
            automaticallyImplyLeading: false,
            title: Text('Add New'), //todo.title
          ),
          body: Container(
            height: 200,
            child: Column(
              children: <Widget>[
                Container(
                  // don't forget about height
                  height: 200,
                  child: DropdownButton<String>(
                    isExpanded: true,
                    items: _priorites.map((String value) {
                      return DropdownMenuItem<String>(
                          value: value, child: Text(value));
                    }).toList(),
                    style: textStyle,
                    value: "Low",
                    onChanged: null,
                  ),
                )
              ],
            ),
          ),
        ),
      );
    }