用Android Studio创建的Flutter应用模板默认是一个简单的计数器示例。


  1. // 导入包
  2. import 'package:flutter/material.dart';
  3. // 应用入口,启动Flutter应用,runApp它接受一个Widget参数
  4. void main() => runApp(MyApp());
  5. // MyApp类代表Flutter应用,它继承了 StatelessWidget类,这也就意味着应用本身也是一个widget
  6. class MyApp extends StatelessWidget {
  7. // widget的主要工作是提供一个build()方法来描述如何构建UI界面(通常是通过组合、拼装其它基础widget)
  8. @override
  9. Widget build(BuildContext context) {
  10. // MaterialApp是Material库中提供的Flutter APP框架,通过它可以设置应用的名称、主题、语言、首页以及路由列表等,它本身也是一个widget
  11. return MaterialApp(
  12. // 应用名称
  13. title: 'Flutter Demo',
  14. // 应用主题
  15. theme: ThemeData(
  16. primarySwatch: Colors.blue,
  17. ),
  18. // 应用首页路由,本身也是一个widget
  19. home: MyHomePage(title: 'Flutter Demo Home Page'),
  20. );
  21. }
  22. }
  23. // Flutter应用的首页
  24. class MyHomePage extends StatefulWidget {
  25. MyHomePage({Key key, this.title}) : super(key: key);
  26. final String title;
  27. @override
  28. _MyHomePageState createState() => _MyHomePageState();
  29. }
  30. // 有状态的组件(Stateful widget) 和无状态的组件(Stateless widget)有两点不同:
  31. // 1. Stateful widget可以拥有状态,这些状态在widget生命周期中是可以变的,而Stateless widget是不可变的。
  32. // 2. Stateful widget至少由两个类组成:
  33. // 一个StatefulWidget类;
  34. // 一个State类,StatefulWidget类本身是不变的,但是State类中持有的状态在widget生命周期中可能会发生变化。
  35. class _MyHomePageState extends State<MyHomePage> {
  36. // 组件的状态,记录按钮点击的总次数
  37. int _counter = 0;
  38. // 设置状态的自增函数
  39. /* 当按钮点击时,会调用此函数,该函数的作用是先自增_counter,然后调用setState 方法。
  40. setState方法的作用是通知Flutter框架,有状态发生了改变,Flutter框架收到通知后,会执行build方法来根据新的状态重新构建界面,
  41. Flutter 对此方法做了优化,使重新执行变的很快,所以你可以重新构建任何需要更新的东西,而无需分别去修改各个widget。
  42. */
  43. void _incrementCounter() {
  44. setState(() {
  45. _counter++;
  46. });
  47. }
  48. //
  49. @override
  50. Widget build(BuildContext context) {
  51. // Scaffold是Material库中提供的页面脚手架,它提供了默认的导航栏、标题和包含主屏幕widget树的body属性。
  52. return Scaffold(
  53. appBar: AppBar(
  54. title: Text(widget.title),
  55. ),
  56. // Center组件,可以将其子组件树对齐到屏幕中心
  57. body: Center(
  58. // Column组件,可以将其所有子组件沿屏幕垂直方向依次排列
  59. child: Column(
  60. mainAxisAlignment: MainAxisAlignment.center,
  61. children: <Widget>[
  62. Text(
  63. 'You have pushed the button this many times:',
  64. ),
  65. Text(
  66. '$_counter',
  67. style: Theme.of(context).textTheme.display1,
  68. ),
  69. ],
  70. ),
  71. ),
  72. // 页面右下角的带“+”的悬浮按钮,它的onPressed属性接受一个回调函数,代表它被点击后的处理器
  73. floatingActionButton: FloatingActionButton(
  74. onPressed: _incrementCounter,
  75. tooltip: 'Increment',
  76. child: Icon(Icons.add),
  77. ),
  78. );
  79. }
  80. }

为什么要将build方法放在State中,而不是放在StatefulWidget中?

主要是为了提高开发的灵活性。

如果将build()方法放在StatefulWidget中则会有两个问题:

  1. 状态访问不便;
  2. 继承StatefulWidget不便;

Flutter 应用入门:计数器的更多相关文章

  1. Flutter 开发入门实践

    前言: Flutter 是 Google 推出的跨平台解决方案, 开发语言:Dart 优势: 劣势: 学习推荐: 官方网站:https://flutter.io/ 书籍:<Flutter技术入门 ...

  2. React:入门计数器

    ---恢复内容开始--- 把React的官网入门例子全看一遍,理解了,但自己从头开始写有点困难,这次强迫自己从头开始写,并写好注释: import React, { Component } from ...

  3. flutter快速入门

    好久以前就听说了dart和flutter,只是一直没有时间去研究一下,最近有了些时间就简单的研究了一下,也算是快速的入门了.dart是Google开发的语言,目前最新的版本为2.1,官网地址https ...

  4. Flutter从入门到进阶实战携程网App_汇总贴

    视频地址:https://coding.imooc.com/class/321.html?mc_marking=60e5294c605a87b2af7257d06f70505e&mc_chan ...

  5. Flutter安装入门教程

    ### 前言 Flutter是谷歌的移动UI框架,可以快速在iOS和Android上构建高质量的原生用户界面. Flutter可以与现有的代码一起工作.在全世界,Flutter正在被越来越多的开发者和 ...

  6. flutter从入门到精通五

    在flutter的世界里,一切都是Widget,图像,文本,布局模型等等,一切都是Widget flutter中,尽量将Widget放在MaterialApp.其封装了所需要的一些Widget,Mat ...

  7. flutter从入门到精通四

    widget Flutter 从 React 中吸取灵感(如果有react的编程经验,会很容易理解flutter),通过现代化框架创建出精美的组件. 它的核心思想是用 widget 来构建你的 UI ...

  8. flutter从入门到精通三

    flutter可以通过一套代码运行在多个平台上,包括移动,web,桌面,嵌入式,但是在 Web 平台的支持尚未达到 Beta 阶段,请不要用在生产环节,在阅读文档时候,推荐大家阅读https://fl ...

  9. flutter从入门到精通一

    Flutter 是 Google 开源的 UI 工具包,帮助开发者通过一套代码库高效构建多平台精美应用,支持移动.Web.桌面和嵌入式平台 flutter是基于dart语言开发的,我们将首先通过几章节 ...

随机推荐

  1. Panda 交易所快报 央行数字货币测试进入C端流量入口

    近年来,央行数字货币的研发进展备受市场关注.近期,Panda 交易所注意,央行数字货币研究所与滴滴出行已达成战略合作协议,共同研究探索数字人民币在智慧出行领域的场景创新和应用.此外,Panda 交易所 ...

  2. 【Codeforces 809E】Surprise me!(莫比乌斯反演 & 虚树)

    Description 给定一颗 \(n\) 个顶点的树,顶点 \(i\) 的权值为 \(a_i\).求: \[\frac{1}{n(n-1)}\sum_{i=1}^n\sum_{j=1}^n\var ...

  3. 题解-Infinite Path

    题解-Infinite Path \(\color{#9933cc}{\texttt{Infinite Path}}\) \(T\) 组测试数据.每次给你一个 \(n\) 的排列 \(\{p_n\}\ ...

  4. MySQL技术内幕InnoDB存储引擎(四)——表相关

    表是什么? 就是关于特定实体地数据集合,是关系型数据库模型地核心. 索引组织表 什么是索引组织表? 表中数据都是根据主键的顺序组织存放的,这种存储方式就是索引组织表.就是存储在一个索引结构中的表. 也 ...

  5. [JDK8]Map接口与Dictionary抽象类

    package java.util; 一.Map接口 接口定义 public interface Map<K,V> Map是存放键值对的数据结构.map中没有重复的key,每个key最多只 ...

  6. git+pycharm结合使用

    Pycharm + git 进行结合使用 第一步:Pycharm配置本地安装的Git 测试框架的负责人: 编写好一套能用的基础框架代码 --- > 上传到公司远程仓库 --- 设置团队协作成员 ...

  7. Nginx(二):配置文件

    nginx.conf 配置文件   nginx 安装目录下,主配置文件 nginx.conf [root@localhost nginx]# cd /etc/nginx/ [root@localhos ...

  8. Linux命令-2.文件属性

    在Linux系统中文件的属性有:文件类型.属主属性.属组属性.其他属性,使用10个字符表示,如下图: 其中第0位表示文件类型: 当为[ d ]则是目录 当为[ - ]则是文件: 若是[ l ]则表示为 ...

  9. 个人微信公众号搭建Python实现 -个人公众号搭建-总结(14.3.6)

    @ 目录 1.主要技术:Flask,requests 2.实现的主要功能 3.目录说明 4.运行方式 关于作者 1.主要技术:Flask,requests requirements.txt如下 req ...

  10. 【Go语言绘图】图片添加文字(二)

    这一篇将继续介绍gg库中绘制文字相关的方法,主要包括:DrawStringAnchored().DrawStringWrapped().MeasureMultilineString().WordWra ...