我在使用列表视图时

时间:2019-07-01 15:50:18

标签: flutter flutter-layout flutter-listview

在我的应用程序的这一部分中,我有ListView,当我运行应用程序时出现此错误,并且无法解决该问题:

Scaffold(
  body: Directionality(
textDirection: TextDirection.rtl,
child: Container(
  child: StreamBuilder(
    stream: globals.database.ticketsDao.getTicketsStream(),
    builder: (BuildContext context, AsyncSnapshot<List<Tickets>> snapshot) {
      if (snapshot.hasData) {
        return Column(
          children: <Widget>[
            Expanded(
              child: ListView.separated(
                  itemBuilder: (context, index) {
                    return ListTile(
                      title: Flexible(
                        child: Text(
                          snapshot.data[index].subject,
                          style: Theme.of(context).textTheme.caption.copyWith(fontFamily: 'IranSansBold'),
                        ),
                      ),
                      subtitle: Text(
                        snapshot.data[index].description,
                        style: Theme.of(context).textTheme.caption.copyWith(fontFamily: 'IranSansLight'),
                      ),
                    );
                  },
                  separatorBuilder: (context, index) {
                    return Divider();
                  },
                  itemCount:  snapshot.data.length),
            ),
          ],
        );
      } else {
        return Container(
            child: Center(
          child: Text(
            Strings.notAnyTickets,),
          ),
        ));
      }
    },
  ),
),
));

错误:

  

══╡小工具图书馆的例外情况提示   ╞═════════════════════════════════════════════════ ══════════   在建立DefaultTextStyle(debugLabel:   ((englishLike subhead 2014).merge(blackMountainView

     

subhead))。copyWith,继承:false,颜色:Color(0xdd000000),族:   Roboto,尺寸:16.0,重量:400,基线:字母,装饰:   TextDecoration.none,softWrap:以框宽包装,溢出:   剪辑):不正确使用ParentDataWidget。

     

灵活的窗口小部件必须是   直接放置在Flex小部件中。柔韧性(无深度,柔韧性:1,   脏)具有Flex祖先,但它们之间还有其他小部件:    -_ListTile

     
      
  • 填充(padding:EdgeInsets(16.0,0.0,16.0,0.0))
  •   
  • 语义(容器:false,属性:SemanticsProperties,已选择:false,标签:null,值:null,提示:null,hintOverrides:   空)

  •   
  • 监听器(侦听器:[向下],行为:不透明)

  •   
  • _GestureSemantics
  •   
  • Listener(侦听器:,行为:半透明)
  •   
  • RepaintBoundary
  •   
  • IndexedSemantics(index:0)
  •   
  • KeepAlive(keepAlive:false)
  •   
  • SliverList(代表:SliverChildBuilderDelegate#6802e(估计子计数:19))

  •   
  • SliverPadding(padding:EdgeInsets(0.0,0.0,0.0,50.0))

  •   
  • 视口(axisDirection:向下,锚点:0.0,偏移量:ScrollPositionWithSingleContext#c95ba(偏移量:   0.0,范围:null..null,视口:335.0,ScrollableState,AlwaysScrollableScrollPhysics-> ClampingScrollPhysics,   IdleScrollActivity#05a39,ScrollDirection.idle))
  •   
  • IgnorePointer- [GlobalKey#a3d1a](忽略:false,忽略语义:false)

  •   
  • 语义(容器:false,属性:SemanticsProperties,标签:空,值:空,提示:空,hintOverrides:空)

  •   
  • Listener(侦听器:[向下],行为:不透明)
  •   
  • _GestureSemantics

  •   
  • Listener(侦听器:[信号],行为:deferToChild)

  •   
  • _ScrollSemantics- [GlobalKey#7cd1b]
  •   
  • RepaintBoundary
  •   
  • CustomPaint
  •   
  • RepaintBoundary
  •   
  • Expanded(flex:1)这些小部件不能介于Flex及其Flex之间。违规行为的母公司的所有权链   灵活的是:DefaultTextStyle←AnimatedDefaultTextStyle←   _ListTile←MediaQuery←填充←SafeArea←语义←侦听器←__GestureSemantics←RawGestureDetector←⋯
  •   

2 个答案:

答案 0 :(得分:1)

Flexible Widgets必须是Expanded或Flex Widget的直接子代。

在您的情况下,您正在将Flexible用作ListTile小部件的一部分,而不是合适的父级。

柔性小部件必须直接放置在Flex小部件内部。

Flexible具有Flex祖先,但它们之间还有其他小部件:-_ListTile

答案 1 :(得分:1)

出现此错误是因为Flexible小部件必须是RowColumnFlex的后代,

使用Flexible小部件使RowColumnFlex的子级可以灵活扩展以填充主轴上的可用空间(例如, Row水平放置或Column水平放置)

解决上述问题有两种方法,

1:将Flexible小部件移到flex小部件内。下面的例子

ListView.separated(
   itemBuilder: (context, index) {
   return Container(
       height: 50,
       child: Column(
         mainAxisAlignment: MainAxisAlignment.end,
         children: <Widget>[
           Flexible(child: Text('Title')),
           Flexible(child: Text("Sub Title"))
         ],
       ),
     );
   },
separatorBuilder: (context, index) {
return Divider();
},
itemCount:  snapshot.data.length)

2:删除Flexible小部件

ListTile(
 title: Text(
 snapshot.data[index].firstAndLastName,
 style: Theme.of(context).textTheme.caption.copyWith(fontFamily: 'IranSansBold'),
),
subtitle: Text(
snapshot.data[index].firstAndLastName,
style: Theme.of(context).textTheme.caption.copyWith(fontFamily: 
'IranSansLight'),
  ),
);