Flutter基础(基础概念和方法)

概念比喻
StatefulWidget会变魔术的电视机
State电视机的小脑袋(记信息)
build 方法电视机变身显示新画面
setState按遥控器按钮改变状态
Scaffold电视机的外壳
  1. StatefulWidget:创建一个按钮组件。
  2. State:保存点赞数(比如 int likes = 0)。
  3. build () 方法:显示按钮和当前点赞数。
  4. 点击按钮时:调用 setState(() { likes++; })
  5. Flutter 自动触发:再次调用 build() 方法,更新 UI 显示新的点赞数。

Scaffold 是什么?

Scaffold 是 Flutter 提供的一个 基础页面框架,就像盖房子的 "脚手架" 一样,帮你快速搭建出一个符合 Material Design 设计规范的页面。

它提供了这些东西:

  • 顶部的导航栏(AppBar)
  • 中间的内容区域(body)
  • 底部的导航栏(BottomNavigationBar)
  • 浮动按钮(FloatingActionButton)
  • 侧边栏(Drawer)
  • 底部弹窗(SnackBar)

Scaffold 的常用属性

属性名作用
appBar顶部导航栏,显示标题、操作按钮(如搜索、菜单)等。
body页面的主体内容区域,可以是文本、图片、列表等任何组件。
floatingActionButton悬浮按钮,通常在右下角,用于执行主要操作(如 "添加")。
bottomNavigationBar底部导航栏,用于在不同页面 / 功能之间切换(如微信底部的 "微信、通讯录" 等)。
drawer侧边栏,从左侧滑出,通常用于显示菜单或用户信息。
backgroundColor页面背景颜色。

下面是一个包含 Scaffold 所有主要部分的代码:

import 'package:flutter/material.dart';void main() => runApp(const MyApp());class MyApp extends StatelessWidget {const MyApp({Key? key}) : super(key: key);@overrideWidget build(BuildContext context) {return MaterialApp(home: Scaffold(// 1. 顶部导航栏appBar: AppBar(title: const Text('Scaffold 示例'),actions: [IconButton(icon: const Icon(Icons.search),onPressed: () {},),],),// 2. 中间内容区域body: const Center(child: Text('这是页面的主体内容!'),),// 3. 悬浮按钮(右下角)floatingActionButton: FloatingActionButton(onPressed: () {},child: const Icon(Icons.add),),// 4. 底部导航栏bottomNavigationBar: BottomNavigationBar(items: const [BottomNavigationBarItem(icon: Icon(Icons.home),label: '首页',),BottomNavigationBarItem(icon: Icon(Icons.person),label: '我的',),],),// 5. 侧边栏(从左侧滑出)drawer: Drawer(child: ListView(children: const [DrawerHeader(child: Text('侧边栏标题'),decoration: BoxDecoration(color: Colors.blue,),),ListTile(title: Text('菜单项 1'),),ListTile(title: Text('菜单项 2'),),],),),),);}
}

运行效果示意图

+-----------------------------------+
|  <--  |  Scaffold 示例  |  [搜索]  |    ← AppBar(导航栏)
+-----------------------------------+
|                                   |
|                                   |
|        这是页面的主体内容!        |    ← body(主体内容)
|                                   |
|                                   |
+-----------------------------------+
|  [首页]        [我的]             |    ← BottomNavigationBar(底部导航)
+-----------------------------------+
|              [+]                  |    ← FloatingActionButton(悬浮按钮)
+-----------------------------------+

属性显示位置示例代码
MaterialApp(title: ...)操作系统任务管理器、应用列表MaterialApp(title: '计数器示例')
AppBar(title: ...)应用内当前页面的导航栏AppBar(title: Text('计数器应用'))

完整代码

import 'package:flutter/material.dart';void main() {// 启动Flutter应用,运行MyApp组件runApp(const MyApp());
}// 应用的根组件(无状态组件)
class MyApp extends StatelessWidget {const MyApp({Key? key}) : super(key: key);@overrideWidget build(BuildContext context) {return MaterialApp(title: '计数器示例',theme: ThemeData(primarySwatch: Colors.blue, // 设置主题色为蓝色),home: const CounterPage(), // 设置首页为CounterPage);}
}// 计数器页面(有状态组件)
class CounterPage extends StatefulWidget {const CounterPage({Key? key}) : super(key: key);@override_CounterPageState createState() => _CounterPageState();
}// 计数器页面的状态类
class _CounterPageState extends State<CounterPage> {int _counter = 0; // 声明一个变量存储计数器的值,初始值为0// 增加计数器值的方法void _incrementCounter() {setState(() {// 修改状态:将_counter的值加1// 调用setState后,Flutter会自动重新调用build()方法更新UI_counter++;});}// 减少计数器值的方法void _decrementCounter() {setState(() {if (_counter > 0) {_counter--; // 只有当计数器大于0时才减1}});}@overrideWidget build(BuildContext context) {// Scaffold是Material Design风格的页面框架return Scaffold(appBar: AppBar(title: const Text('计数器应用'), // 设置导航栏标题),body: Center( // 将子组件居中显示child: Column( // 垂直排列子组件mainAxisAlignment: MainAxisAlignment.center, // 垂直方向居中对齐children: <Widget>[const Text('当前计数:',style: TextStyle(fontSize: 20),),Text('$_counter', // 显示计数器的值style: Theme.of(context).textTheme.headline3, // 使用主题中的大字体),const SizedBox(height: 20), // 添加间距Row( // 水平排列子组件mainAxisAlignment: MainAxisAlignment.center, // 水平方向居中对齐children: [ElevatedButton(onPressed: _decrementCounter, // 点击时调用减少计数的方法child: const Icon(Icons.remove), // 按钮图标:减号),const SizedBox(width: 20), // 按钮之间的间距ElevatedButton(onPressed: _incrementCounter, // 点击时调用增加计数的方法child: const Icon(Icons.add), // 按钮图标:加号),],),],),),);}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/89409.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/89409.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

K8s——Pod(1)

目录 基本概念 ‌一、Pod 的原理‌ ‌二、Pod 的特性‌ ‌三、Pod 的意义‌ 状态码详解 ‌一、Pod 核心状态详解‌ ‌二、其他关键状态标识‌ ‌三、状态码运维要点‌ 探针 ‌一、探针的核心原理‌ ‌二、三大探针的特性与作用‌ ‌参数详解‌ ‌三、探针的核心意义…

MySQL 存储过程面试基础知识总结

文章目录 MySQL 存储过程面试基础知识总结一、存储过程基础&#xff08;一&#xff09;概述1.优点2.缺点 &#xff08;二&#xff09;创建与调用1.创建存储过程2.调用存储过程3.查看存储过程4.修改存储过程5.存储过程权限管理 &#xff08;三&#xff09;参数1.输入参数2.输出参…

NLP文本数据增强

文章目录 文本数据增强同义词替换示例Python代码示例 随机插入示例Python代码示例 随机删除示例Python代码示例 回译&#xff08;Back Translation&#xff09;示例Python代码示例 文本生成模型应用方式示例Python代码示例 总结 文本数据增强 数据增强通过对原始数据进行变换、…

(LeetCode 每日一题) 594. 最长和谐子序列 (哈希表)

题目&#xff1a;594. 最长和谐子序列 思路&#xff1a;哈希表&#xff0c;时间复杂度0(n)。 用哈希表mp来记录每个元素值出现的次数&#xff0c;然后枚举所有值x&#xff0c;看其x1是否存在&#xff0c;存在的话就可以维护最长的子序列长度mx。 C版本&#xff1a; class Sol…

FreePDF:让看英文文献像喝水一样简单

前言 第一次看英文文献&#xff0c;遇到不少看不懂的英文单词&#xff0c;一个个查非常费劲。 后来&#xff0c;学会了使用划词翻译&#xff0c;整段整段翻译查看&#xff0c;极大提升看文献效率。 最近&#xff0c;想到了一种更快的看文献的方式&#xff0c;那就是把英文PD…

Scikit-learn:机器学习的「万能工具箱」

——三行代码构建AI模型的全栈指南** ### **一、诞生背景&#xff1a;让机器学习从实验室走向大众** **2010年前的AI困境**&#xff1a; - 学术界模型难以工程化 - 算法实现碎片化&#xff08;MATLAB/C主导&#xff09; - 企业应用门槛极高 > **破局者**&#xff1a;Da…

GPT-1论文阅读:Improving Language Understanding by Generative Pre-Training

这篇论文提出了 GPT (Generative Pre-Training) 模型&#xff0c;这是 GPT系列&#xff08;包括 GPT-2, GPT-3, ChatGPT, GPT-4 等&#xff09;的奠基之作。它标志着自然语言处理领域向大规模无监督预训练任务特定微调范式的重大转变&#xff0c;并取得了显著的成功。 文章链接…

Hadoop大数据-Mysql的数据同步工具Maxwell安装与使用( 详解)

目录 一、前置基础知识 1、主从复制&#xff08;Replication&#xff09; 2、数据恢复 3、数据库热备 4、读写分离 5、存储位置及命名 二、Maxwell简介 1、简介 2、Maxwell同步数据特点 2.1.历史记录同步 2.2.断点续传 三、前期准备 1、查看网卡&#xff1a; 2、…

分布式系统的一致性模型:核心算法与工程实践

目录 一、分布式一致性的核心挑战二、主流一致性算法原理剖析1. Paxos&#xff1a;理论基础奠基者2. Raft&#xff1a;工业级首选方案3. ZAB&#xff1a;ZooKeeper的引擎 三、算法实现与代码实战Paxos基础实现&#xff08;Python伪代码&#xff09;Raft日志复制核心逻辑 四、关…

Apache HTTP Server部署全攻略

httpd 简介 httpd&#xff08;Apache HTTP Server&#xff09;是一款历史悠久的开源 Web 服务器软件&#xff0c;由 Apache 软件基金会开发和维护。自 1995 年首次发布以来&#xff0c;Apache 一直是 Web 服务器领域的领导者&#xff0c;以其稳定性、安全性和灵活性著称。根据…

信号处理学习——文献精读与code复现之TFN——嵌入时频变换的可解释神经网络(下)

书接上文: 信号处理学习——文献精读与code复现之TFN——嵌入时频变换的可解释神经网络&#xff08;上&#xff09;-CSDN博客 接下来是重要的代码复现&#xff01;&#xff01;&#xff01;GitHub - ChenQian0618/TFN: this is the open code of paper entitled "TFN: A…

线上故障排查:签单合同提交报错分析-对接e签宝

在企业管理系统中&#xff0c;合同生成与签署环节至关重要&#xff0c;尤其是在使用第三方平台进行电子签署时。本文将通过实际的报错信息&#xff0c;分析如何进行线上故障排查&#xff0c;解决合同生成过程中出现的问题。 #### 1. 错误描述 在尝试生成合同并提交至电子签署…

知攻善防靶机 Linux easy溯源

知攻善防 【护网训练-Linux】应急响应靶场-Easy溯源 小张是个刚入门的程序猿&#xff0c;在公司开发产品的时候突然被叫去应急&#xff0c;小张心想"早知道简历上不写会应急了"&#xff0c;于是call了运维小王的电话&#xff0c;小王说"你面试的时候不是说会应急…

原神八分屏角色展示页面(纯前端html,学习交流)

原神八分屏角色展示页面 - 一个精美的前端交互项目 项目简介 这是一个基于原神游戏角色制作的八分屏展示页面&#xff0c;采用纯前端技术实现&#xff0c;包含了丰富的动画效果、音频交互和视觉设计。项目展示了一些热门原神角色&#xff0c;每个角色都有独立的介绍页面和专属…

华为认证二选一:物联网 VS 人工智能,你的赛道在哪里?

一篇不讲情怀只讲干货的科普指南 一、华为物联网 & 人工智能到底在搞什么&#xff1f; 华为物联网&#xff08;IoT&#xff09; 的核心是 “万物互联”。 通过传感器、通信技术&#xff08;如NB-IoT/5G&#xff09;、云计算平台&#xff08;如OceanConnect&#xff09;&…

CloudLens for PolarDB:解锁数据库性能优化与智能运维的终极指南

随着企业数据规模的爆炸式增长,数据库性能管理已成为技术团队的关键挑战。本文深入探讨如何利用CloudLens for PolarDB实现高级监控、智能诊断和自动化运维,帮助您构建一个自我修复、高效运行的数据库环境。 引言:数据库监控的演进 在云原生时代,传统的数据库监控方式已不…

MySQL中TINYINT/INT/BIGINT的典型应用场景及实例

以下是MySQL中TINYINT/INT/BIGINT的典型应用场景及实例说明&#xff1a; 一、TINYINT&#xff08;1字节&#xff09; 1.状态标识 -- 用户激活状态&#xff08;0未激活/1已激活&#xff09; ALTER TABLE users ADD is_active TINYINT(1) DEFAULT 0; 适用于布尔值存储和状态码…

YOLOv13:最新的YOLO目标检测算法

[2506.17733] YOLOv13: Real-Time Object Detection with Hypergraph-Enhanced Adaptive Visual Perception Github: https://github.com/iMoonLab/yolov13 YOLOv13&#xff1a;利用超图增强型自适应视觉感知进行实时物体检测 主要的创新点提出了HyperACE机制、FullPAD范式、轻…

【深入浅出:计算流体力学(CFD)基础与核心原理--从NS方程到工业仿真实践】

关键词&#xff1a;#CFD、#Navier-Stokes方程、#有限体积法、#湍流模型、#网格收敛性、#工业仿真验证 一、CFD是什么&#xff1f;为何重要&#xff1f; 计算流体力学&#xff08;Computational Fluid Dynamics, CFD&#xff09; 是通过数值方法求解流体流动控制方程&#xff0…

qt常用控件--04

文章目录 qt常用控件labelLCD NumberProgressBar结语 很高兴和大家见面&#xff0c;给生活加点impetus&#xff01;&#xff01;开启今天的编程之路&#xff01;&#xff01; 今天我们进一步c11中常见的新增表达 作者&#xff1a;٩( ‘ω’ )و260 我的专栏&#xff1a;qt&am…