如何根据颤动中单击的导航栏按钮更改脚手架主体?
How to change Scaffold body based on which navigation bar button is clicked in flutter?
我是 flutter 的新手,我想让它成为正确的方法,问题是我有一个底部导航栏包 Curved_navigation_bar 它有很棒的外观和动画,这个导航栏应该改变脚手架小部件的主体,并根据单击的按钮每次显示一个新的小部件,我想要实现的是每次单击导航栏的按钮时执行以下操作:
- 清除
Scaffold
的正文
- 加载相关小部件
我希望这是在 flutter 中进行导航(更改屏幕或视图)的正确方法,如果这是错误的请告诉我
class _SituationState extends State<ScreenSituation>{
int _page = 0;
GlobalKey _bottomNavigationKey = GlobalKey();
@override
Widget build(BuildContext context) {
return Scaffold(
body: Container(
//if list button is clicked preveiw widget_client
//if people button is clicked preveiw widget_people
//if launch button is clicked preveiw launch
),
bottomNavigationBar: CurvedNavigationBar(
key: _bottomNavigationKey,
index: 0,
height: 75.0,
items: <Widget>[
Icon(Icons.list, size: 30),
Icon(Icons.people, size: 30),
Icon(Icons.launch, size: 30),
],
color: Colors.white,
buttonBackgroundColor: Colors.white,
backgroundColor: Colors.blueAccent,
animationCurve: Curves.easeInOut,
animationDuration: Duration(milliseconds: 300),
onTap: (index) {
setState(() {
_page = index;
});
},
),
);
}
}
正在获取您的代码示例。
import 'package:curved_navigation_bar/curved_navigation_bar.dart';
import 'package:flutter/material.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
// This widget is the root of your application.
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
visualDensity: VisualDensity.adaptivePlatformDensity,
),
home: MyHomePage(title: 'Flutter Demo Home Page'),
);
}
}
class MyHomePage extends StatefulWidget {
MyHomePage({Key key, this.title}) : super(key: key);
final String title;
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
int _page = 0;
GlobalKey _bottomNavigationKey = GlobalKey();
Widget bodyFunction() {
switch (_page) {
case 0:
return Container(color: Colors.red);
break;
case 1:
return Container(color: Colors.blue);
break;
case 2:
return Container(color: Colors.orange);
break;
default:
return Container(color: Colors.white);
break;
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: bodyFunction(),
bottomNavigationBar: CurvedNavigationBar(
key: _bottomNavigationKey,
index: 0,
height: 75.0,
items: <Widget>[
Icon(Icons.list, size: 30),
Icon(Icons.people, size: 30),
Icon(Icons.launch, size: 30),
],
color: Colors.white,
buttonBackgroundColor: Colors.white,
backgroundColor: Colors.blueAccent,
animationCurve: Curves.easeInOut,
animationDuration: Duration(milliseconds: 300),
onTap: (index) {
setState(() {
_page = index;
});
},
),
);
}
}
我是 flutter 的新手,我想让它成为正确的方法,问题是我有一个底部导航栏包 Curved_navigation_bar 它有很棒的外观和动画,这个导航栏应该改变脚手架小部件的主体,并根据单击的按钮每次显示一个新的小部件,我想要实现的是每次单击导航栏的按钮时执行以下操作:
- 清除
Scaffold
的正文
- 加载相关小部件
我希望这是在 flutter 中进行导航(更改屏幕或视图)的正确方法,如果这是错误的请告诉我
class _SituationState extends State<ScreenSituation>{
int _page = 0;
GlobalKey _bottomNavigationKey = GlobalKey();
@override
Widget build(BuildContext context) {
return Scaffold(
body: Container(
//if list button is clicked preveiw widget_client
//if people button is clicked preveiw widget_people
//if launch button is clicked preveiw launch
),
bottomNavigationBar: CurvedNavigationBar(
key: _bottomNavigationKey,
index: 0,
height: 75.0,
items: <Widget>[
Icon(Icons.list, size: 30),
Icon(Icons.people, size: 30),
Icon(Icons.launch, size: 30),
],
color: Colors.white,
buttonBackgroundColor: Colors.white,
backgroundColor: Colors.blueAccent,
animationCurve: Curves.easeInOut,
animationDuration: Duration(milliseconds: 300),
onTap: (index) {
setState(() {
_page = index;
});
},
),
);
}
}
正在获取您的代码示例。
import 'package:curved_navigation_bar/curved_navigation_bar.dart';
import 'package:flutter/material.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
// This widget is the root of your application.
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
visualDensity: VisualDensity.adaptivePlatformDensity,
),
home: MyHomePage(title: 'Flutter Demo Home Page'),
);
}
}
class MyHomePage extends StatefulWidget {
MyHomePage({Key key, this.title}) : super(key: key);
final String title;
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
int _page = 0;
GlobalKey _bottomNavigationKey = GlobalKey();
Widget bodyFunction() {
switch (_page) {
case 0:
return Container(color: Colors.red);
break;
case 1:
return Container(color: Colors.blue);
break;
case 2:
return Container(color: Colors.orange);
break;
default:
return Container(color: Colors.white);
break;
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: bodyFunction(),
bottomNavigationBar: CurvedNavigationBar(
key: _bottomNavigationKey,
index: 0,
height: 75.0,
items: <Widget>[
Icon(Icons.list, size: 30),
Icon(Icons.people, size: 30),
Icon(Icons.launch, size: 30),
],
color: Colors.white,
buttonBackgroundColor: Colors.white,
backgroundColor: Colors.blueAccent,
animationCurve: Curves.easeInOut,
animationDuration: Duration(milliseconds: 300),
onTap: (index) {
setState(() {
_page = index;
});
},
),
);
}
}