Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 选项卡“查看车身颤振”中的导航_Flutter_Dart_Tabbar_Flutter Navigation_Flutter Bottomnavigation - Fatal编程技术网

Flutter 选项卡“查看车身颤振”中的导航

Flutter 选项卡“查看车身颤振”中的导航,flutter,dart,tabbar,flutter-navigation,flutter-bottomnavigation,Flutter,Dart,Tabbar,Flutter Navigation,Flutter Bottomnavigation,该应用程序包含TabBar和BottomNavigationBar。 当我试图在选项卡栏视图的主体内导航时,它会全屏导航 这是我在点击按钮时试图得到的结果- 但我明白了 这里我附上了代码- Widget build(BuildContext context) { return new Scaffold( appBar: new AppBar( title: new Text("Traveler"),

该应用程序包含TabBar和BottomNavigationBar。 当我试图在选项卡栏视图的主体内导航时,它会全屏导航

这是我在点击按钮时试图得到的结果-

但我明白了

这里我附上了代码-

 Widget build(BuildContext context) {
        return new Scaffold(
          appBar: new AppBar(
            title: new Text("Traveler"),
            bottom: new TabBar(controller: _controller, tabs: <Tab>[
              new Tab(text: "NEW"),
              new Tab(text: "HOTELS"),
              new Tab(text: "FOOD"),
              new Tab(text: "FUN"),
            ]),
          ),
          body: new TabBarView(
            controller: _controller,
            children: <Widget>[
              new NewPage(_index),
              new HotelsPage(_index),
              new FoodPage(_index),
              new FunPage(_index),
            ],
          ),
          bottomNavigationBar: new BottomNavigationBar(
              currentIndex: _index,
              onTap: (int _index) {
                setState(() {
                  this._index = _index;
                });
              },
              items: <BottomNavigationBarItem>[
                new BottomNavigationBarItem(
                  icon: new Icon(Icons.home),
                  title: new Text("Home"),
                ),
                new BottomNavigationBarItem(
                  icon: new Icon(Icons.favorite),
                  title: new Text("Favorites"),
                ),
              ]),
        );
      }
    }
    
    class NewPage extends StatelessWidget {
      final int index;
    
      NewPage(this.index);
    
      @override
      Widget build(BuildContext context) {
        return new Center(
          child: RaisedButton(
            onPressed: (){
               Navigator.push(context,MaterialPageRoute(builder: (context)=>InsideTabViewPage()), );
            },
            child: new Text('NewPage, index: $index')),
        );
      }
    }
    
   
小部件构建(构建上下文){
归还新脚手架(
appBar:新的appBar(
标题:新文本(“旅行者”),
底部:新选项卡栏(控制器:\控制器,选项卡:[
新建选项卡(文本:“新建”),
新选项卡(文本:“酒店”),
新选项卡(文本:“食品”),
新选项卡(文本:“乐趣”),
]),
),
正文:新选项卡视图(
控制器:_控制器,
儿童:[
新建页面(_索引),
新建HotelPage(_索引),
新食品包装(_指数),
新FunPage(_索引),
],
),
bottomNavigationBar:新的bottomNavigationBar(
当前索引:_索引,
onTap:(国际索引){
设置状态(){
这个。_索引=_索引;
});
},
项目:[
新海底导航气压计(
图标:新图标(Icons.home),
标题:新文本(“主页”),
),
新海底导航气压计(
图标:新图标(Icons.favorite),
标题:新文本(“收藏夹”),
),
]),
);
}
}
类NewPage扩展了无状态小部件{
最终整数指数;
NewPage(this.index);
@凌驾
小部件构建(构建上下文){
返回新中心(
孩子:升起按钮(
已按下:(){
push(context,materialpage(builder:(context)=>InsideTabViewPage(),);
},
子项:新文本('NewPage,index:$index'),
);
}
}

您可以通过创建一个新的
导航器
小部件(位于主应用程序导航器下方)来实现这一点

以下是测试示例:

import 'package:flutter/material.dart';

void main() {
  runApp(MaterialApp(
      debugShowCheckedModeBanner: false,
      theme: ThemeData.dark().copyWith(
        elevatedButtonTheme: ElevatedButtonThemeData(
            style: ButtonStyle(
          backgroundColor: MaterialStateProperty.all(Colors.blueGrey[800]),
        )),
      ),
      home: MyApp()));
}

//Store this globally
final GlobalKey<NavigatorState> _navKey = GlobalKey<NavigatorState>();

class MyApp extends StatefulWidget {
  MyApp({Key? key}) : super(key: key);

  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> with SingleTickerProviderStateMixin {
  late final TabController _tabController;
  @override
  void initState() {
    _tabController = TabController(length: 2, vsync: this);
    super.initState();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Nested Navigator'),
        bottom: TabBar(
          controller: _tabController,
          tabs: [
            Tab(
              child: Text('First Tab'),
            ),
            Tab(
              child: Text('Second Tab'),
            ),
          ],
        ),
      ),
      bottomNavigationBar: BottomNavigationBar(
        items: [
          BottomNavigationBarItem(icon: Icon(Icons.home), label: 'Home'),
          BottomNavigationBarItem(
              icon: Icon(Icons.favorite), label: 'Favorites'),
        ],
      ),
      body: Navigator(
        key: _navKey,
        onGenerateRoute: (_) => MaterialPageRoute(
          builder: (_) => TabBarView(
            controller: _tabController,
            children: [
              FirstPage(),
              SecondPage(),
            ],
          ),
        ),
      ),
    );
  }
}

class FirstPage extends StatelessWidget {
  const FirstPage({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            Text('First Page'),
            ElevatedButton(
                onPressed: () {
                  _navKey.currentState!.push(
                    MaterialPageRoute(
                      builder: (_) => SubFirstPage(),
                    ),
                  );
                },
                child: Text('Go to Nested Page 1'))
          ],
        ),
      ),
    );
    ;
  }
}

class SecondPage extends StatelessWidget {
  const SecondPage({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            Text('Second Page'),
            ElevatedButton(
              onPressed: () {
                _navKey.currentState!.push(
                  MaterialPageRoute(
                    builder: (_) => SubSecondPage(),
                  ),
                );
              },
              child: Text('Go to Nested Page 2'),
            )
          ],
        ),
      ),
    );
  }
}

class SubFirstPage extends StatelessWidget {
  const SubFirstPage({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('First Nested Page'),
      ),
      body: Center(
        child: Text('From First Page'),
      ),
    );
  }
}

class SubSecondPage extends StatelessWidget {
  const SubSecondPage({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Second Nested Page'),
      ),
      body: Center(
        child: Text('From Second Page'),
      ),
    );
  }
}
导入“包装:颤振/材料.省道”;
void main(){
runApp(材料应用程序)(
debugShowCheckedModeBanner:false,
主题:ThemeData.dark().copyWith(
elevatedButtonTheme:elevatedButtonTheme数据(
样式:钮扣样式(
背景色:MaterialStateProperty.all(Colors.bluegray[800]),
)),
),
主页:MyApp());
}
//在全球范围内存储此信息
最终全局键_navKey=GlobalKey();
类MyApp扩展了StatefulWidget{
MyApp({Key?Key}):超级(Key:Key);
@凌驾
_MyAppState createState()=>\u MyAppState();
}
类_MyAppState使用SingleTickerProviderStateMixin扩展状态{
最后一个TabController\tabu控制器;
@凌驾
void initState(){
_tabController=tabController(长度:2,vsync:this);
super.initState();
}
@凌驾
小部件构建(构建上下文){
返回脚手架(
appBar:appBar(
标题:文本(“嵌套导航器”),
底部:选项卡栏(
控制器:\ tab控制器,
选项卡:[
标签(
子项:文本(“第一个选项卡”),
),
标签(
子项:文本(“第二个选项卡”),
),
],
),
),
底部导航栏:底部导航栏(
项目:[
BottomNavigationBarItem(图标:icon(Icons.home),标签:“home”),
底部导航气压计(
图标:图标(Icons.favorite),标签:“收藏夹”),
],
),
正文:导航器(
键:_navKey,
OnGeneratorOute:()=>MaterialPage路线(
生成器:()=>TabBarView(
控制器:\ tab控制器,
儿童:[
首页(),
第二页(),
],
),
),
),
);
}
}
类FirstPage扩展了无状态小部件{
const FirstPage({Key?Key}):super(Key:Key);
@凌驾
小部件构建(构建上下文){
返回脚手架(
正文:中(
子:列(
mainAxisAlignment:mainAxisAlignment.center,
儿童:[
文本(“第一页”),
升降按钮(
已按下:(){
_navKey.currentState!.push(
材料路线(
生成器:()=>SubFirstPage(),
),
);
},
子项:文本('转到嵌套页1'))
],
),
),
);
;
}
}
类SecondPage扩展了无状态小部件{
const SecondPage({Key?Key}):super(Key:Key);
@凌驾
小部件构建(构建上下文){
返回脚手架(
正文:中(
子:列(
mainAxisAlignment:mainAxisAlignment.center,
儿童:[
文本(“第二页”),
升降按钮(
已按下:(){
_navKey.currentState!.push(
材料路线(
生成器:()=>SubSecondPage(),
),
);
},
子项:文本(“转到嵌套页面2”),
)
],
),
),
);
}
}
类子首页扩展了无状态小部件{
const SubFirstPage({Key?Key}):super(Key:Key);
@凌驾
小部件构建(构建上下文){
返回脚手架(
appBar:appBar(
标题:文本(“第一个嵌套页”),
),
正文:中(
子项:文本('从第一页'),
),
);
}
}
类SubSecondPage扩展了无状态小部件{
const SubSecondPage({Key?Key}):super(Key:Key);
@凌驾
小部件构建(构建上下文){
返回脚手架(
appBar:appBar(
标题:文本(“第二个嵌套页”),
),
正文:中(
子项:文本(“来自第二页”),
),
);
}
}