在我的应用程序的这一部分中,我有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←⋯
答案 0 :(得分:1)
Flexible Widgets必须是Expanded或Flex Widget的直接子代。
在您的情况下,您正在将Flexible用作ListTile小部件的一部分,而不是合适的父级。
柔性小部件必须直接放置在Flex小部件内部。
Flexible具有Flex祖先,但它们之间还有其他小部件:-_ListTile
答案 1 :(得分:1)
出现此错误是因为Flexible
小部件必须是Row
,Column
或Flex
的后代,
使用Flexible
小部件使Row
,Column
或Flex
的子级可以灵活扩展以填充主轴上的可用空间(例如, 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'),
),
);