Flutter 如何使用底部导航器&x27;OnTap&x27;飘飘然
我有一个应用程序,其中我有一个列表(例如新闻)。在底部工具栏中,我有一个“上一条”和“下一条”按钮。我想做的是,如果我在**第三条新闻上,单击“上一条”按钮,它将进入第二条新闻。**我已经制作了工具栏,并将在下面附加代码。为了更好地理解,我添加了完整的代码。谢谢Flutter 如何使用底部导航器&x27;OnTap&x27;飘飘然,flutter,flutter-layout,Flutter,Flutter Layout,我有一个应用程序,其中我有一个列表(例如新闻)。在底部工具栏中,我有一个“上一条”和“下一条”按钮。我想做的是,如果我在**第三条新闻上,单击“上一条”按钮,它将进入第二条新闻。**我已经制作了工具栏,并将在下面附加代码。为了更好地理解,我添加了完整的代码。谢谢 class Newsdetail extends StatefulWidget { String value_image, value_description, value_title; int index; Newsd
class Newsdetail extends StatefulWidget {
String value_image, value_description, value_title;
int index;
Newsdetail(
{Key key,
@required this.value_image,
this.value_description,
this.value_title,
this.index})
: super(key: key);
@override
_newsdetail createState() => _newsdetail();
}
class _newsdetail extends State<Newsdetail> {
int _currentindex=0;
_newsdetail();
var tabs =[];
loadyourNews() async {
setState(() {
tabs = [
Container(
child: SingleChildScrollView(
scrollDirection: Axis.vertical,
child: Column(
children: <Widget>[
Padding(padding: const EdgeInsets.fromLTRB(5.0, 5.0, 5.0, 10.0),
child: Row(
children: <Widget>[
Expanded(child:
Image.network(widget.value_image))
],
),
),
Padding(
padding: const EdgeInsets.all(8.0),
child: Row(
children: <Widget>[
Expanded(
child: Row(
children: <Widget>[
IconButton(
icon: Image.asset('images/facebook.png',),
padding: EdgeInsets.all(0.0),
onPressed: () {
_openFacebook();
}),
IconButton(
icon: Image.asset('images/twitter.png',),
padding: EdgeInsets.all(0.0),
onPressed: () {
_openTwitter();
},
),
IconButton(
icon: Image.asset(
'images/whatsappicon.png', width: 180.0,
height: 180.0,),
padding: EdgeInsets.all(4.0),
onPressed: () {
_openWhatsapp();
},
)
],
),
),
],
),
),
Padding(
padding: const EdgeInsets.fromLTRB(15.0, 5.0, 10.0, 10.0),
child: Row(
children: <Widget>[
Expanded(
child: Text(
widget.value_title,
style: TextStyle(
fontSize: 22.0, fontWeight: FontWeight.bold),
),
),
],
),
),
Padding(
padding: const EdgeInsets.fromLTRB(15.0, 5.0, 10.0, 10.0),
child: Row(
children: <Widget>[
Expanded(
child: Text(
widget.value_description,
style: TextStyle(fontSize: 20.0),
)),
],
),
),
],
),
),
)
];
});
}
@override
void initState() {
super.initState();
loadyourNews();
}
@override
Widget build(BuildContext context) {
// TODO: implement build
return Scaffold(
appBar: AppBar(
title: Text(''),
backgroundColor: Color(0xFF125688),
actions: <Widget>[
Padding(
padding: const EdgeInsets.fromLTRB(0,0,5.0,0),
child: SizedBox(
width: 30,
child: FlatButton(
padding: EdgeInsets.all(0),
onPressed: (){},
child: Text('A+',style: TextStyle(
fontSize: 22.0,color: Colors.white
),))),
),
Padding(
padding: EdgeInsets.fromLTRB(0,0,38.0,0),
child: SizedBox(
width: 30,
child:FlatButton(
padding: EdgeInsets.all(0),
onPressed: (){},
child: Text('A-',style: TextStyle(
fontSize: 15.0,color: Colors.white
),),
)),
)
],
),
body: tabs[_currentindex],
bottomNavigationBar:BottomNavigationBar(
currentIndex: _currentindex,
backgroundColor: Color(0xFF125688),
items: [
BottomNavigationBarItem(
icon: Icon(Icons.arrow_back),
title: Text('Previous',style: TextStyle(
color: Colors.white
),),
backgroundColor: Colors.white,
),
BottomNavigationBarItem(
icon: Icon(Icons.arrow_forward),
title: Text('Next',style: TextStyle(
color: Colors.white
),),
backgroundColor: Colors.white,
),
],
onTap: (index){
setState(() {
if (index == 0) {
_currentindex = (_currentindex - 1) % tabs.length;
if (_currentindex < 0) _currentindex += _currentindex;
} else
_currentindex = (_currentindex + 1) % tabs.length;
});
},
),
);
}
class Newsdetail扩展了StatefulWidget{
字符串值\图像、值\描述、值\标题;
整数指数;
新闻详情(
{键,
@需要此.value\u图像,
这是你的描述,
这个.value_标题,
此文件(索引})
:super(key:key);
@凌驾
_newsdetail createState()=>\u newsdetail();
}
类newsdetail扩展了状态{
int _currentindex=0;
_newsdetail();
var标签=[];
loadyourNews()异步{
设置状态(){
制表符=[
容器(
子:SingleChildScrollView(
滚动方向:轴垂直,
子:列(
儿童:[
填充(填充:LTRB(5.0,5.0,5.0,10.0)中的常量边集),
孩子:排(
儿童:[
扩展(儿童:
Image.network(widget.value\u Image))
],
),
),
填充物(
填充:常数边集全部(8.0),
孩子:排(
儿童:[
扩大(
孩子:排(
儿童:[
图标按钮(
图标:Image.asset('images/facebook.png',),
填充:所有边缘设置(0.0),
已按下:(){
_openFacebook();
}),
图标按钮(
图标:Image.asset('images/twitter.png',),
填充:所有边缘设置(0.0),
已按下:(){
_openTwitter();
},
),
图标按钮(
图标:Image.asset(
'images/whatsappicon.png',宽度:180.0,
高度:180.0,),,
填充:所有边缘设置(4.0),
已按下:(){
_openWhatsapp();
},
)
],
),
),
],
),
),
填充物(
填充:LTRB(15.0,5.0,10.0,10.0)中的常数边集,
孩子:排(
儿童:[
扩大(
子:文本(
widget.value\u标题,
样式:TextStyle(
fontSize:22.0,fontWeight:fontWeight.bold),
),
),
],
),
),
填充物(
填充:LTRB(15.0,5.0,10.0,10.0)中的常数边集,
孩子:排(
儿童:[
扩大(
子:文本(
widget.value\u说明,
样式:TextStyle(fontSize:20.0),
)),
],
),
),
],
),
),
)
];
});
}
@凌驾
void initState(){
super.initState();
加载您的新闻();
}
@凌驾
小部件构建(构建上下文){
//TODO:实现构建
返回脚手架(
appBar:appBar(
标题:文本(“”),
背景颜色:颜色(0xFF125688),
行动:[
填充物(
填充:LTRB(0,0,5.0,0)中的常数边集,
孩子:大小盒子(
宽度:30,
孩子:扁平按钮(
填充:边缘集。全部(0),
按下:(){},
子项:Text('A+',样式:TextStyle(
字体大小:22.0,颜色:Colors.white
),))),
),
填充物(
填充:来自LTRB(0,0,38.0,0)的边缘设置,
孩子:大小盒子(
宽度:30,
孩子:扁平按钮(
填充:边缘集。全部(0),
按下:(){},
子项:Text('A-',样式:TextStyle(
字体大小:15.0,颜色:Colors.white
),),
)),
)
],
),
正文:制表符[_currentindex],
底部导航栏:底部导航栏(
currentIndex:_currentIndex,
背景颜色:颜色(0xFF125688),
项目:[
底部导航气压计(
图标:图标(图标。箭头返回),
标题:文本(“上一页”),样式:TextStyle(
颜色:颜色。白色
),),
背景颜色:Colors.white,
),
底部导航气压计(
图标:图标(图标。向前箭头),
标题:文本(“下一个”,样式:TextStyle)(
颜色:颜色。白色
),),
背景颜色:Colors.white,
),
],
onTap:(索引){
设置状态(){
如果(索引==0){
_currentindex=(_currentindex-1)%tabs.length;
如果(_currentindex<0)_currentindex+=_currentindex;
}否则
_currentindex=(_currentindex+1)%tabs.length;
});
},
),
);
}
分别使用Navigator.push和Navigator.pop作为“下一步”和“上一步”按钮。下面是一个示例,说明如何使用页面视图
:
class PageViewScaffoldIssue extends StatefulWidget {
@override
_PageViewScaffoldIssueState createState() => _PageViewScaffoldIssueState();
}
class _PageViewScaffoldIssueState extends State<PageViewScaffoldIssue> {
PageController _pageController = PageController();
List<String> _stringList = [
'Page 1',
'Page 2',
'Page 3',
];
@override
Widget build(BuildContext context) {
return Column(
children: <Widget>[
Expanded(
child: PageView(
controller: _pageController,
children: _stringList.map((item) => NewsArticle(article: item,)).toList(),
),
),
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: <Widget>[
RaisedButton.icon(
onPressed: () => _pageController.previousPage(duration: Duration(milliseconds: 400), curve: Curves.easeInOut),
icon: Icon(Icons.arrow_back),
label: Text('Previous'),
),
RaisedButton.icon(
onPressed: () => addArticle(),
icon: Icon(Icons.add),
label: Text('Add'),
),
RaisedButton.icon(
onPressed: () => _pageController.nextPage(duration: Duration(milliseconds: 400), curve: Curves.easeInOut),
icon: Icon(Icons.arrow_forward),
label: Text('Next'),
),
],
)
],
);
}
void addArticle(){
setState(() {
_stringList.add('Page ${_stringList.length+1}');
});
}
}
class NewsArticle extends StatelessWidget {
final String article;
NewsArticle({
@required this.article,
});
@override
Widget build(BuildContext context) {
return Center(
child: Text(this.article),
);
}
}
class PageViewScaffoldIssue扩展StatefulWidget{
@凌驾
_PageViewScaffoldSussetate createState()=>\u PageViewScaffoldSussetate();
}
类_页面视图脚手架状态扩展{
PageController_PageController=PageController();
列表_stringList=[
“第1页”,
“第2页”,
“第3页”,
];
@凌驾
小装置