news 2026/10/22 7:30:51

Flutter学习day1--环境搭建与Dart基础

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Flutter学习day1--环境搭建与Dart基础

Flutter学习day1–环境搭建与Dart基础

想入门 Flutter,第一关不是 Widget,而是两件事:把环境跑起来、把 Dart 的基础语法理顺。本文从环境搭建讲到 Dart 变量声明的三个关键字,再用官方计数器 demo 拆解 Flutter 应用的最小骨架,最后说说 Flutter 的招牌能力——热重载。如果你是从 ArkTS/鸿蒙或前端转过来的开发者,文中附了对应的类比,可以对照着学。

一、环境搭建:先跑通 flutter doctor

安装 Flutter SDK 后,第一件事不是写代码,而是运行:

flutter doctor

它会逐项体检:Flutter SDK 本体、Android 工具链、Chrome(Web 调试用)、已连接设备等,有问题的项会直接给出修复建议,照着处理即可。

几个常见的坑:

  • 运行调试优先用 IDE 的官方 Flutter 扩展(Android Studio / VS Code)或终端flutter run;不要依赖第三方插件去直接调dart命令,容易遇到dart: command not found——本质是 SDK 没进 PATH,把flutter/bin加入 PATH 即可。
  • 环境是否健康的验收标准:官方计数器 demo 能跑起来,改一行文字保存后界面能热更新。

二、Dart 变量声明:var / final / const 三兄弟

关键字可变性值确定时机
var可重新赋值运行时
final只能赋值一次运行时
const不可变(深度不可变)编译期
vara=1;a=2;// OKfinalb=DateTime.now();// OK:运行时确定constc=DateTime.now();// 编译错误:编译期无法确定constlist1=[1,2,3];finallist2=[1,2,3];list1.add(4);// 编译错误:const 集合不可变list2.add(4);// OK:final 只锁引用本身

要点:

  • final允许值在运行时确定,比如从接口取回的数据;const必须在写代码时就能确定。
  • const是深度不可变:const修饰的集合连元素都不能改,而且相同的 const 值在内存中共享同一实例。
  • 类比其他语言:TypeScript 的const≈ Dart 的final(锁引用,内容可能可变);Dart 的const更像as const断言加深冻结。

实战提示:Flutter 中把不变的配置、颜色、样式声明为const,框架可以跳过不必要的重建,是最简单的性能优化手段。

三、最小应用骨架:计数器 demo 解剖

官方计数器 demo 是 Flutter 应用的最小可运行骨架,结构值得逐行看清:

voidmain(){runApp(constMyApp());// 挂载根 Widget}classMyAppextendsStatelessWidget{constMyApp({super.key});@overrideWidgetbuild(BuildContextcontext){returnMaterialApp(// 应用级配置:主题、首页、路由home:constMyHomePage(),);}}class_MyHomePageStateextendsState<MyHomePage>{int _counter=0;void_incrementCounter(){setState((){// 修改状态 + 触发重建_counter++;});}@overrideWidgetbuild(BuildContextcontext){returnScaffold(// 页面骨架:appBar / body / floatingActionButtonappBar:AppBar(title:constText('Flutter Demo')),body:Center(child:Text('$_counter')),floatingActionButton:FloatingActionButton(onPressed:_incrementCounter,child:constIcon(Icons.add),),);}}
  • runApp → MaterialApp → Scaffold是入口三件套:MaterialApp负责应用级配置,Scaffold提供页面骨架(标题栏、内容区、浮动按钮)。
  • 状态管理靠StatefulWidget+State;setState(() {...})修改状态并通知框架重新执行build(),是「数据驱动刷新」的标准写法。
  • 类比 ArkUI:MaterialApp≈ 应用入口配置,Scaffold≈ 页面布局容器,setState≈@State变量变更触发的刷新——声明式 UI、数据驱动的思路是相通的。

四、热重载:秒级见效的开发循环

Flutter 的招牌能力是热重载(Hot Reload):

  • 原理:保存代码后,框架增量编译改动的 Dart 代码,注入到正在运行的 Dart VM(JIT 模式),然后保留当前 State、重新执行build()刷新界面。改 UI 秒级见效,页面上已有的状态(比如输入框内容)不会丢。
  • 限制:main()、initState()这类只执行一次的代码,改动需要热重启(Hot Restart),状态会清空。
  • 与 ArkTS Previewer 的区别:Previewer 是独立的预览渲染器,渲染的是简化环境;热重载直接作用于运行中的 App 本体,状态保留是核心卖点。

调布局、颜色、动效时,热重载就是开发效率的核心:保存即所见。

小结

  • flutter doctor是环境排障第一入口,验收标准是计数器 demo 能跑、能热更新。
  • Dart 三兄弟一句话:var可变,final运行时定值,const编译期常量且深度不可变。
  • 最小骨架记住链条:runApp → MaterialApp → Scaffold → setState。
  • 热重载 = 增量注入 + 保留 State + 重跑build(),是 Flutter 迭代速度的来源。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/22 7:29:34

【AI大模型】显存复用:多任务共享模型显存的方法

【AI大模型】显存复用:多任务共享模型显存的方法 多个任务共用同一个模型时,若每个任务各占一份显存,显存随任务数线性膨胀,很快耗尽。显存复用的核心是让同一模型的权重只加载一份,KV Cache 按任务动态划分与回收,把显存占用从任务数解耦出来。本文给出完整方法:先讲显…

作者头像 李华
网站建设 2026/10/22 7:29:27

DTU 和 LoRa 模块有什么区别?工业无线回传怎么选

工业现场做无线数据回传&#xff0c;采购清单上经常同时出现 DTU 和 LoRa 模块两类设备&#xff0c;报价、配套方式与调试工作量差别不小。若把两者当成同一种东西比价&#xff0c;容易出现两种偏差&#xff1a;要么买了 LoRa 却发现数据送不到平台&#xff0c;要么为每个点位都…

作者头像 李华
网站建设 2026/10/22 7:27:51

小白程序员也能掌握的AI大模型应用开发,高薪岗位等你来!

本文强调了AI大模型应用开发工程师的重要性&#xff0c;这类人才能够将AI技术落地到企业业务中&#xff0c;获得高薪职位。文章指出&#xff0c;企业需求的是能够结合模型和业务的人才&#xff0c;而非单纯训练模型。随着AI技术的发展&#xff0c;应用开发、Agent系统、多模态系…

作者头像 李华
网站建设 2026/10/22 7:27:10

AI转型必看:三种服务方式助你轻松玩转大模型,小白也能轻松收藏学!

本文介绍了企业进行AI转型时&#xff0c;在选择算力服务方面有三种方式&#xff1a;本地部署、使用云服务、混合服务。这三种方式分别对应私有云、公有云和混合云。文章详细分析了每种方式的特点和适用场景&#xff0c;并指出企业可以根据自身情况选择合适的服务方式&#xff0…

作者头像 李华
网站建设 2026/10/22 7:25:57

从 SD 卡到电脑 U 盘:PSoC E84 + RT-Thread + CherryUSB 实战与排错记录

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华