Flutter 目录结构和项目资源

在Flutter官方文档中我们搭建了Flutter的开发环境,并且创建了一项目,项目默认就生成了一些代码,学习任何语言第一步一般都是从入口函数着手,然后一步一步往下走。

本篇博客我们就以默认生成的项目为准,着重的介绍一下Flutter项目的目录结构及代码详解。

先来看看Flutter项目的目录结构

我们着重需要注意一下几个文件夹,其他的暂时不用理会


文件夹 作用


下面我们来看一下lib文件夹中的代码,lib中只有一个main.dart文件。

通过英文注释我们大概也能知道每个类是干什么的,有什么作用,默认运行界面就是下图这样,点击浮动按钮会改变计数Text的值。

下面我们来一点点的看,大家可以新建一个Flutter项目对照原本的代码看。

入口函数

首先是入口函数,main方法就是入口函数,默认的箭头函数写法跟下面写法效果一致,返回一个widget,MyApp就是我们要展示的启动界面。

/*

* 入口函数

*

* */

void main() => runApp(MyApp()); //Dart中的箭头函数,跟kotlin很像,跟下面写法效果一致

//main(){

//  return new MyApp();

//}

下面我们来看一下MyApp类,这里的MyApp类中返回了一个MaterialApp widget,MaterialApp可以理解为ui的风格,Android上就是这种风格的UI. ios上我们可以使用CupertinoApp。这个可以自己修改尝试

在MaterialApp中我们可以配置主题颜色,控件的样式等等

/*

/*

* 这里相当于Android中的Application类

* StatelessWidget表示无状态控件

* */

class MyApp extends StatelessWidget {

  // This widget is the root of your application.

  @override

  Widget build(BuildContext context) {

    /*

    * MaterialApp表明app的风格是Material Design风格的

    * 这里我们可以配置app的主题相关属性比如颜色,按钮风格等等,类似于Android中的style文件

    * */

    return MaterialApp(

      title: 'Flutter Demo',

      /*主题相关配置

      * 这里我们可以配合app整体的主题样式,比如整体颜色,控件默认的样式等

      * */

      theme: ThemeData(

        /*这个地方就类似于Android中的style文件配置,主要就是主题的配置*/

        primaryColor: Colors.red,

        primaryColorDark: Colors.red,

        accentColor: Colors.orange,

        buttonTheme: ButtonThemeData(buttonColor: Colors.red,textTheme: ButtonTextTheme.primary)

      ),

      /*home指定了启动后显示的页面

      * 类似于我们在AndroidManifest中配置启动页面

      * */

      home: MyHomePage(title: 'Flutter示例'),

    );

  }

}

下面我们来看一下MyHomePage 类

MyHomePage 就是启动后显示的第一个页面,继承自StatefulWidget,注释的很清楚,就不多说了。

/*

* StatefulWidget是一个有状态的控件,如果你的页面需要更新ui,那么该页面就要继承自StatefulWidget

* 如果只是一个纯展示的页面,只需要继承自StatelessWidget即可

* MyHomePage在上面已经被指定为启动页面

* 该页面有一个计数的逻辑,会更新ui,所以需要继承自StatefulWidget

* */

class MyHomePage extends StatefulWidget {

  /*Dart 中的构造方法  {}里面的参数表示可选参数,跟kotlin概念差不多

  * this.title默认会把值赋给下面的title

  * */

  MyHomePage({Key key, this.title}) : super(key: key);

  /*声明一个变量 用final修饰表示只能赋一次值

  * 在上面的构造上方法中已经有赋值操作了,所以后面我们就不能再更改title的值了

  * */

  final String title;

  /*所有继承自StatefulWidget的控件都要重写createState()这个方法

  * 可以理解为指定该页面的状态是由谁来控制的

  * 在Dart中下划线开头声明的变量和方法,其默认访问权限就是私有的

  * 类似于java中用private关键字修饰,只能在类的内部访问

  * */

  @override

  _MyHomePageState createState() => _MyHomePageState();

}

_MyHomePageState 类中的代码稍微多一些。

我们自己新增了一个_reduceCounter方法,在setState中修改数据后,ui的状态会自动更改。

然后我们添加了一个按钮,并修改了Text的样式,效果图可以看下面

/*

*State是一个状态对象,<>里面是表示该状态是跟谁绑定的。

* 我们修改状态时就是在该类中进行编写

*

* */

class _MyHomePageState extends State<MyHomePage> {

  int _counter = 0;

  /*计数器加一*/

  void _incrementCounter() {

    setState(() {

      _counter++;

    });

  }

  /*这里我们自己新建一个方法,很简单,就是执行减一操作*/

  void _reduceCounter() {

    setState(() {

      _counter--;

    });

  }

  @override

  Widget build(BuildContext context) {

/*Scaffold可以看作是Material Design中的一个模板

*看源码发现它继承自StatefulWidget,包含了appBar,body,drawer等控件

* */

    return Scaffold(

      /*appBar 相当于Android中的ToolBar*/

      appBar: AppBar(

        /*这里的widget实际上就是MyHomePage*/

        title: Text(widget.title),

      ),

      /*中间的内容布局*/

      body: Center(

        /*Column表示一行 对应的Row表示一列

        * 这里我们改成列看一下

        * */

        child: Column(

          /*mainAxisAlignment翻译成中文就是主轴对准的意思。

          * 我们可以把值设置为star,end等等

          * */

          mainAxisAlignment: MainAxisAlignment.center,

          /*子控件,是一个List类型*/

          children: <Widget>[

            /*文本控件*/

            Text(

              '你点击的次数:',

              /*这里我们可以修改样式*/

              style: TextStyle(fontSize: 30,letterSpacing: 3),

            ),

            /*$_counter 用法跟kotlin中的${_counter}类似,*/

            Text(

              '$_counter',

              /*Text的样式*/

              style: Theme.of(context).textTheme.display3,

            ),

            /*我们新增一个按钮,用来实现点击使计数器减一*/

            RaisedButton(

              /*_reduceCounter是上面我们自己新增的方法,Dart中可以把方法作为参数传递*/

              onPressed: _reduceCounter,

              child: Text("减一"),

            )

          ],

        ),

      ),

      /*浮动按钮*/

      floatingActionButton: FloatingActionButton(

        /*_incrementCounter实际上就是一个上面默认的_incrementCounter()方法,*/

        onPressed: _incrementCounter,

        tooltip: '计数器加一',

        child: Icon(Icons.add),

      ),

      // This trailing comma makes auto-formatting nicer for build methods.

    );

  }

}

修改后运行效果图如下

至此,Flutter默认项目中的目录结构以及代码各自的作用就介绍完毕了,知道了代码的流程后我们就可以开始修改代码然后看看效果了,在Flutter中,一切皆widget,我们的界面都是由各种widget堆叠出来的,下一步我们就可以去学习一下Flutter中widget了。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 230,527评论 6 544
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 99,687评论 3 429
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 178,640评论 0 383
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 63,957评论 1 318
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 72,682评论 6 413
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 56,011评论 1 329
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 44,009评论 3 449
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 43,183评论 0 290
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 49,714评论 1 336
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 41,435评论 3 359
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 43,665评论 1 374
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 39,148评论 5 365
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 44,838评论 3 350
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 35,251评论 0 28
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 36,588评论 1 295
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 52,379评论 3 400
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 48,627评论 2 380