Android 如何将底部导航添加到颤振应用程序,而不将其传递到Material应用程序中的home参数

Android 如何将底部导航添加到颤振应用程序,而不将其传递到Material应用程序中的home参数,android,flutter,dart,Android,Flutter,Dart,我想使用home参数加载不同的屏幕,但我使用它进行底部导航,是否有一种方法我仍然可以加载导航栏,但将其他内容传递给home参数,我的代码在下面,我已经尝试了所有方法 import 'package:flutter/material.dart'; import 'package:hotel_search/home_page.dart'; import 'package:hotel_search/splash.dart'; import 'package:flutter/services.dart'

我想使用home参数加载不同的屏幕,但我使用它进行底部导航,是否有一种方法我仍然可以加载导航栏,但将其他内容传递给home参数,我的代码在下面,我已经尝试了所有方法

import 'package:flutter/material.dart';
import 'package:hotel_search/home_page.dart';
import 'package:hotel_search/splash.dart';
import 'package:flutter/services.dart';
import 'package:hotel_search/common/theme.dart';
import 'package:flutter_svg/flutter_svg.dart';
import 'package:hotel_search/start.dart';
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:firebase_core/firebase_core.dart';
import 'package:hotel_search/bookings.dart';
import 'package:hotel_search/account.dart';
import 'package:provider/provider.dart';
import 'package:hotel_search/model.dart';





void main()async{
  WidgetsFlutterBinding.ensureInitialized();
  await Firebase.initializeApp();
  runApp(MyApp());
}

 

class MyApp extends StatefulWidget {
  @override
  MyAppState createState() =>  MyAppState();
}

class  MyAppState extends State< MyApp>
    with TickerProviderStateMixin {
  // This widget is the root of your application.
    TabController _controller;
  final List<Widget> tabBarScreens = [
    HomePage(),
    BookScreen(),
    Dashboard(),
     
  ];

 @override
  void initState() {
    super.initState();
    _controller = TabController(
        initialIndex: 0, length: tabBarScreens.length, vsync: this);
  }

  @override
  void dispose() {
    _controller.dispose();
    super.dispose();
  }
   bool ready = false;

    @override
  Widget build(BuildContext context) {
     SystemChrome.setSystemUIOverlayStyle(SystemUiOverlayStyle(
        statusBarColor: Colors.black.withAlpha(50),
        statusBarIconBrightness: Brightness.light));
    final themeData = HotelConceptThemeProvider.get();
     

  return ChangeNotifierProvider<MyModel>(   
  
  
  create: (context) => MyModel(),
  child: MaterialApp(
      title: 'Hotel Search',
      debugShowCheckedModeBanner: false,
      theme: themeData,
      home: Scaffold(
        backgroundColor: themeData.scaffoldBackgroundColor,
        body: TabBarView(
          controller: _controller,
          children: tabBarScreens,
          physics: NeverScrollableScrollPhysics(),
        ),
        bottomNavigationBar: TabBar(
          controller: _controller,
          indicatorSize: TabBarIndicatorSize.label,
          indicatorColor: Colors.transparent,
          isScrollable: false,
          tabs: [
            _buildTabIcon("img/tab_bar_home.svg", 0, themeData),
            _buildTabIcon("img/mooo.svg", 1, themeData),
             _buildTabIcon("img/tab_bar_profile.svg", 2, themeData),
          ],
          onTap: (index) {
            setState(() {});
          },
        ),

         
        ),
      ));
    
  }
   Widget _buildTabIcon(String assetName, int index, ThemeData themeData) {
    return Tab(
      icon: SvgPicture.asset(
        assetName,
        color: index == _controller.index
            ? Color(0xff008d4b)
            : themeData.primaryColorLight,
      ),
    );
  }
}

  
导入“包装:颤振/材料.省道”;
导入“套餐:酒店搜索/主页.dart”;
导入“包:hotel_search/splash.dart”;
导入“包:flifter/services.dart”;
导入“package:hotel_search/common/theme.dart”;
导入“package:flatter_svg/flatter_svg.dart”;
导入“包:hotel_search/start.dart”;
导入“包:cloud_firestore/cloud_firestore.dart”;
导入“包:firebase_core/firebase_core.dart”;
导入“套餐:酒店搜索/预订.dart”;
导入“package:hotel_search/account.dart”;
导入“包:provider/provider.dart”;
导入“包:hotel_search/model.dart”;
void main()异步{
WidgetsFlutterBinding.ensureInitialized();
等待Firebase.initializeApp();
runApp(MyApp());
}
类MyApp扩展了StatefulWidget{
@凌驾
MyAppState createState()=>MyAppState();
}
类MyAppState扩展状态
使用TickerProviderStateMixin{
//此小部件是应用程序的根。
TabController\u控制器;
最终列表选项卡栏屏幕=[
首页(),
书架(),
仪表板(),
];
@凌驾
void initState(){
super.initState();
_控制器=选项卡控制器(
initialIndex:0,长度:tabBarScreens.length,vsync:this);
}
@凌驾
无效处置(){
_controller.dispose();
super.dispose();
}
bool ready=false;
@凌驾
小部件构建(构建上下文){
SystemChrome.setSystemUIOverlayStyle(SystemUiOverlayStyle(
statusBarColor:颜色。黑色。带Alpha(50),
statusBarIconBrightness:Brightness.light));
最终主题数据=hotelconcepthemeProvider.get();
返回ChangeNotifierProvider(
create:(context)=>MyModel(),
孩子:MaterialApp(
标题:“酒店搜索”,
debugShowCheckedModeBanner:false,
主题:主题数据,
家:脚手架(
backgroundColor:themeData.scaffoldBackgroundColor,
正文:选项卡视图(
控制器:_控制器,
孩子们:tabBarScreens,
物理学:NeverscrollableScroll物理学(),
),
底部导航栏:选项卡栏(
控制器:_控制器,
indicatorSize:TabBarIndicatorSize.label,
指示颜色:颜色。透明,
isScrollable:错误,
选项卡:[
_buildTabIcon(“img/tab\u bar\u home.svg”,0,主题数据),
_buildTabIcon(“img/mooo.svg”,1,主题数据),
_buildTabIcon(“img/tab\u bar\u profile.svg”,2,主题数据),
],
onTap:(索引){
setState((){});
},
),
),
));
}
Widget\u buildTabIcon(字符串资产名、int索引、主题数据){
返回选项卡(
图标:SvgPicture.asset(
资产名称,
颜色:index==\u controller.index
?颜色(0xff008d4b)
:themeData.primaryColorLight,
),
);
}
}

尝试制作一个单独的小部件,然后您可以通过构造函数将参数传递给它。我不会跟踪您,你能解释一下吗好的,是这样的。在您的代码中,您使用的是
MatrialApp
,其中有
Scaffold
,对吗?现在只需制作一个新的小部件,并将
Scaffold
的所有代码放在其中。完成后,您可以立即在
MaterialApp
中传递构造函数以代替您的
home
。然后,您可以使用参数化构造函数来传递您喜欢的值,我希望它有一定的意义