视频地址;

https://www.bilibili.com/video/av39709290/?p=12

博客地址:

https://jspang.com/post/flutterDemo.html#toc-b97

要实现的效果;

这里主要是用我们的流式布局

顺序排,一般到头了 会顺序往下排列。

还会学到 媒体查询、手势操作

先写main.dart

创建warp_demo.dart

这个组件肯定是动态的。

那些加号都是数组生成的,所以这里声明一个数组。数组里面添加按钮,添加按钮我们需要单独写一个方法

我们的Container是没有手势识别的。如果想让它具有手势识别,就要外层给他加一个GestureDetector手势识别

相当于我们 html里面的div我们要向让它点击挑战链接的话,就在外层加一个a标签。

点击的时候触发的事件:我们现在还没有这个buildPhoto方法

创建黄色的正方形的组件buildPhoto方法

buildPhoto也返回一个widget

开始洗build

代码修正,

因为是一个动态的组件,所以要修改里面的list的状态的时候 必须使用setState方法

效果展示:

每次点击加好左侧就会加一个照片的黄色正方形。

代码:

import 'package:flutter/material.dart';
import 'warp_demo.dart';
void main() => runApp(MyApp()); class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData.light(),//轻量级的皮肤
home: WarpDemo()
);
}
}

main.dart

import 'package:flutter/material.dart';

class WarpDemo extends StatefulWidget {
@override
_WarpDemoState createState() => _WarpDemoState();
} class _WarpDemoState extends State<WarpDemo> {
List<Widget> list; void initState() {
super.initState();
list=List<Widget>()
..add(buildAddButton());//这里添加了一个buildAddButton的方法,我们在下面去创建
}
@override
Widget build(BuildContext context) {
final width=MediaQuery.of(context).size.width;//得到屏幕的宽度
final height=MediaQuery.of(context).size.height;//屏幕的高度
return Scaffold(
appBar: AppBar(title: Text('Wrap流式布局'),),
body: Center(//让它居中显示用
child: Opacity(
opacity: 0.8,//为了让它看起来有点透明的效果
child: Container(
width: width,
height: height/,//屏幕高度的一半
color: Colors.grey,
child: Wrap(//然后使用流式布局
children: list,//就把list放在这
spacing: 26.0,//间距
),
),
),
),
);
}
//这个方法返回了一个组件
Widget buildAddButton(){
// 手势识别,能识别我们手机上的好几种手势
return GestureDetector(
onTap: (){
if(list.length<){
setState(() {
list.insert(list.length-, buildPhoto());
});
}
},
child: Padding(
padding: const EdgeInsets.all(8.0),//内边距
child: Container(
width: 80.0,
height: 80.0,
color: Colors.black54,
child: Icon(Icons.add),
),
),
);
} Widget buildPhoto(){
return Padding(
padding: const EdgeInsets.all(8.0),
child: Container(
width:80.0,
height: 80.0,
color: Colors.amber,
child: Center(
child: Text('照片'),
),
),
);
}
}

warp_demo.dart

  

20个Flutter实例视频教程-第12节: 流式布局 模拟添加照片效果的更多相关文章

  1. 20个Flutter实例视频教程-第10节: 一个不简单的搜索条-1

    20个Flutter实例视频教程-第10节: 一个不简单的搜索条-1 视频地址: https://www.bilibili.com/video/av39709290/?p=10 博客地址: https ...

  2. 20个Flutter实例视频教程-第13节: 展开闭合案例

    20个Flutter实例视频教程-第13节: 展开闭合案例 视频地址: https://www.bilibili.com/video/av39709290/?p=13 博客地址: https://js ...

  3. 20个Flutter实例视频教程-第03节: 不规则底部工具栏制作-1

    第03节: 不规则底部工具栏制作-1 博客地址: https://jspang.com/post/flutterDemo.html#toc-973 视频地址: https://www.bilibili ...

  4. 20个Flutter实例视频教程-第05节: 酷炫的路由动画-1

    视屏地址: https://www.bilibili.com/video/av39709290/?p=5 博客地址: https://jspang.com/post/flutterDemo.html# ...

  5. 20个Flutter实例视频教程-第02节: 底部导航栏制作-2

    视频地址: https://www.bilibili.com/video/av39709290?p=2 博客地址: https://jspang.com/post/flutterDemo.html#t ...

  6. 20个Flutter实例视频教程-第04节: 不规则底部工具栏制作-2

    视频地址: https://www.bilibili.com/video/av39709290/?p=4 博客地址: https://jspang.com/post/flutterDemo.html# ...

  7. 20个Flutter实例视频教程-第06节: 酷炫的路由动画-2

    博客地址: https://jspang.com/post/flutterDemo.html#toc-94f 视频地址: https://jspang.com/post/flutterDemo.htm ...

  8. 20个Flutter实例视频教程-第07节: 毛玻璃效果制作

    视频地址: https://www.bilibili.com/video/av39709290/?p=7 博客地址: https://jspang.com/post/flutterDemo.html# ...

  9. 20个Flutter实例视频教程-第08节: 保持页面状态

    博客地址: https://jspang.com/post/flutterDemo.html#toc-bb9 视频地址: https://www.bilibili.com/video/av397092 ...

随机推荐

  1. C/C++,java开源数学计算库

    有限元分析.数值计算.三维建模.信号处理.性能分析.仿真分析...这些或多或少与我们常用的软件息息相关,假如有一天你只需要这些大型软件系统的某一个很有限的功能,你是不是也要因此再用一用那动辄几个g的软 ...

  2. struts2的核心和工作原理 (转)

    转自--------http://blog.csdn.net/laner0515/article/details/27692673 在学习struts2之前,首先我们要明白使用struts2的目的是什 ...

  3. linux杂谈(十四):ftp的企业应用级的配置(一)

    版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/linux_player_c/article/details/24869877 1.ftp简单介绍 ( ...

  4. uni-app 创建的第一个应用

    本人微信公众号:前端修炼之路,欢迎关注 背景介绍 经过上一篇文章uni-app官方教程学习手记的学习之后,我就着手做这个项目了. 目前已经初步搭出了整体的框架,秉着取之于社会,回馈于社会的原则,我将这 ...

  5. mtk6589显示子系统笔记(一)

    拿到MT6589的版本不久,发现显示系统代码结构改变很大.做些备忘,后续不忙的时候可以继续看. MT6589之前的MTK的Android系统显示系统同featurePhone基本一致. 先来回顾下MT ...

  6. ffmpeg av_interleaved_write_frame Operation not permitted

    今天在使用ffmpeg时出现了Operation not permitted通过增加打印信息发现是在av_interleaved_write_frame出现的问题, 昨天还没出现这个问题,很奇怪,就把 ...

  7. SSL协议、HTTP和HTTPS和区别

    SSL协议 SLL协议的握手过程 开始加密通信之前,客户端和服务器首先必须建立连接和交换参数,这个过程叫做握手(handshake). 第一步,客户端给出协议版本号.一个客户端生成的随机数(Clien ...

  8. Linux:普通用户不能执行ifconfig命令问题

    有客户现场服务器禁用了root帐号,在普通帐号下,执行ifconfig,提示bash:ifconfig command not found: 导致业务系统无法用普通帐号获取ifcnofig的MAC地址 ...

  9. Grunt 自动编译 Less 文件配置

    1.安装Grunt http://www.gruntjs.net/getting-started 2.编辑 package.json 文件 { "name": "Grun ...

  10. 我的CSDN博客

    从csdn搬过来的: csdn地址:http://blog.csdn.net/WR_technology