我试图将一个文本小部件添加到CustomScrollView中,但是出现类似目标不一样的问题。
这是我的小部件:
@override
Widget build(BuildContext context) {
final double statusBarHeight = MediaQuery.of(context).padding.top;
return Scaffold(
key: scaffoldKey,
body: CustomScrollView(
semanticChildCount: 2,
slivers: <Widget>[
_buildAppBar(context, statusBarHeight),
Text('test')
],
));
}
_buildAppBar方法返回一个SliverAppBar。
我需要使用Padding小部件而不是文本,但是我认为这将是相同的,这是相同的问题。
答案 0 :(得分:7)
我发现了一种更好的方法,可以在CustomScrollView中使用非银条,并使用SliverToBoxAdapter小部件。将您的非Sliver小部件作为SliverToBoxAdapter小部件的子级,完成您的工作。
return Scaffold(
body: CustomScrollView(
slivers: <Widget>[
SliverToBoxAdapter(
child: Stack(
children: <Widget>[
Container(
height: 200,
width: 200,
color: Colors.green,
),
Positioned(
child: Container(color: Colors.yellow),
top: 50,
left: 50,
)
],
),
)
],
),
);
答案 1 :(得分:1)
一旦使用了条子,就需要使用一个条子包装其他非条小部件。由于您想使用Padding
,因此实际上可以利用SliverPadding
小部件,该小部件接受Text
作为其子级。
因此,与其像以前那样拥有Text('test')
,不如将其替换为SliverPadding(child: Text('test))
。
您可能需要注意一些银条小部件。看看here,了解科林·杰克逊(Collin Jackson)接受的答案,以及Slivers, Demystified文章,以更好地理解。
答案 2 :(得分:0)
最佳答案不正确,它会导致断言padding == null
。
@blaneyneil编写了正确的解决方案:用于SliverToBoxAdapter。