【发布时间】:2021-12-30 13:50:06
【问题描述】:
基本上,我有一个mainscreen 和一个HomeTabPage。我想将主屏幕键与主页绑定,以便在选项卡之间导航时可以保存页面的状态
这是我目前的代码
class MyApp extends StatelessWidget {
// This widget is the root of your application.
@override
Widget build(BuildContext context) {
return ChangeNotifierProvider(
create: (context) => AppData(),
child: MaterialApp(
title: 'Test',
theme: ThemeData(
// fontFamily: "Brand Bold",
primarySwatch: Colors.blue,
visualDensity: VisualDensity.adaptivePlatformDensity,
),
initialRoute: FirebaseAuth.instance.currentUser == null
? LoginScreen.idScreen
: MainScreen(
map: HomeTabPage(),
),
),
);
}
}
mainScreen 有一个标签控制器
class MainScreen extends StatefulWidget {
//const MainScreen({ Key? key }) : super(key: key);
static const String idScreen = "mainScreen";
final Widget map;
const MainScreen({Key key, this.map}) : super(key: key);
@override
_MainScreenState createState() => _MainScreenState();
}
class _MainScreenState extends State<MainScreen>
with SingleTickerProviderStateMixin {
TabController tabController;
int selectedIndex = 0;
void onItemClicked(int index) {
setState(() {
selectedIndex = index;
tabController.index = selectedIndex;
});
}
@override
void initState() {
super.initState();
tabController = TabController(length: 4, vsync: this);
}
@override
void dispose() {
super.dispose();
tabController.dispose();
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: TabBarView(
physics: NeverScrollableScrollPhysics(),
controller: tabController,
children: [
widget.map,
//HomeTabPage(),
EarningTabPage(),
RatingTabPage(),
ProfileTabPage(),
],
),
bottomNavigationBar: BottomNavigationBar(
items: [
BottomNavigationBarItem(icon: Icon(Icons.home), label: "Home"),
BottomNavigationBarItem(
icon: Icon(Icons.credit_card), label: "Earnings"),
BottomNavigationBarItem(icon: Icon(Icons.star), label: "Ratings"),
BottomNavigationBarItem(icon: Icon(Icons.person), label: "Account"),
],
unselectedItemColor: Colors.black54,
selectedItemColor: Colors.yellow,
type: BottomNavigationBarType.fixed,
selectedLabelStyle: TextStyle(fontSize: 12.0),
showUnselectedLabels: true,
currentIndex: selectedIndex,
onTap: onItemClicked,
),
);
}
}
HomeTabPage
class HomeTabPage extends StatefulWidget {
const HomeTabPage({Key key}) : super(key: key);
@override
_HomeTabPageState createState() => _HomeTabPageState();
}
class _HomeTabPageState extends State<HomeTabPage>
with AutomaticKeepAliveClientMixin {
@override
bool get wantKeepAlive => true;
@override
void initState() {
super.initState();
}
@override
Widget build(BuildContext context) {
super.build(context);
return Stack(children: [
]);
}
}
上面的代码给了我这个错误
type 'MainScreen' is not a subtype of type 'String?'
当我将 main.dart 文件更改为此时,它工作正常。
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({Key? key}) : super(key: key);
// This widget is the root of your application.
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Test',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: MainScreen(map: HomeTabPage())
}
}
但我需要将它与 firebaseAuth 一起使用,我该怎么做?
【问题讨论】:
-
在
initialRoute: ....?MainScreen.idScreen -
不!不起作用。你能把完整的代码贴出来吗?
-
您在构建后或在更改
MainScreen.idScreen987654332@后构建时遇到问题 -
在构建时,因为已经有一个 if else 检查,` initialRoute: FirebaseAuth.instance.currentUser == null ?登录屏幕.idScreen:? MainScreen.idScreen(map: HomeTabPage(), ),
-
代码给出错误,
MainScreen.idScreen下的红色波浪线,工具提示错误说,` The expression doesn't evaluate to a function, so can't be invoked.
标签: firebase flutter dart firebase-authentication