Flutter技术学习

以下内容更适用于 不拘泥于教程学习,而是从简单项目入手的初学者。

在开始第一个项目之前,我们先要了解 两个概念。

Widget 和 属性

  • Widget 是用户界面的基本构建块,可以是任何 UI 元素。
  • 属性 是 widget 类中定义的变量,用于配置和定制 widget 的外观和行为。
  • 当你创建一个 widget 时,可以通过构造函数传递参数来设置这些属性,从而定制 widget 的表现。
  • Widget包含属性

UI 元素:Text、Image、Container、Column、AppBar 、布局等等

外观:颜色、大小、形状等等

行为:点击事件、动画、数据更新等等

vscode创建默认项目(这里默认前置工作都已经准备好了)

1. Hellow world

替换lib\main.dart

import 'package:flutter/material.dart';void main() {runApp(const MyApp());
}// 定义无状态组件
class MyApp extends StatelessWidget{const MyApp({super.key});@overrideWidget build(BuildContext context){return MaterialApp(// 初始标题title: 'Welcome to flutter',// 初始页面home: Scaffold(appBar: AppBar(title: const Text('Welcome to flutter'),),// 居中   一个子widgetbody: const Center(child: Text('Hellow World', // 字体样式style: TextStyle(// 字体颜色color: Colors.green,)),),// 垂直排列 多个子widget// body: Column(//   // 只能定义一个children属性 可包含 一个wedget或者wedget列表//   children: [//     const Text("Hello World"),//     Image.network("https://gd-hbimg.huaban.com/88b49ee5dc63c49f26d984a71ce061729f27070c3124c-jZyeMc_fw1200webp",fit: BoxFit.cover),//     const Center(//       child: Text("Hello world"),//     ),//   ],// ),),);}
}

flutter run 命令运行 

2. 使用依赖包(package) 

包管理:https://pub.dev/

 打开包管理网站 搜索 english_words 

替换lib\main.dart   终端运行  flutter packages get  获取依赖包 

import 'package:flutter/material.dart';
// 引入 英文单词 包
import 'package:english_words/english_words.dart';void main() {runApp(const MyApp());
}// 定义无状态组件
class MyApp extends StatelessWidget{const MyApp({super.key});@overrideWidget build(BuildContext context){return MaterialApp(// 初始标题title: 'Welcome to flutter',// 初始页面home: Scaffold(appBar: AppBar(title: const Text('Welcome to flutter'),),// 居中   一个子widgetbody: Center(child: Text(generateWordPairs().take(10).map((pair) => pair.asPascalCase).join('\n'), // 字体样式style: TextStyle(// 字体颜色color: Colors.green,)),),),);}
}

保存 终端 输入r  热重载运行 

3. 使用有状态的部件(Stateful widget) 

替换lib\main.dart

import 'package:flutter/material.dart';void main() {runApp(MyApp());
}// 定义有状态组件class MyApp extends StatefulWidget{@override_MyAppState createState() => _MyAppState();}// 管理组件状态
class _MyAppState extends State<MyApp>{// 初始化变量int _counter = 0;// 定义一个方法void _incrementCounter(){// 触发组件更新setState(() {_counter++;});}@overrideWidget build(BuildContext context) {return MaterialApp(title: '计数器',home: Scaffold(appBar: AppBar(title: const Text("计数器"),),body: Center(child: Text(// 状态改变时自动更新'你点击了 $_counter 次'),),// 浮动动作按钮floatingActionButton: FloatingActionButton(// 按钮被按下时调用 _incrementCounter方法onPressed: _incrementCounter,// 按钮的提示文本tooltip: "Increment",  // 按钮上的图标child: const Icon(Icons.add),),));}
}

保存 终端 输入r  热重载运行 

4. 创建一个无限滚动的 ListView  

替换lib\main.dart

import 'package:flutter/material.dart';
import 'package:english_words/english_words.dart';void main() => runApp(MyApp());// 无状态组件
class MyApp extends StatelessWidget {@overrideWidget build(BuildContext context) {return MaterialApp(title: '无限滚动列表',// 主页为 RandomWords 组件home: RandomWords(),);}
}// RandomWords 类  有状态组件
class RandomWords extends StatefulWidget {@override_RandomWordsState createState() => _RandomWordsState();
}//  _RandomWordsState 组件,是RandomWords的状态
class _RandomWordsState extends State<RandomWords> {//  final声明的变量,引用是不可变的,也就是不可重新赋值;内容是可变的,也就是可向列表内容添加或删除// 声明列表并指定集合中元素的类型为WordPairfinal _suggestions = <WordPair>[];// 常量 设置字体样式final _biggerFont = const TextStyle(fontSize: 18.0);@overrideWidget build(BuildContext context) {return Scaffold(appBar: AppBar(title: const Text('无限滚动列表'),),//  body部分单独抽出,避免嵌套过多 body: _buildSuggestions(),);}Widget _buildSuggestions(){// 构建无限滚动列表。滑动时触发return ListView.builder(// 内边距padding: const EdgeInsets.all(16.0),// 回调函数,用于生成每个列表项itemBuilder: (context,i){print('当前索引:$i');// 如果是奇数 返回分割线if(i.isOdd) return const Divider();//  i 除以 2, 并向下取整final index = i ~/ 2;print('当前实际单词对数量:$index');if(index >= _suggestions.length){_suggestions.addAll(generateWordPairs().take(10));}print('列表内容:$_suggestions');return _buildRow(_suggestions[index]);});}Widget _buildRow(WordPair pair){return ListTile(title: Text(// 将两个单词组合成PascalCase 格式的字符串pair.asPascalCase,style: _biggerFont,),);}
}

保存 终端 输入r  热重载运行  

 

5. 添加交互

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

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

相关文章

linux 效率化 - zsh + tmux

文章目录 简介涉及的资料/代码仓库让我们开始吧1. Oh my Zsh!2. 终端主题 - powerlevel10k &#xff08;赋能优雅终端界面&#xff09;3. Oh my Tmux!安装完成&#xff0c;再加点料1. tmux2. zsh 结语进阶配置&#xff08;发烧友关注&#xff09;zsh-vim-mode&#xff08;终端支…

拉拢商家、直播PK,这届双11开始卷平台

文丨郭梦仪 在一声声“上链接”中&#xff0c;不少网友在昨晚已经成为了第一批“尾款人”。第一份战报也在今日傍晚发出。 据天猫双11战报显示&#xff0c;活动首小时&#xff0c;大家电整体成交同比去年双11预售同期暴涨765%。仅开售4小时&#xff0c;老板、TCL、西门子、方太…

【Docker】安装部署项目流程(Pycharm版)

安装部署步骤 1.准备项目 第一步要准备好你所需要部署的项目&#xff0c;确保在工作目录下所以程序.py文件正常调用并能正确运行 如上&#xff0c;main要在工作目录中能跑通&#xff0c;这里有一点需要注意 在IDE src不要标记为源代码根目录&#xff0c;观察一下是否能跑通代…

【Vue】Vue扫盲(三)计算属性和监听器

【Vue】Vue扫盲&#xff08;一&#xff09;事件标签、事件修饰符&#xff1a;click.prevent click.stop click.stop.prevent、按键修饰符、及常用指令 【Vue】Vue扫盲&#xff08;二&#xff09;指令&#xff1a;v-for 、v-if、v-else-if、v-else、v-show 文章目录 1、 计算属…

|动漫爬取|001_djangodjango基于Spark的国漫推荐系统的设计与实现2024_tpd6q1o4

目录 系统展示 开发背景 代码实现 项目案例 获取源码 博主介绍&#xff1a;CodeMentor毕业设计领航者、全网关注者30W群落&#xff0c;InfoQ特邀专栏作家、技术博客领航者、InfoQ新星培育计划导师、Web开发领域杰出贡献者&#xff0c;博客领航之星、开发者头条/腾讯云/AW…

【3dgs】3DGS与NeRF对比

以下是 3DGS&#xff08;3D Geometry Sensing&#xff09;与 NeRF&#xff08;Neural Radiance Fields&#xff09;对比表格&#xff1a; 更加详细的资料&#xff0c;轻参考&#xff1a; NERF/3DGS 对比维度3DGS (3D Geometry Sensing)NeRF (Neural Radiance Fields)基本原理…

透过 Diffusion Transformer 探索生成式模型的技术演进

SiT: Exploring Flow and Diffusion-based Generative Models with Scalable Interpolant Transformers 一、前言 扩散模型为代表的生成式模型&#xff0c;以其深刻的还原论的哲学原理作为内在基础&#xff0c;辅以机器学习领域各类优秀的模型设计&#xff0c;在各个学术和应…

性能与体验登顶,海马云电脑重新定义行业,领跑未来工作与娱乐方式

&#xff08;图片来源&#xff1a;Pixels&#xff09; 一个行业的增长拐点正在到来。 数科星球原创 作者丨苑晶 编辑丨大兔 2024年&#xff0c;《黑神话悟空》来到。受此刺激&#xff0c;云电脑行业迎来发展的春天。 作为一款3A级游戏大作&#xff0c;其对图形处理单元&…

### 更新数据库时出错。原因:java.sql.SQLException: No database selected

更新数据库时出错。原因&#xff1a;java.sql.SQLException: No database selected 问题&#xff1a;原因&#xff1a;解决办法&#xff1a; 问题&#xff1a; 在基于idea环境中学习搭建mybatis框架时&#xff0c;MySQL数据库执行插入语句遇到以下异常&#xff1a; com.intel…

【含文档】基于Hadoop平台的大学多媒体教学管理系统(含源码+数据库+lw)

1.开发环境 开发系统:Windows10/11 架构模式:MVC/前后端分离 JDK版本: Java JDK1.8 开发工具:IDEA 数据库版本: mysql5.7或8.0 数据库可视化工具: navicat 服务器: SpringBoot自带 apache tomcat 主要技术: Java,Springboot,mybatis,mysql,vue 2.视频演示地址 3.功能 系统定…

【嵌入式】手把手教你入门STM32的GPIO:初识GPIO输出

1.GPIO简介 STM32是一系列基于ARM Cortex-M内核的32位微控制器。该系列微控制器广泛应用于计算机、通讯、工业自动化、消费电子、汽车电子、医疗仪器及家庭电器等领域。该系列控制器具有高性能、低功耗、智能化等特点。其中&#xff0c;GPIO就是STM32控制器中的一种重要的通用输…

《向量数据库指南》——Naive RAG的复杂问题困境

哈哈,各位向量数据库领域的探索者们,大家好!我是大禹智库的向量数据库高级研究员王帅旭,也是《向量数据库指南》的作者。今天,咱们就来聊聊Naive RAG(Retrieval-Augmented Generation,检索增强生成)方法的那些事儿,特别是它在处理复杂问题时的局限性。相信我,这篇文章…

ros1编译wpr_simulation库

目录 安装项目依赖包编译将环境参数加载到终端程序中运行编译好的ros程序 首先你下载好这个库以后。 安装项目依赖包 scripts库中&#xff0c;存放的是一些依赖项安装脚本以及python脚本。 进入到这个路径的终端。 输入 ./install_for_noetic.sh编译 输入下面命令&#xf…

轮转数组【补充】

本章概述 前情回顾方法一方法二总结彩蛋时刻&#xff01;&#xff01;&#xff01; 前情回顾 点击&#xff1a;轮转数组。 在上面一章的《初阶数据结构【1】》里面&#xff0c;咱们通过轮转数组引出了算法复杂度的概念。咱们当时写的那个算法有点小问题&#xff0c;38个测试用…

SpringBoot技术在人事管理中的应用:系统开发全解析

2相关技术 2.1 MYSQL数据库 MySQL是一个真正的多用户、多线程SQL数据库服务器。 是基于SQL的客户/服务器模式的关系数据库管理系统&#xff0c;它的有点有有功能强大、使用简单、管理方便、安全可靠性高、运行速度快、多线程、跨平台性、完全网络化、稳定性等&#xff0c;非常适…

windows下载配置CAS单点登录

下载 github下载 云盘瞎子啊 版本对应jdk&#xff0c;根据自身环境下载对应版本的cas。 安装 下载完成之后解压 按照.md文档执行打包命令 build.bat package配置 如果不用https&#xff0c;需要进行以下配置&#xff1a; 修改配置文件application.properties 在最后一行…

《大规模语言模型从理论到实践》第一轮学习--Fine-tuning微调

第一轮学习目标&#xff1a;了解大模型理论体系 第二轮学习目标&#xff1a;进行具体实操进一步深入理解大模型 从大语言模型的训练过程来理解微调 大预言模型训练主要包含四个阶段&#xff1a;预训练、有监督微调、奖励建模、强化学习。 预训练&#xff08;Pretraining&…

大数据-170 Elasticsearch 云服务器三节点集群搭建 测试运行

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; 目前已经更新到了&#xff1a; Hadoop&#xff08;已更完&#xff09;HDFS&#xff08;已更完&#xff09;MapReduce&#xff08;已更完&am…

注意力机制2024持续发力!多尺度卷积+Attention一举拿下高分!模型准确率几乎100%

如何构建出更强大灵活的深度学习模型&#xff1f;或许我们可以考虑一个先进的方法&#xff1a;多尺度卷积注意力机制。 多尺度卷积先提供丰富的特征信息&#xff0c;注意力机制再从中筛选出关键信息&#xff0c;这样结合起来&#xff0c;不仅可以进一步提高模型的识别精度和效…

ubuntu中多cuda版本兼容问题

当ubuntu中已经有老版本的cuda时&#xff0c;按正常步骤直接下载新的cuda和cudnn&#xff0c;只需要注意在下载新的cuda版本时&#xff0c;出现“A symlink already exists at /usr/local/cuda. Update to this installation?”&#xff0c;选择“no”&#xff0c;之后按如下的…