Flutter 构建App基础框架

前言

Flutter相对OC来说,代码精简很多,目标文件也少了很多,下面我们通过代码一一讲解如何利用flutter去搭建一个App的基础壳子,核心需要理解和注意的有MaterialApp()Scaffold()appBar: AppBar( )ColumnRowbottomNavigationBar等核心组件。具体用法和介绍看下列代码和注释。

import 'package:flutter/material.dart'; // 导入文件样式
import './widgets/tabBar_widget.dart'; // 导入自定义文件

// main函数和OC一样,都是程序的入口
void main() => runApp(ShopkeeperApp()); // 如果函数中只有一行方法的调用,可以去掉{}用=>指向即可
class ShopkeeperApp extends StatelessWidget { // 
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      debugShowCheckedModeBanner: false, // DEBUG条幅隐藏
      home: Home(), // 首页显示内容
      // 设置主题颜色
      theme: ThemeData(
        // 导航条颜色
        primaryColor: Colors.cyan,
        // 设置按钮点击时的水波纹
        highlightColor:
        Color.fromRGBO(255, 255, 255, 0.5), //设置点击时的背景色为白色,透明度为0.5
        splashColor: Colors.white70, // 点击按钮时的水波纹颜色为白色不透明
      ),
    );
  }
}

class Home extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return DefaultTabController( // 相当于OC中baseController
        length: 4, // 设置4个根控制器
      child: Scaffold( 
        appBar: AppBar( // 设置导航条
          title: Text( // 导航条标题
              '智掌柜',
            style: TextStyle( // 文案样式
              color: Colors.white,
              fontSize: 18.0
            ),
          ),
        ),
        // body: TabBarView(children: [
        //
        // ]),
        body: Center( // body是整个控制器中要显示的内容
          child: Column( // Column是纵向显示 Row是横向显示
            children: [
              Text("这个是字符串标签,相当于OC中的Label"),
              SizedBox(
                height: 10,
              ),
              Text("这个是字符串标签,相当于OC中的Label"),
              SizedBox(
                height: 10,
              ),
              Text("这个是字符串标签,相当于OC中的Label"),
            ],
          ),
        ),
        bottomNavigationBar: setBottomNavigationBar(), // 设置tabBar样式
      ),
    );
  }
}
  • 其中setBottomNavigationBar()函数是自定义文件中的方法,内容就是设置底部餐单栏的样式和内容。具体查看下来代码。
import 'package:flutter/material.dart';
import 'package:flutter/widgets.dart';

// 这里要注意下StatefulWidget合StatelessWidget的写法
class setBottomNavigationBar extends StatefulWidget {
  @override
  State<StatefulWidget> createState() {
    return _createBottomNavigationBarItem();
  }
}

// _开头的就是私有方法
class _createBottomNavigationBarItem extends State<setBottomNavigationBar> {
  int _CurrentIndex = 0; // 默认选中第0个控制器
  void _onTapHandle(int index) { // 点击对应的index
    setState(() {
      print('您点击的是:{$index}'); // flutter的打印方式
      _CurrentIndex = index; // 点击后的赋值
    });
  }

  @override
  Widget build(BuildContext context) {
    return BottomNavigationBar( // BottomNavigationBar就是底部菜单栏的样式组件
      currentIndex: _CurrentIndex, // 当前显示的索引
      onTap: _onTapHandle,// onTapitem的电机事件
      type: BottomNavigationBarType.fixed, // type表示固定显示在底部
        items: [ // 设置tabBar的item
          BottomNavigationBarItem(icon: Icon(Icons.explore),label: 'Explore'),// BottomNavigationBarItem 具体的某个item的设置
          BottomNavigationBarItem(icon: Icon(Icons.history),label: 'History'),
          BottomNavigationBarItem(icon: Icon(Icons.list),label: 'List'),
          BottomNavigationBarItem(icon: Icon(Icons.person),label: 'Persion'),
        ],
    );
  }
}
导航条+底部tabBar+控制器
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容