专业的编程技术博客社区

网站首页 > 博客文章 正文

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

baijin 2025-05-23 15:14:13 博客文章 3 ℃ 0 评论

原来一直使用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 实现复杂效果,类似搭积木。

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表