flutter 边框_Flutter作息定时器 app

2023-11-09

背景知识视频教程

学习Flutter&Dart构建iOS和Android应用 - 国外课栈​viadean.com Flutter&Dart-完整的Flutter应用开发课程 - 国外课栈​viadean.com Flutter的实际项目 - 国外课栈​viadean.com

介绍

在以下屏幕截图中,您可以看到我们将在第一部分中构建的布局。 为了使您更容易理解该布局需要做什么,我添加了边框,以显示小部件将如何放置在屏幕上:

我相信构建此布局的最简单方法是结合使用列和行小部件。 此屏幕中的主容器窗口小部件将是一列,将空间分成三部分,如下所示:

  1. 顶部的三个按钮:“工作”,“短暂休息”和“长时间休息”
  2. 中间的计时器
  3. 底部的两个按钮:“停止”和“重新启动”

在您最喜欢的编辑器中,创建一个新应用。

将新应用命名为production_timer

在main.dart文件中,删除示例代码。

输入以下代码:

</>

这段代码创建了一个基本的脚手架,这是我们大多数屏幕的基本布局,并在AppBar(我的工作计时器)中放置了一个标题,并在主体的中央放置了一个文本(同样是My Work Timer)。 结果应类似于以下屏幕截图:

接下来,让我们在main.dart文件底部为屏幕布局创建一个类,而不仅仅是返回Text。 我们将其称为TimerHomePage()。 如果您使用的是VS Code,Android Studio或IntelliJ IDEA,则还可以使用stless快捷方式使框架编写代码的一部分。 MyApp类结束后,只需键入stless。

至于类名,让我们选择TimerHomePage。 最终结果应如下:

</>

在build()方法中,不返回容器,而是从MyApp类中移动Scaffold:在appBar中,我们将显示应用程序的标题,在主体中将显示包含Column的Center小部件。 在TimerHomePage类中添加以下代码:

</>

我们可以通过调用刚刚创建的新类来简化MyApp类的build()方法上的代码,如下所示:

home: TimerHomePage(),

如果您立即尝试使用该应用程序,则应该仍然像以前一样看到一个空白屏幕,显示“我的工作计时器”应用程序栏标题。

现在,我们准备开始在屏幕上放置小部件。 由于我们需要构建五个具有非常相似功能的按钮小部件,因此最好为这些小部件创建一个新类,以保持其余代码的简洁性并节省一些键入操作。

让我们在应用程序的lib文件夹中创建一个名为widgets.dart的新文件,如下所示:

在这里,我们将创建一个名为ProductivityButton的新无状态小部件。 这将显示四个字段:颜色,文本,大小和Callback方法,以及用于设置值的构造函数。 小部件的代码如下:

</>

您可能已经注意到,参数包含在大括号({})中,并带有@required批注。 这是因为我们在这里使用命名参数。 使用命名参数的目的是在调用函数并传递值时,还指定要设置的参数的名称。 例如,当创建ProductivityButton的实例时,可以使用语法ProductivityButton(颜色:Colors.blueAccent,文本:“ Hello World”,onPressed:doSomething,大小:150)。 由于命名参数是按名称引用的,因此可以按任何顺序使用它们。

命名参数是可选的,但是您可以使用@required注释对它们进行注释,以指示该参数是必需的。

现在,我们已经创建了通用按钮小部件,我们需要在屏幕上放置按钮的一些实例。

顶部按钮应放在屏幕顶部的单行中。 它们应占据所有可用的水平空间,并为边缘留出一些空间,并且它们应根据屏幕的大小和方向来改变其宽度。

创建一个临时的空方法,以使方法可以传递给按钮。 我们稍后将其删除。 在MyApp类的底部添加以下代码:

void emptyMethod() {}

在MyApp类的顶部,让我们为要在屏幕上使用的默认填充声明一个常量,如下所示:

final double defaultPadding = 5.0;

现在,让我们在屏幕上放置顶部按钮:我们需要在此处使用Row小部件,并将其作为Column小部件的第一个元素。 在Flutter中,实际上可以将“行”窗口小部件包含到“列”窗口小部件中,反之亦然。

我们希望按钮占用所有可用的水平空间。 为此,我们将使用扩展的小部件,该小部件在放置固定元素之后会占用列(或行)的所有可用空间。 每个按钮都有一个前导和尾随的填充,以在元素之间创建一些空间。 编写代码以将前三个按钮添加到屏幕,如下所示:

</>

尝试该应用。 前面的代码的结果应类似于以下屏幕截图:

计时器应放置在屏幕中间,并在放置大小固定的顶部和底部行之后占用所有剩余空间。 现在,我们将仅在“列”小部件下使用“ Hello”文本作为占位符。 请注意,在这种情况下,在列而不是行中使用了Expanded,因此它占用了所有垂直可用空间,如以下代码段所示:

Expanded(child: Text("Hello")),

然后,我们将剩余的两个按钮“停止”和“重新启动”放置在屏幕底部,它们还将占据所有水平空间,除了它们和屏幕边框之间的一些填充外,如以下代码所示 块:

Row(children: [
Padding(padding: EdgeInsets.all(defaultPadding),),
Expanded(child: ProductivityButton(color: Color(0xff212121),
text: 'Stop', onPressed: emptyMethod)),
Padding(padding: EdgeInsets.all(defaultPadding),),
Expanded(child: ProductivityButton(color: Color(0xff009688),
text: 'Restart', onPressed: emptyMethod)),
Padding(padding: EdgeInsets.all(defaultPadding),),
],)

最终结果应类似于以下屏幕截图:

在您的应用中安装percent_indicator软件包

在Flutter中使用流和异步编程

在主屏幕上显示时间:StreamBuilder

启用按钮

导航到设置路线

建立设置屏幕布局

使用shared_preferences读写应用程序数据

源代码

Flutter作息定时器 app​viadean.com
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

flutter 边框_Flutter作息定时器 app 的相关文章

  • 芯片面积估算

    If giving total standard cell gate count all memory macro list including memory type bit width and depth all other macro
  • Socket中出现EOFException错误问题

    java io EOFException at java io ObjectInputStream PeekInputStream readFully ObjectInputStream java 2681 at java io Objec
  • 六、Vite 常用第三方库(axios、mockjs、sass、echars、element-plus、开箱即用)

    文章目录 一 参考 二 vite 创建 Vue 项目工程 2 1 create vite和vite的关系是什么呢 2 2 vue团队希望弱化vite的一个存在感 但是我们去学习的时候不能弱化的 2 3 创建工程 三 第三方库的安装 开箱即用
  • CMake:递归检查并拷贝所有需要的DLL文件

    文章目录 1 目的 2 设计 整体思路 多层依赖的处理 获取 DLL 所在目录 探测剩余的 DLL 文件 3 代码实现 判断 stack 是否为空 判断 stack 是否为空 获取所有 target 检测并拷贝 DLL 4 使用 1 目的
  • 苏州吴江区实现首单跨区域数字人民币试点场景应用

    作为数字人民币试点的首批城市 苏州一直在数字人民币应用场景的落地方面进展迅速 其中 苏州相城区在全市率先开展数字人民币场景建设及试点 截至目前 已开放试点场景7500余个 占全市总数近50 并在全国率先落地交通补贴批量代发 房屋契税缴纳 智
  • python num循环怎么从1开始

    如何实现python for循环从1开始 range 函数的作用和用法 编写一个从数值1开始的循环 执行后得到的结果 其他注意事项
  • 在OTFS学习中的一些总结

    双选特性 多径传播 gt 时延 gt 频率选择性 时延的倒数为相干带宽 在频域内信道相应的幅值大概保持不变的一段频率称为相干带宽 当信号的带宽小于相干带宽 或者说信号的传输时间 周期 大于时延拓展 信号之间没有干扰 我们认为信号是没有失真的
  • Win10下Anaconda使用conda activate激活环境出错

    直接输入conda activate pytorch 报如下错误 解决方法 1 在base路径下先输入activate 提示如下 2 再输入conda activate base 激活base环境 3 在输入conda activate p
  • [python知识] 爬虫知识之BeautifulSoup库安装及简单介绍

    一 前言 在前面的几篇文章中我介绍了如何通过Python分析源代码来爬取博客 维基百科InfoBox和图片 其文章链接如下 python学习 简单爬取维基百科程序语言消息盒 Python学习 简单网络爬虫抓取博客文章及思想介绍 python
  • awk使用shell变量,shell获取awk中的变量值

    awk使用shell变量 shell获取awk中的变量值 2012 04 13 09 36 28 分类 LINUX 字号 订阅 原文 http renyongjie668 blog 163 com blog static 160053120
  • 今天面试招了个18K的人,从腾讯出来的果然都有两把刷子···

    公司前段时间缺人 也面了不少测试 前面一开始瞄准的就是中级的水准 也没指望来大牛 提供的薪资在15 20k 面试的人很多 但平均水平很让人失望 看简历很多都是4年工作经验 但面试中 不提测试工具 仅仅基础的技术很多也知之不详 多数人数年的工
  • Android 系统启动流程简介

    1 Init 进程启动流程 2 Zygote启动流程 3 SystemServer启动流程 1 Init 进程启动流程 Android启动流程 init进程 gt Zygote进程 gt SystemServer进程 gt 各种应用进程 I
  • [源码解析] NVIDIA HugeCTR,GPU 版本参数服务器---(7) ---Distributed Hash之前向传播

    Python微信订餐小程序课程视频 https edu csdn net course detail 36074 Python实战量化交易理财系统 https edu csdn net course detail 35475 源码解析 NV
  • 【Php】PhpSpreadsheet安装的坑怎么这么多!

    提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 文章目录 人是代码非 一 PhpSpreadsheet不安装直接用行不行 二 安装的坑 1 缺少fileinfo扩展 2 下载中断 3 proc open函数被禁用 4 co
  • Jmeter 集合点详细讲解

    集合点 让所有请求在不满足条件的时候处于等待状态 如 我集合点设置为50 那么不满足50个请求的时候 这些请求都会集合在一起 处于等待状态 当达到50的时候 就一起执行 从而达到并发的效果 那么Jmeter中可以通过同步定时器Synchro
  • Mybatis

    最近又遇到mybatis的问题了 所以把之前写的和补充的笔记一起放上来 一 动态sql 在编写项目的时候经常需要拼接一些复杂的SQL语句 而拼接过程中很容易导致错误 而Mybatis的动态SQL功能正好能够解决这种问题 可以通过使用 if
  • 【长文预警】美团联合创始人王慧文清华产品课

    前言 一 成功和失败的产品 一般来说在一个领域里一款产品的成功对应着无数产品的失败 根据老王个人的经验 成功和失败的比例大约是1 30 失败的原因多种多样 有些啥都没做对 有些作对了一部分 这里列举的失败案例主要讲做对了一部分的 准确说算是
  • sonar.java.binaries的配置

    从sonarQube 4 12开始 sonar将会进行程序的动态检查 不配置sonar java binaries属性将会出错 From SonarJava version 4 12 binary files are required fo
  • 在 Mac 上使用 VMware 安装 Windows 11

    因为项目原因 需要在 windows 环境下测试一下 electron 的表现 于是就记录一下在 mac 虚拟机上安装 windows 的体验 总体来说难度不大 我电脑的情况 2020 款 macbook pro 16g 512g 前期准备

随机推荐

  • golang版本管理gvm

    今天小土带来一篇关于Go版本管理器gvm的小短文 废话不多说 开始安装 安装 如果你使用的mac mac 需要先安装xcode select 没安装过的同学可以按照如下命令进行执行安装 这里不做太多说明了 xcode select inst
  • 地震逃生【最大流模板题】

    题目链接 P1343 地震逃生 简单的最大流的模板 小心 0 的RE情况 读题 另外 写的是ISAP include
  • 微信小程序授权登录页面(有提示窗)

    微信小程序授权登录 有弹窗提示 1 效果显示 1 1 授权登录页面 1 2 授权登录提示弹窗 1 3 拒绝授权登录 1 4 允许登录后 跳转到小程序首页 2 代码 2 1 wxml 文件
  • 日志审计功能实现

    1 前言 日志审计功能就是将用户进行的增加 修改和删除操作内容 操作方法 操作人以及操作时间等统一格式后集中放入数据库存储 这样做是为了提高系统的安全性 方便系统发生事故后的溯源和恢复 2 日志审计实现 2 1 设计数据库 下图为数据库中的
  • react基础06--react综合案例-电商网站导航

    react基础06 react综合案例 电商网站导航 1 介绍 2 案例设计模块 2 1 分类导航数据模型设计 2 2 一级分类导航切换高亮效果 2 3 显示二级分类导航 2 4 路由跳转到二级导航的商品列表 2 5 商品搜索 3 注意事项
  • Go语言面试题--基础语法(29)

    文章目录 1 下面的代码有什么问题 2 下面代码最后一行输出什么 请说明原因 3 下面代码有什么问题 4 下面的代码输出什么 1 下面的代码有什么问题 func main data int 1 2 3 i 0 i fmt Println d
  • U-Boot启动流程详解

    参考 U Boot顶层目录链接脚本文件 u boot lds 介绍 作者 一只青木呀 发布时间 2020 10 23 13 52 23 网址 https blog csdn net weixin 45309916 article detai
  • VAR模型

    文章目录 一 VAR是什么 1 引入库 2 读入数据 3 执行程序 总结 一 VAR是什么 以金融价格为例 传统的时间序列模型比如ARIMA ARIMA GARCH等 只分析价格自身的变化 模型的形式为 其中称为自身的滞后项 但是VAR模型
  • Navicat安装教程

    众所周知 Navicat是一款轻量级的用于MySQL连接和管理的工具 非常好用 使用起来方便快捷 简洁 下面我会简单的讲一下其安装以及使用的方法 并且会附带相关的永久安装教程 简介 一般我们在开发过程中是离不开数据库的 Navicat是一款
  • svn: Can't find a temporary directory 问题解决

    Error Can t find temporary directory internal error 然后试了下其他的SVN源 发现均无法提交 并且update时也出现上面的错误信息 对比项目文件时出现 不能创建目录或文件 公司网站首页正
  • Nginx集群+websocket 获取websocket客户端的真实IP

    Nginx增加如下配置 proxy set header Host host proxy set header X Real IP remote addr proxy set header REMOTE HOST remote addr p
  • UMI多环境配置

    一般来说项目不止有dev和prod两个环境 umi可以通过环境变量 UMI ENV 区分不同环境来指定配置 需求 三套环境 gt 本地测试环境local 测试发布环境testbuild 正式环境probuild 1 在根目录新建 umirc
  • 云计算基础——云计算与移动互联网、物联网

    8 1 云计算与移动互联网 8 1 1 移动互联网的发展概况 移动互联网的发展概况 移动互联网是指以宽带IP为技术核心 可同时提供语音 数据 多媒体等业务服务的开什么是移动互联网 放式基础电信网络 从用户行为角度来看 移动互联网广义上是指用
  • shell命令以及运行原理(详解)

    Linux严格意义上说的是一个操作系统 我们称之为 核心 kernel 但我们一般用户 不能直接使用kernel 而是通过kernel的 外壳 程序 也就是所谓的shell 来与kernel沟通 1 从技术角度 Shell的最简单定义 命令
  • Redis实践(一):安装和部署

    memcache redis mongodb 是目前常用的内存数据库 他们应用的场景大致如下 redis 数据量较小的更性能操作和运算上 memcache 用于在动态系统中减少数据库负载 提升性能 做缓存 提高性能 适合读多写少 对于数据量
  • __builtin_expect, __builtin_unreachable和__builtin_prefetch

    builtin expect 该指令是gcc引入的 就是允许代码编写者把最有可能执行的分支告诉编译器 标准写法是 bultin expect exp n 意思是exp n的概率很大 这样编译器可以对代码进行优化 减少指令跳转带来的性能下降
  • elasticsearch bulk批量增删改(超详细)

    一 bulk的操作类型 1 1批量增 语法一 index操作 可以是创建文档 也可以是全量替换文档 类似于普通的put操作 POST bulk index index test index type test type id 12 scor
  • java调用串口,开箱即用

    作者 刘东标 撰写日期 2022 08 02 开发遇到问题 1 供应商提供的动态库各种底层代码有问题 指针也不对 参数也乱 加上长年不维护动态库 2 解决多个动态库问题 不同供应商提供动态库也不同 32位动态库和64位动态库 还有是供应商的
  • Python -BS4详细介绍

    Python BS4详细介绍 Python 在处理html方面有很多的优势 一般情况下是要先学习正则表达式的 在应用过程中有很多模块是非常方便的 先尝试使用BeautifulSoup和Urllib进行网页的处理 仅供学习 首先列举所需要导入
  • flutter 边框_Flutter作息定时器 app

    背景知识视频教程 学习Flutter Dart构建iOS和Android应用 国外课栈 viadean com Flutter Dart 完整的Flutter应用开发课程 国外课栈 viadean com Flutter的实际项目 国外课栈