Flutter 底部导航栏颤振详细信息页面
社区早安 我有下面的界面颤振代码,带有底部导航选项卡,我有两个问题,应用程序如何不能在每次用户单击时导航到状态2,我的另一个问题是,如何在不丢失应用程序每个屏幕上的底部导航选项卡的情况下转到详细信息页面 我已经陷入这个问题好几天了,不知道如何处理颤振细节页面的导航主题Flutter 底部导航栏颤振详细信息页面,flutter,dart,visual-studio-code,Flutter,Dart,Visual Studio Code,社区早安 我有下面的界面颤振代码,带有底部导航选项卡,我有两个问题,应用程序如何不能在每次用户单击时导航到状态2,我的另一个问题是,如何在不丢失应用程序每个屏幕上的底部导航选项卡的情况下转到详细信息页面 我已经陷入这个问题好几天了,不知道如何处理颤振细节页面的导航主题 import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:app/helpers/static-
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:app/helpers/static-tabs.dart';
import 'package:app/pages/first-tab.dart' as first;
import 'package:app/pages/account-tab.dart' as second;
import 'package:app/pages/camara-tab.dart' as third;
import 'package:app/pages/fundaciones-tab.dart' as four;
import 'package:app/pages/noticias-tab.dart' as five;
import 'package:app/helpers/static-tabs.dart';
class MyTabs extends StatefulWidget{
@override
MyTabsState createState() => new MyTabsState();
}
class MyTabsState extends State<MyTabs> with SingleTickerProviderStateMixin{
TabController controller;
int _currentIndex = 0;
GlobalKey globalKey = new GlobalKey(debugLabel: 'btm_app_bar');
final List<Widget> _children =
[
first.FirstPage(),
second.SecondPage(),
third.Third(),
four.FourPage(),
five.Five()
];
@override
void initState(){
super.initState();
controller = new TabController(vsync: this, length: 5);
}
@override
void dispose(){
controller.dispose();
super.dispose();
}
void onTappedBar(int index){
setState(() {
_currentIndex = index;
print (index);
final BottomNavigationBar navigationBar = globalKey.currentWidget;
if (_currentIndex == 2 ){
print ("entra");
navigationBar.onTap(index);
//return;
}
});
}
//Use the navigator like you usually do with .of(context) method
_openDetailsPage(BuildContext context) => Navigator.of(context)
.push(MaterialPageRoute(builder: (context) => StaticTabsPage()));
@override
Widget build(BuildContext context){
SystemChrome.setPreferredOrientations([
DeviceOrientation.portraitUp,
DeviceOrientation.portraitDown,
]);
return new Scaffold(
backgroundColor: Color(0xFFEDF0F6),
appBar: new AppBar(title: new Text("Adoptame"), centerTitle: true, backgroundColor: Colors.green,
),
bottomNavigationBar: ClipRRect(
borderRadius: BorderRadius.only(
topLeft: Radius.circular(30.0),
topRight: Radius.circular(30.0),
),
child: BottomNavigationBar(
onTap: onTappedBar,
type: BottomNavigationBarType.fixed,
items: [
BottomNavigationBarItem(
icon: Icon(
Icons.dashboard,
size: 30.0,
color: Colors.black,
),
title: Text(''),
),
BottomNavigationBarItem(
icon: Icon(
Icons.search,
size: 30.0,
color: Colors.grey,
),
title: Text(''),
),
BottomNavigationBarItem(
icon: Padding(
padding: EdgeInsets.symmetric(horizontal: 5.0, vertical: 10.0),
child: FlatButton(
padding: EdgeInsets.symmetric(vertical: 10.0),
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(30.0),
),
color: Color(0xFF23B66F),
onPressed: () => _openDetailsPage(context),
child: Icon(
Icons.add,
size: 35.0,
color: Colors.white,
),
),
),
title: Text(''),
),
BottomNavigationBarItem(
icon: Icon(
Icons.favorite_border,
size: 30.0,
color: Colors.grey,
),
title: Text(''),
),
BottomNavigationBarItem(
icon: Icon(
Icons.person_outline,
size: 30.0,
color: Colors.grey,
),
title: Text(''),
),
],
),
),
body: _children [_currentIndex] ,
);
}
}
导入“包装:颤振/材料.省道”;
导入“包:flifter/services.dart”;
导入“package:app/helpers/static tabs.dart”;
将“package:app/pages/first tab.dart”作为第一个导入;
将“package:app/pages/account tab.dart”作为第二个导入;
导入“包:app/pages/camara tab.dart”作为第三个;
将“package:app/pages/fundaciones tab.dart”导入为四个;
将“package:app/pages/Notifias tab.dart”导入为5;
导入“package:app/helpers/static tabs.dart”;
类MyTabs扩展StatefulWidget{
@凌驾
MyTabsState createState()=>新建MyTabsState();
}
类MyTabsState使用SingleTickerProviderStateMixin扩展状态{
tab控制器;
int _currentIndex=0;
GlobalKey GlobalKey=新的GlobalKey(debugLabel:'btm_app_bar');
儿童最终名单=
[
first.FirstPage(),
second.SecondPage(),
三,三,,
four.FourPage(),
五、五
];
@凌驾
void initState(){
super.initState();
控制器=新的TabController(vsync:this,长度:5);
}
@凌驾
无效处置(){
controller.dispose();
super.dispose();
}
void onTappedBar(整数索引){
设置状态(){
_currentIndex=索引;
打印(索引);
最终底部导航栏导航栏=globalKey.currentWidget;
如果(_currentIndex==2){
印刷品(“entra”);
navigationBar.onTap(索引);
//返回;
}
});
}
//像通常使用.of(context)方法一样使用导航器
_openDetailsPage(BuildContext上下文)=>Navigator.of(上下文)
.push(materialpage路径(builder:(context)=>StaticTabsPage());
@凌驾
小部件构建(构建上下文){
SystemChrome.setPreferredOrientations([
DeviceOrientation.Up,
DeviceOrientation.down,
]);
归还新脚手架(
背景颜色:颜色(0xFFEDF0F6),
appBar:new appBar(标题:new Text(“采用名称”),centerTitle:true,backgroundColor:Colors.green,
),
底部导航栏:ClipRRect(
borderRadius:仅限borderRadius(
左上:半径。圆形(30.0),
右上角:半径。圆形(30.0),
),
子项:底部导航栏(
onTap:onTappedBar,
类型:BottomNavigationBarType.fixed,
项目:[
底部导航气压计(
图标:图标(
图标。仪表板,
尺寸:30.0,
颜色:颜色,黑色,
),
标题:文本(“”),
),
底部导航气压计(
图标:图标(
Icons.search,
尺寸:30.0,
颜色:颜色。灰色,
),
标题:文本(“”),
),
底部导航气压计(
图标:填充(
填充:边缘组。对称(水平:5.0,垂直:10.0),
孩子:扁平按钮(
填充:边缘设置。对称(垂直:10.0),
形状:圆形矩形边框(
边界半径:边界半径。圆形(30.0),
),
颜色:颜色(0xFF23B66F),
按下:()=>\u openDetailsPage(上下文),
子:图标(
Icons.add,
尺寸:35.0,
颜色:颜色,白色,
),
),
),
标题:文本(“”),
),
底部导航气压计(
图标:图标(
图标。最喜爱的边框,
尺寸:30.0,
颜色:颜色。灰色,
),
标题:文本(“”),
),
底部导航气压计(
图标:图标(
图标。人物轮廓,
尺寸:30.0,
颜色:颜色。灰色,
),
标题:文本(“”),
),
],
),
),
正文:_children[_currentIndex],
);
}
}
非常感谢您的回答
以下是如何在颤振中添加底部导航
import 'package:flutter/material.dart';
void main() => runApp(MyApp());
/// This Widget is the main application widget.
class MyApp extends StatelessWidget {
static const String _title = ' Code Sample';
@override
Widget build(BuildContext context) {
return MaterialApp(
title: _title,
home: MyStatefulWidget(),
);
}
}
class MyStatefulWidget extends StatefulWidget {
MyStatefulWidget({Key key}) : super(key: key);
@override
_MyStatefulWidgetState createState() => _MyStatefulWidgetState();
}
class _MyStatefulWidgetState extends State<MyStatefulWidget> {
int _selectedIndex = 0;
static const List<Widget> _widgetOptions = <Widget>[
ScreenOne(),
ScreenTwo(),
ScreenThree()
];
void _onItemTapped(int index) {
setState(() {
_selectedIndex = index;
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text('BottomNavigationBar Sample'),
),
body: Center(
child: _widgetOptions.elementAt(_selectedIndex),
),
bottomNavigationBar: BottomNavigationBar(
items: const <BottomNavigationBarItem>[
BottomNavigationBarItem(
icon: Icon(Icons.home),
title: Text('Home'),
),
BottomNavigationBarItem(
icon: Icon(Icons.business),
title: Text('Business'),
),
BottomNavigationBarItem(
icon: Icon(Icons.school),
title: Text('School'),
),
],
//handle your selection here
currentIndex: _selectedIndex,
selectedItemColor: Colors.amber[800],
onTap: _onItemTapped,
),
);
}
}
导入“包装:颤振/材料.省道”;
void main()=>runApp(MyApp());
///此小部件是主应用程序小部件。
类MyApp扩展了无状态小部件{
静态常量字符串_title='Code Sample';
@凌驾
小部件构建(构建上下文){
返回材料PP(
标题:_标题,
主页:MyStatefulWidget(),
);
}
}
类MyStatefulWidget扩展了StatefulWidget{
MyStatefulWidget({Key}):超级(Key:Key);
@凌驾
_MyStatefulWidgetState createState()=>\u MyStatefulWidgetState();
}
类_MyStatefulWidgetState扩展状态{
int _selectedIndex=0;
静态常量列表_widgetOptions=[
ScreenOne(),
屏幕二(),
第三幕()
];
void\u未映射(整数索引){
设置状态(){
_selectedIndex=索引;
});
}
@凌驾
小部件构建(构建上下文){
返回脚手架(
appBar:appBar(
标题:常量文本(“底部导航栏示例”),
),
正文:中(
子项:_widgetOptions.elementAt(_selectedIndex),
),
底部导航栏:底部导航栏(
项目:常数[
底部导航气压计(
图标:图标(Icons.home),
标题:文本(“主页”),
),
底部导航气压计(
图标:图标(Icons.business),
标题:文本(“业务”),
),
底部导航气压计(