Flutter 悬臂式脚手架

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(); } /

我是个新手。我有一个关于我项目中脚手架的问题

我有一个主屏幕,用于显示底部导航小部件。我猜我还使用if作为容器来显示中的所有其他页面/屏幕,以便底部导航保持可见。代码如下:

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