Flutter 悬臂式脚手架
我是个新手。我有一个关于我项目中脚手架的问题 我有一个主屏幕,用于显示底部导航小部件。我猜我还使用if作为容器来显示中的所有其他页面/屏幕,以便底部导航保持可见。代码如下:Flutter 悬臂式脚手架,flutter,android-studio,Flutter,Android Studio,我是个新手。我有一个关于我项目中脚手架的问题 我有一个主屏幕,用于显示底部导航小部件。我猜我还使用if作为容器来显示中的所有其他页面/屏幕,以便底部导航保持可见。代码如下: class Home_Screen extends StatefulWidget { static const String id = 'home_screen'; @override _Home_ScreenState createState() => _Home_ScreenState(); } /
class Home_Screen extends StatefulWidget {
static const String id = 'home_screen';
@override
_Home_ScreenState createState() => _Home_ScreenState();
}
// ignore: camel_case_types
class _Home_ScreenState extends State<Home_Screen> {
PageController _pageController = PageController();
List<Widget> _screens = [
AgentDashboardScreen(),
TransactionDetailScreen(),
AgentProfileScreen(),
];
int _selectedIndex = 0;
void _onPageChanged(int index) {
setState(() {
_selectedIndex = index;
});
}
void _itemTapped(int selectedIndex) {
if (selectedIndex == 3) {
Navigator.of(context).pushAndRemoveUntil(
// the new route
MaterialPageRoute(
builder: (BuildContext context) => WelcomeScreen(),
),
(Route route) => false,
);
} else {
_pageController.jumpToPage(selectedIndex);
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: PageView(
controller: _pageController,
children: _screens,
onPageChanged: _onPageChanged,
physics: NeverScrollableScrollPhysics(),
),
bottomNavigationBar: BottomNavigationBar(
type: BottomNavigationBarType.fixed,
onTap: _itemTapped,
items: [
BottomNavigationBarItem(
icon: Icon(
Icons.home,
color: _selectedIndex == 0 ? Colors.blueAccent : Colors.grey,
),
label: 'Home',
),
BottomNavigationBarItem(
icon: Icon(
Icons.account_balance,
color: _selectedIndex == 1 ? Colors.blueAccent : Colors.grey,
),
label: 'Add Tran',
),
BottomNavigationBarItem(
icon: Icon(
Icons.person,
color: _selectedIndex == 2 ? Colors.blueAccent : Colors.grey,
),
label: 'Profile',
),
BottomNavigationBarItem(
icon: Icon(
Icons.album_outlined,
color: _selectedIndex == 3 ? Colors.blueAccent : Colors.grey,
),
label: 'Logout',
),
],
),
);
}
}
class Home\u屏幕扩展StatefulWidget{
静态常量字符串id='主屏幕';
@凌驾
_主页\屏幕状态createState()=>\主页\屏幕状态();
}
//忽略:驼峰\u案例\u类型
类_Home_ScreenState扩展状态{
PageController_PageController=PageController();
列表_屏幕=[
AgentDashboardScreen(),
TransactionDetailScreen(),
AgentProfileScreen(),
];
int _selectedIndex=0;
void _onPageChanged(整型索引){
设置状态(){
_selectedIndex=索引;
});
}
void _itemstapped(int-selectedIndex){
if(selectedIndex==3){
Navigator.of(context).pushandremoveintil(
//新路线
材料路线(
生成器:(BuildContext上下文)=>WelcomeScreen(),
),
(路由)=>错误,
);
}否则{
_pageController.jumpToPage(选择索引);
}
}
@凌驾
小部件构建(构建上下文){
返回脚手架(
正文:页面视图(
控制器:_pageController,
孩子们:_屏幕,
onPageChanged:_onPageChanged,
物理学:NeverscrollableScroll物理学(),
),
底部导航栏:底部导航栏(
类型:BottomNavigationBarType.fixed,
onTap:,
项目:[
底部导航气压计(
图标:图标(
我的家,
颜色:_selectedIndex==0?颜色。蓝色强调:颜色。灰色,
),
标签:“家”,
),
底部导航气压计(
图标:图标(
Icons.account\u余额,
颜色:_selectedIndex==1?颜色。蓝色强调:颜色。灰色,
),
标签:“添加传输”,
),
底部导航气压计(
图标:图标(
一个人,
颜色:_selectedIndex==2?颜色。蓝色强调:颜色。灰色,
),
标签:“配置文件”,
),
底部导航气压计(
图标:图标(
Icons.album_概述,
颜色:_selectedIndex==3?颜色。蓝色强调:颜色。灰色,
),
标签:“注销”,
),
],
),
);
}
}
在我可以从底部导航器导航到的一个屏幕中,我发现键盘上方有一个很大的空白。我曾读到,在另一个脚手架内放置脚手架可能会导致这种情况
那么,当我导航到下一页时,我是否在另一个脚手架中有一个脚手架?这是第二页的一个片段
class TransactionDetailScreen extends StatefulWidget {
static const String id = 'transaction_detail_screen';
final QueryDocumentSnapshot trxns;
//final Trxns trxns;
//final QuerySnapshot queryTrxns = trxns;
TransactionDetailScreen([this.trxns]);
@override
_TransactionDetailScreenState createState() =>
_TransactionDetailScreenState();
}
class _TransactionDetailScreenState extends State<TransactionDetailScreen> {
String _trxnStatus = 'Listed';
@override
Widget build(BuildContext context) {
// Get the stream of transactions created in main.dart
final trxnProvider = Provider.of<TrxnProvider>(context);
return Scaffold(
resizeToAvoidBottomInset: true,
appBar: AppBar(
title: Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Image.asset('assets/images/Appbar_logo.png',
fit: BoxFit.cover, height: 56),
],
),
),
backgroundColor: Colors.white,
body: SingleChildScrollView(
reverse: true,
child: Padding(
padding: const EdgeInsets.all(20.0),
child: Column(
children: <Widget>[
Text(
'Transaction Details',
style: TextStyle(
fontSize: 30,
),
),
SizedBox(
height: 8.0,
),
TextField(
autofocus: true,
keyboardType: TextInputType.text,
controller: clientFNameController,
textAlign: TextAlign.center,
onChanged: (value) {
trxnProvider.changeclientFName(value);
},
decoration: kTextFieldDecoration.copyWith(
hintText: 'Client First Name',
labelText: 'Client First Name'),
),
RoundedButton(
title: 'Save',
colour: Colors.blueAccent,
onPressed: () async {
setState(() {
showSpinner = true;
});
try {
trxnProvider.saveTrxn();
Navigator.push(
context,
new MaterialPageRoute(
builder: (context) => AgentDashboardScreen(),
),
);
setState(() {
showSpinner = false;
});
} catch (e) {
// todo: add better error handling
print(e);
}
},
),
SizedBox(
height: 8.0,
),
(widget != null)
? RoundedButton(
title: 'Delete',
colour: Colors.red,
onPressed: () async {
setState(() {
showSpinner = true;
});
try {
trxnProvider.deleteTrxn(widget.trxns['trxnId)']);
Navigator.push(
context,
new MaterialPageRoute(
builder: (context) => AgentDashboardScreen(),
),
);
setState(() {
showSpinner = false;
});
} catch (e) {
// todo: add better error handling
print(e);
}
},
)
: Container(),
],
),
),
),
);
}
}
class TransactionDetailScreen扩展了StatefulWidget{
静态常量字符串id='transaction_detail_screen';
最终查询文档快照trxns;
//最终Trxns-Trxns;
//最终查询快照queryTrxns=trxns;
TransactionDetailScreen([this.trxns]);
@凌驾
_TransactionDetailScreenState createState()=>
_TransactionDetailScreenState();
}
类_TransactionDetailScreenState扩展状态{
字符串_trxnStatus='已列出';
@凌驾
小部件构建(构建上下文){
//获取在main.dart中创建的事务流
final trxnProvider=Provider.of(上下文);
返回脚手架(
resizeToAvoidBottomInset:true,
appBar:appBar(
标题:世界其他地区(
mainAxisAlignment:mainAxisAlignment.center,
儿童:[
Image.asset('assets/images/Appbar_logo.png',
安装:BoxFit.盖,高度:56),
],
),
),
背景颜色:Colors.white,
正文:SingleChildScrollView(
相反:是的,
孩子:填充(
填充:常数边集全部(20.0),
子:列(
儿童:[
正文(
“交易详情”,
样式:TextStyle(
尺寸:30,
),
),
大小盒子(
身高:8.0,
),
文本字段(
自动对焦:对,
键盘类型:TextInputType.text,
控制器:clientFNameController,
textAlign:textAlign.center,
一旦更改:(值){
trxnProvider.changeclientFName(值);
},
装饰:kTextFieldDecoration.copyWith(
hintText:'客户的名字',
labelText:“客户名”),
),
圆形按钮(
标题:“保存”,
颜色:颜色。蓝色口音,
onPressed:()异步{
设置状态(){
showSpinner=true;
});
试一试{
trxnProvider.saveTrxn();
导航器。推(
上下文
新材料路线(
生成器:(上下文)=>AgentDashboardScreen(),
),
);
设置状态(){
showSpinner=false;
});
}捕获(e){
//todo:添加更好的错误处理
印刷品(e);
}
},
),
大小盒子(
身高:8.0,
),
(小部件!=null)
?圆形按钮(
标题:“删除”,
颜色:颜色。红色,
onPressed:()异步{
设置状态(){
showSpinner=true;
});
试一试{
trxnProvider.dele