如何添加多个 Children 到 flutter scaffold body
How to add multiple Children to flutter scaffold body
我正在尝试将多个 child
写入 flutter
脚手架 body:
标签。
我是 flutter 的新手,我不知道如何在 body 标签内做多个 children。
这是我试过的。
return new Scaffold(
appBar: AppBar(
leading: new Icon(Icons.live_tv),
title: const Text('SnapNews'),
backgroundColor: Colors.red,
actions: <Widget>[
IconButton(
icon: Icon(Icons.help),
onPressed: () {
Navigator.push(
context, MaterialPageRoute(builder: (_) => Help()));
},
),
],
),
body: new ListView.builder(
itemCount: 10,
itemBuilder: (context, index) {
return new GestureDetector(
onTap: () {
print("tapped");
},
child: new Padding(
padding: const EdgeInsets.all(8.0),
child: new Container(
color: Colors.grey,
height: 100.0,
),
),
);
},
),
floatingActionButton: FloatingActionButton.extended(
elevation: 4.0,
icon: const Icon(Icons.camera_enhance),
label: const Text('Snap'),
backgroundColor: Colors.red,
onPressed: () {
Navigator.push(
context,
MaterialPageRoute(builder: (_) => CameraScreen()),
);
},
),
floatingActionButtonLocation: FloatingActionButtonLocation.centerDocked,
bottomNavigationBar: BottomAppBar(
child: new Row(
mainAxisSize: MainAxisSize.max,
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: <Widget>[
IconButton(
icon: Icon(null),
onPressed: () {},
),
IconButton(
icon: Icon(null),
onPressed: () {},
)
],
),
),
);
这会生成如下 GUI:
但是我想在这个ListView
上面加一个Search Bar
如何将另一个 child/children 添加到 body:
标签
谢谢。
您可以将 ListView.builder 放在 ListView 中。
编辑:要使 SearchBar() 不可滚动,将其放在 Column 而不是 ListView 中。
body: Column(
children: [
SearchBar(),
Expanded(
child: ListView.builder(
itemCount: 10,
itemBuilder: (context, index) {
return new GestureDetector(
onTap: () {
print("tapped");
},
child: new Padding(
padding: const EdgeInsets.all(8.0),
child: new Container(
color: Colors.grey,
height: 100.0,
),
),
);
},
),
),
],
),
您需要给 body
一个 Column
小部件作为子部件,然后您可以使用任意数量的子部件。
例子
Scaffold(
body: Column(
children: <Widget>[
//all the children widgets that you need
],
),
),
推荐的方法是将搜索栏放在 title
内的 AppBar
小部件内。现在你正在使用这个 title: const Text('SnapNews'),
所以你可以做的是在 Text('SnapNes')
小部件和搜索栏之间切换 TextField
小部件。在 AppBar 的 actions
中放一个 search button
和一个 cancel button
以获得所需的效果。例如:
bool isSearching = false;
appBar: AppBar(
title: !isSearching
? Text('SnapNews')
: TextField(
onChanged: (value) {
// search logic
},
style: TextStyle(color: Colors.white),
decoration: InputDecoration(
icon: Icon(
Icons.search,
color: Colors.white,
),
hintText: "Search News Here",
hintStyle: TextStyle(color: Colors.white)),
),
actions: <Widget>[
isSearching
? IconButton(
icon: Icon(Icons.cancel),
onPressed: () {
setState(() {
this.isSearching = false;
});
},
)
: IconButton(
icon: Icon(Icons.search),
onPressed: () {
setState(() {
this.isSearching = true;
});
},
)
],
),
检查以下内容link.
我正在尝试将多个 child
写入 flutter
脚手架 body:
标签。
我是 flutter 的新手,我不知道如何在 body 标签内做多个 children。 这是我试过的。
return new Scaffold(
appBar: AppBar(
leading: new Icon(Icons.live_tv),
title: const Text('SnapNews'),
backgroundColor: Colors.red,
actions: <Widget>[
IconButton(
icon: Icon(Icons.help),
onPressed: () {
Navigator.push(
context, MaterialPageRoute(builder: (_) => Help()));
},
),
],
),
body: new ListView.builder(
itemCount: 10,
itemBuilder: (context, index) {
return new GestureDetector(
onTap: () {
print("tapped");
},
child: new Padding(
padding: const EdgeInsets.all(8.0),
child: new Container(
color: Colors.grey,
height: 100.0,
),
),
);
},
),
floatingActionButton: FloatingActionButton.extended(
elevation: 4.0,
icon: const Icon(Icons.camera_enhance),
label: const Text('Snap'),
backgroundColor: Colors.red,
onPressed: () {
Navigator.push(
context,
MaterialPageRoute(builder: (_) => CameraScreen()),
);
},
),
floatingActionButtonLocation: FloatingActionButtonLocation.centerDocked,
bottomNavigationBar: BottomAppBar(
child: new Row(
mainAxisSize: MainAxisSize.max,
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: <Widget>[
IconButton(
icon: Icon(null),
onPressed: () {},
),
IconButton(
icon: Icon(null),
onPressed: () {},
)
],
),
),
);
这会生成如下 GUI:
但是我想在这个ListView
Search Bar
如何将另一个 child/children 添加到 body:
标签
谢谢。
您可以将 ListView.builder 放在 ListView 中。
编辑:要使 SearchBar() 不可滚动,将其放在 Column 而不是 ListView 中。
body: Column(
children: [
SearchBar(),
Expanded(
child: ListView.builder(
itemCount: 10,
itemBuilder: (context, index) {
return new GestureDetector(
onTap: () {
print("tapped");
},
child: new Padding(
padding: const EdgeInsets.all(8.0),
child: new Container(
color: Colors.grey,
height: 100.0,
),
),
);
},
),
),
],
),
您需要给 body
一个 Column
小部件作为子部件,然后您可以使用任意数量的子部件。
例子
Scaffold(
body: Column(
children: <Widget>[
//all the children widgets that you need
],
),
),
推荐的方法是将搜索栏放在 title
内的 AppBar
小部件内。现在你正在使用这个 title: const Text('SnapNews'),
所以你可以做的是在 Text('SnapNes')
小部件和搜索栏之间切换 TextField
小部件。在 AppBar 的 actions
中放一个 search button
和一个 cancel button
以获得所需的效果。例如:
bool isSearching = false;
appBar: AppBar(
title: !isSearching
? Text('SnapNews')
: TextField(
onChanged: (value) {
// search logic
},
style: TextStyle(color: Colors.white),
decoration: InputDecoration(
icon: Icon(
Icons.search,
color: Colors.white,
),
hintText: "Search News Here",
hintStyle: TextStyle(color: Colors.white)),
),
actions: <Widget>[
isSearching
? IconButton(
icon: Icon(Icons.cancel),
onPressed: () {
setState(() {
this.isSearching = false;
});
},
)
: IconButton(
icon: Icon(Icons.search),
onPressed: () {
setState(() {
this.isSearching = true;
});
},
)
],
),
检查以下内容link.