美文网首页
flutter 程序入口,及BottomNavigationBa

flutter 程序入口,及BottomNavigationBa

作者: love断鸿 | 来源:发表于2020-02-19 11:13 被阅读0次

    最近继续学了点flutter, 想要记录 又不知道从哪里开始,思来想去 还是按照我iOS开发的习惯, 从一个App的程序入口说起吧
    先简单了解两个概念

    MaterialApp

    MaterialApp 它封装了应用程序实现 Material Design 所需要的 一些 Widget。一般作为顶层 widget 使用。我们可以粗略的把它理解为UIWidow
    常用属性: home(主页) title(标题) color(颜色) theme(主题) routes(路由)

    Scaffold

    Scaffold 是 Material Design 布局结构的基本实现。此类提供了用于显示 drawer、
    snackbar 和底部 sheet 的 API。(其实我也不懂啥意思, 这里先简单的理解为 UITabbarController)
    常用属性:
    appBar - 显示在界面顶部的一个 AppBar。
    body - 当前界面所显示的主要内容 Widget。
    drawer - 抽屉菜单控件。

    但要明确一点, MaterialApp, Scaffold都是widge

    最后说下我的目的,先能用 flutter去写一个app,熟悉下,然后再去深入研究flutter的各种高级的东西

    程序入口就是main函数这个不必多说

    一番研究之后, main函数里要是这样子
    home: Tabs() 实际上就是 设置了rootViewController

    void main () {  
      runApp(MyApp());
    }
    
    class MyApp extends StatelessWidget {
      const MyApp({Key key}) : super(key: key);
    
      @override
      Widget build(BuildContext context) {
        return MaterialApp(
          home: Tabs(),
        );
      }
    }
    

    在Tabs里面就要设置Scaffold(UITabbarController)了

    class Tabs extends StatefulWidget {
      Tabs({Key key}) : super(key: key);
    
      @override
      _TabsState createState() => _TabsState();
    }
    
    class _TabsState extends State<Tabs> {
      int _currentIndex = 0;
    // 可以理解为视图
      List _pageList=[
        HomePage(),
        SettingPage(),
        CategoryPage(),
      ];
      @override
      Widget build(BuildContext context) {
        return Scaffold(
            appBar: AppBar(
              title: Text('flutter Demo',),
            ),
            body:this._pageList[this._currentIndex],
            bottomNavigationBar: BottomNavigationBar(
              currentIndex: this._currentIndex,
             // 点击效果
              onTap: (int index){
                setState(() {
                  this._currentIndex = index;
                });
                print(index);
              },
              //  相当于设置tabbaritem
              items: [
                BottomNavigationBarItem(
                  icon: Icon(Icons.home),
                  title: Text('首页'),
    
                ),
    
                BottomNavigationBarItem(
                  icon: Icon(Icons.category),
                  title: Text('分类'),
                ),
    
                BottomNavigationBarItem(
                  icon: Icon(Icons.settings),
                  title: Text('设置'),
                ),
              ],
            ),
          );
      }
    }
    

    上述代码都有注释,不难理解 这里需要解释一下
    在 Flutter 里自定义组件就是一个类,需要继承 StatelessWidget或者StatefulWidget

    StatelessWidget 是无状态组件,状态不可变的 widget

    StatefulWidget 是有状态组件,持有的状态可能在 widget 生命周期改变

    从iOS的角度来讲, 如果这个视图在初始化结束后, 或发生 UI绘制的操作就要用StatefulWidget(个人理解)

    个人心得:照目前看来 Flutter开发时 语法可以无限往下嵌套, 这样会降低代码的可读性和可维护性, 所以一定要进行文件的抽离, 做好文件夹目录的相关工作

    相关文章

      网友评论

          本文标题:flutter 程序入口,及BottomNavigationBa

          本文链接:https://www.haomeiwen.com/subject/gxgofhtx.html