百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

flutter软件开发笔记24-回到原点,手搓代码

zhezhongyun 2025-05-26 20:15 18 浏览

原来一直使用qt c++开发,界面直接用界面设计师,也习惯了这种方法,改用代码方式设计界面一直不习惯,但flutter开发,没有界面设计师,只能用代码方式,学习了一个月这个框架了,今天尝试手动写原代码,突破这个结界。

理解 Flutter 代码逻辑需要从框架的核心设计入手。以下通过一个 手搓代码的极简指南,配合关键概念和可修改的代码示例,帮助你快速掌握 Flutter 的代码逻辑设计思想:


一、Flutter 代码核心逻辑(关键记忆点)

  1. 万物皆 Widget
  2. 界面元素(按钮、文本)、布局(行、列)、甚至整个页面都是 Widget
  3. 分为 无状态(StatelessWidget)和 有状态(StatefulWidget)
  4. 声明式 UI
  5. 通过 build() 方法 描述 UI 应该长什么样(而非逐步“绘制”)
  6. 当状态变化时,Flutter 自动对比新旧 Widget 树,智能更新差异部分
  7. 树状结构嵌套
  8. 通过 Widget 的嵌套组合构建复杂界面(类似 HTML 的嵌套结构)
  9. 如: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 快速查看修改效果
  • 故意写错代码,观察控制台错误提示

四、逻辑训练路线

  1. 基础阶段:修改现有代码中的文字、颜色、边距
  2. 中级阶段:添加新的交互元素(开关、滑动条)
  3. 高级阶段:拆分子组件、传递回调函数
  4. 实战阶段:结合路由导航,实现多页面数据传递

五、常见问题解答

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...