• 使用flutter的Scaffold脚手架开发一个最简单的带tabbar的app模板


    flutter自带的scaffold脚手架可以说还是挺好用的,集成了appBar,还有左侧抽屉,还有底部tabbar,可以说拿来就可以用了啊,所以我今天也体验了一下,做了一个最简单的demo,就当是学习记录了。

    效果展示:

    基础的项目目录: 

    pages里面存放的是每个页面的页面代码,然后在main.dart中将四个页面引入

    然后再开始配置scaffold脚手架:一下是项目的完成代码

    1. import 'package:flutter/material.dart';
    2. import 'package:flutter_app/pages/car.dart';
    3. import 'package:flutter_app/pages/search.dart';
    4. import 'package:flutter_app/pages/home.dart';
    5. import 'package:flutter_app/pages/my.dart';
    6. import 'package:get/get.dart';
    7. void main() {
    8. runApp(const MyApp());
    9. }
    10. class MyApp extends StatelessWidget {
    11. const MyApp({super.key});
    12. // This widget is the root of your application.
    13. @override
    14. Widget build(BuildContext context) {
    15. // 返回素材组件
    16. return GetMaterialApp(
    17. title: 'Flutter Demo',
    18. theme: ThemeData(primaryColor: Colors.deepPurple),
    19. // 其实要返回一个对象的,但是在flutter中,new可以省略,所以const MyHomePage()
    20. home: const Home(),
    21. );
    22. }
    23. }
    24. // 创建一个有状态的组件
    25. class Home extends StatefulWidget {
    26. const Home({super.key});
    27. @override
    28. State createState() => _HomeState();
    29. }
    30. class _HomeState extends State<Home> {
    31. // tabbar
    32. var tabIndex = 0;
    33. // 页面组件
    34. var pageList = [HomePage(), SearchPage(), CarPage(), MyPage()];
    35. @override
    36. Widget build(BuildContext context) {
    37. return Scaffold(
    38. appBar: AppBar(
    39. title: const Text("电影频道"),
    40. centerTitle: true,
    41. backgroundColor: Colors.blue,
    42. ),
    43. drawer: Drawer(
    44. child: ListView(
    45. children: [
    46. UserAccountsDrawerHeader(
    47. accountEmail: Text('wo shi Email'),
    48. accountName: Text('我是Drawer'),
    49. currentAccountPicture: CircleAvatar(
    50. backgroundImage: AssetImage('images/avatar.jpg'),
    51. ),
    52. ),
    53. ListTile(
    54. title: Text("淘宝购物"),
    55. leading: Icon(Icons.shop),
    56. trailing: Icon(Icons.legend_toggle),
    57. ),
    58. ListTile(
    59. title: Text("拼多多商城"),
    60. leading: Icon(Icons.piano),
    61. trailing: Icon(Icons.legend_toggle),
    62. ),
    63. ListTile(
    64. title: Text("京东优选"),
    65. leading: Icon(Icons.generating_tokens_sharp),
    66. trailing: Icon(Icons.legend_toggle),
    67. ),
    68. ListTile(
    69. title: Text("随便买买"),
    70. leading: Icon(Icons.home),
    71. trailing: Icon(Icons.legend_toggle),
    72. ),
    73. ],
    74. ),
    75. ),
    76. body: pageList[tabIndex],
    77. bottomNavigationBar: BottomNavigationBar(
    78. items: [
    79. BottomNavigationBarItem(icon: Icon(Icons.home), label: "首页"),
    80. BottomNavigationBarItem(icon: Icon(Icons.search), label: "搜索"),
    81. BottomNavigationBarItem(
    82. icon: Icon(Icons.category_rounded), label: "购物车"),
    83. BottomNavigationBarItem(
    84. icon: Icon(Icons.supervised_user_circle), label: "我的"),
    85. ],
    86. type: BottomNavigationBarType.fixed,
    87. currentIndex: tabIndex,
    88. // backgroundColor: Colors.blue,
    89. showUnselectedLabels: true,
    90. unselectedItemColor: Colors.grey,
    91. unselectedLabelStyle: TextStyle(color: Colors.grey),
    92. selectedItemColor: Colors.blue,
    93. selectedLabelStyle: TextStyle(color: Colors.blue),
    94. onTap: (index) {
    95. print(index);
    96. setState(() {
    97. tabIndex = index;
    98. });
    99. },
    100. ),
    101. );
    102. }
    103. }

  • 相关阅读:
    【Meetup预告】OpenMLDB+OneFlow:链接特征工程到模型训练,加速机器学习模型开发
    【C++笔试强训】第十一天
    PTA题目 前世档案
    WebFlux+SSE流式传输
    甲烷排放通量的计算
    【Verilog基础】【计算机体系结构】多核cache一致性
    Spring整合RabbitMQ——生产者(利用配置类)
    CSS书写位置和基础选择器
    containerd 镜像构建工具 -- nerdctl 和 buildkit
    php Unicode编码格式案例
  • 原文地址:https://blog.csdn.net/weixin_44786530/article/details/134426307