flutter软件开发笔记24-回到原点,手搓代码
zhezhongyun 2025-05-26 20:15 18 浏览
原来一直使用qt c++开发,界面直接用界面设计师,也习惯了这种方法,改用代码方式设计界面一直不习惯,但flutter开发,没有界面设计师,只能用代码方式,学习了一个月这个框架了,今天尝试手动写原代码,突破这个结界。
理解 Flutter 代码逻辑需要从框架的核心设计入手。以下通过一个 手搓代码的极简指南,配合关键概念和可修改的代码示例,帮助你快速掌握 Flutter 的代码逻辑设计思想:
一、Flutter 代码核心逻辑(关键记忆点)
- 万物皆 Widget
- 界面元素(按钮、文本)、布局(行、列)、甚至整个页面都是 Widget
- 分为 无状态(StatelessWidget)和 有状态(StatefulWidget)
- 声明式 UI
- 通过 build() 方法 描述 UI 应该长什么样(而非逐步“绘制”)
- 当状态变化时,Flutter 自动对比新旧 Widget 树,智能更新差异部分
- 树状结构嵌套
- 通过 Widget 的嵌套组合构建复杂界面(类似 HTML 的嵌套结构)
- 如:Column > Text + Row > Icon + Text + ElevatedButton
二、手搓代码实战指南(带可修改区域)
import 'package:flutter/material.dart';
void main() => runApp(MyApp()); // 程序入口
// 核心组件(整个App的壳)
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp( // Material设计风格
home: HomePage(), // 默认显示首页
);
}
}
// 首页(有状态,可变化)
class HomePage extends StatefulWidget {
@override
_HomePageState createState() => _HomePageState();
}
class _HomePageState extends State<HomePage> {
int _counter = 0; // 状态变量(变化时会触发UI更新)
void _incrementCounter() {
setState(() { // 触发UI更新(必须调用)
_counter++;
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text("手搓代码练习")),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
// 显示状态变量
Text('点击次数: $_counter',
style: TextStyle(fontSize: 24)),
SizedBox(height: 20),
// 修改状态的按钮
ElevatedButton(
onPressed: _incrementCounter,
child: Text("点我增加"),
),
// 下方自由添加你的代码
// ----------------------------------
// (在此处添加你的实验代码)
// 例如:尝试加一个图片、输入框或新按钮
SizedBox(height: 20),
ElevatedButton(
onPressed: () => print("你点击了我!"),
child: Text("实验按钮"),
),
TextField(
decoration: InputDecoration(hintText: "输入文字试试"),
onChanged: (text) => print("输入内容: $text"),
)
// ----------------------------------
],
),
),
);
}
}
三 界面运行效果
四 理解与调试
1.理解代码结构(关键注释)
代码段 | 作用说明 |
setState(() { ... }) | 标记状态变化,触发UI重新渲染 |
build() 方法 | 声明当前 Widget 的UI结构 |
MaterialApp | 应用全局样式和导航的容器 |
Scaffold | 提供页面基础结构(AppBar/Body等) |
2. 调试技巧
- 在 onPressed 或 onChanged 中添加 print() 观察交互
- 使用 flutter hot reload 快速查看修改效果
- 故意写错代码,观察控制台错误提示
四、逻辑训练路线
- 基础阶段:修改现有代码中的文字、颜色、边距
- 中级阶段:添加新的交互元素(开关、滑动条)
- 高级阶段:拆分子组件、传递回调函数
- 实战阶段:结合路由导航,实现多页面数据传递
五、常见问题解答
Q1:为什么要有 StatefulWidget 和 StatelessWidget 的区别?
→ 区分是否需要内部状态管理,优化渲染性能。
Q2:setState() 是做什么的?
→ 通知 Flutter 框架:“我的状态变了,请重新调用 build() 方法更新UI”。
Q3:为什么 Widget 要层层嵌套?
→ Flutter 通过组合简单 Widget 实现复杂效果,类似搭积木。
相关推荐
- Angular UI组件库入门指南 - 如何安装和开始使用(一)
-
本文主要介绍如何安装和开始使用KendoUIforAngular。首先完成安装步骤。然后创建一个简单的应用程序,其中包含一些KendoUIforAngular组件,应用程序源代码可供您参考...
- SPSS22: 3.1.3 数据管理—复制数据属性
-
内容摘自《SPSS常用统计分析教程(SPSS22.0中英文版)(第4版)》3.1.3复制数据属性复制数据属性(CopyDataProperties)可用于建立相同调查问卷的空白数据集,或者复制其...
- 妙用Excel制作漂亮工整的工资条(excel表格中如何制作工资条)
-
工资条的制作方法并不难,但如何用Excel把工资条做得更美观、更有效率,可就要花费一点小心思了。许多人或许已经习惯了用工资明细表做员工工资统计并向上级汇报,将表中的条目慢慢复制粘贴然后打印给员工,这样...
- 如何运用EXCEL制作员工工资条,你造吗?
-
每个月工资发放之后,正规的公司应发给每个员工一个工资条。上面有员工当月工资的详细构成。但不能将工资明细表剪条发放,因为每个数字缺少对应项目,这就需要重新制作一张专门用来打印的工资条。作为劳动者,应该妥...
- 鸿蒙仓颉语言开发实战教程:实现商品分类页
-
今天继续为大家带来仓颉语言开发商城应用的实战教程,今天的内容是实现商品分类页。分类页面要在基本布局的基础上增加一些动态效果,比如点击状态的切换和两个列表容器的联动。下面为大家详细介绍。分类列表先来看左...
- 鸿蒙开发实战:一多开发之缩放布局
-
在HarmonyOS中,使用ArkTS语法进行自适应布局时,缩放布局是一种重要的布局方式。它允许组件根据外部容器的尺寸变化,按照预设的比例或权重调整自身的大小,从而确保在不同设备上都能呈现出良好的视觉...
- 基于WPF的电能质量检测系统上位机软件设计
-
郑恒持,蒋丁宇,卢兴泉,刘泊江(大连海事大学轮机工程学院,辽宁大连116026)摘要:电能质量直接影响着电力系统能否安全运行,为了能及时可靠地检测电能质量,采用全新的WindowsPresen...
- HarmonyOS实战:Tab顶部滑动悬停功能实现
-
前言日常开发过程中,遇到这种Scroll嵌套List列表滑动顶部悬停的场景十分常见,在鸿蒙开发时也正好实现了这个功能,本篇文章将带你一步步实现Tab顶部悬停的效果,建议点赞收藏!实现效果先...
- Axure教程:高级搜索(axure搜索功能怎么做)
-
在原型中,搜索是一个常见的交互设计。但不少同学因为技能不熟悉就没有做对应的交互效果。这篇文章,作者分享了设计搜索功能的整个流程,相信看完你也能做一个很牛逼的交互。高级搜索可以通过使用精确的关键词或短语...
- Excel小技巧: 如何设置自动列宽适应内容
-
我们在整理Excel表格的时候,通常会碰到单元格列宽混乱的情况(如下图所示),这会导致数据显示不完整或浪费空间导致打印不全,每次手动调整列宽都会费时费力,下面教你三个方法,让你一键设置自动列宽,适应单...
- 用好6个公式 Excel随意查询(excel中查询功能怎么用公式)
-
Excel表格一般会储存大量数据,我们可能不是每次都需要使用其中的所有数据,大部分时候只用到其中的一部分,所以数据查询功能就变得非常重要。为此,Excel本身也提供了多少查询方法,供我们使用。首先我们...
- 夏日PC消暑指南:机箱风道与风扇选择
-
进入六月以后北京的天气真是热得让人感觉喘不过气,大家天天打交道的笔记本和台式机更是连人都不如了,所谓热成狗真是一点也不夸张。年年大家在防暑抗高温这个问题上都是八仙过海各显神通,但是很多人光顾着自己凉快...
- Excel VBA必学技巧:用厘米设置单元格大小,办公效率翻倍
-
痛点:Excel默认单位太反人类!你是否经常遇到这些问题:-想设置精确的单元格尺寸,却只能用模糊的"字符宽度"和"磅值"?-设计打印报表时,毫米级的误差导致格式错乱...
- CSS小知识,分享14个你可能还未用上但又实用的CSS属性(下)
-
大家好,在上一篇文章里CSS小知识,分享14个你可能还未用上但又实用的CSS属性(上)我们一起学习了上半部分,这篇文章我们我们继续学习下半部分。八、CSSShakeEffect晃动效果CSS...
- 总结雅虎前端性能优化技巧(16条)(雅虎引擎还能用吗)
-
前言在日常开发中,有很多场景需要我们去做好前端优化,为了防止遗忘,加深记忆,今天参阅了一些资料以及自己的一些总结,梳理出来15条优化技巧。1.合并文件css、js合并,减少http请求数,每次http...
- 一周热门
- 最近发表
- 标签列表
-
- HTML 教程 (33)
- HTML 简介 (35)
- HTML 实例/测验 (32)
- HTML 测验 (32)
- JavaScript 和 HTML DOM 参考手册 (32)
- HTML 拓展阅读 (30)
- HTML常用标签 (29)
- HTML文本框样式 (31)
- HTML滚动条样式 (34)
- HTML5 浏览器支持 (33)
- HTML5 新元素 (33)
- HTML5 WebSocket (30)
- HTML5 代码规范 (32)
- HTML5 标签 (717)
- HTML5 标签 (已废弃) (75)
- HTML5电子书 (32)
- HTML5开发工具 (34)
- HTML5小游戏源码 (34)
- HTML5模板下载 (30)
- HTTP 状态消息 (33)
- HTTP 方法:GET 对比 POST (33)
- 键盘快捷键 (35)
- 标签 (226)
- HTML button formtarget 属性 (30)
- CSS 水平对齐 (Horizontal Align) (30)