视频地址;

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. 找回Xcode7的代码折叠功能

    升级到Xcode7后,会发现代码折叠功能不见了,这是怎么回事? 其实这个功能还在的,用以下的快捷键仍然可以折叠代码.只是不能用鼠标实现折叠了:在Xcode菜单里选择Preference——Text E ...

  2. restframework-总结

    1. 规范 - 版本控制 - 部署专用的域名(防止跨域攻击) - 因为restframework又称为面向资源的编程所以url名词需要用专业的名词去表示 - 请求方式method - url上可以传递 ...

  3. 面向对象基础——String类

    String类的两种实例化方法  A:直接赋值 public class StringDemo01{ public static void main(String args[]){ String na ...

  4. 如何获取ipa 包的图片

    突然想起当初刚学习iOS的时候,就经常通过抓包和提取素材的方式来模仿App,今天就教大家如何一步步提取App的素材! 大家是否有过想要获取别人的素材的想法?看到某些App的资源很不错,很想导出来用用, ...

  5. 【BZOJ3307】雨天的尾巴 线段树合并

    [BZOJ3307]雨天的尾巴 Description N个点,形成一个树状结构.有M次发放,每次选择两个点x,y对于x到y的路径上(含x,y)每个点发一袋Z类型的物品.完成所有发放后,每个点存放最多 ...

  6. EasyDarwin开源流媒体音视频云平台遇到的奇葩问题:内网运行正常,公网流媒体不通

    最近在帮助EasyDarwin的用户部署EasyNVR+EasyDarwin云平台+EasyClient方案的过程中,遇到一个问题,EasyNVR分布在用户各地区现场的内网中,EasyDarwin云平 ...

  7. BZOJ3627: [JLOI2014]路径规划

    BZOJ3627: [JLOI2014]路径规划 Description 相信大家都用过地图上的路径规划功能,只要输入起点终点就能找出一条最优路线.现在告诉你一张地图的信息,请你找出最优路径(即最短路 ...

  8. s1考试 图书管理系统 结构体版

    #include <iostream> #include <string> #include <cstdio> #include <cstdlib> # ...

  9. Mongoose学习(1)

    1.Schema : 一种以文件形式存储的数据库模型骨架,不具备数据库的操作能力    Model : 由Schema发布生成的模型,具有抽象属性和行为的数据库操作对    Entity : 由Mod ...

  10. 相机标定过程(opencv) + matlab参数导入opencv + matlab标定和矫正

    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 辛苦原创所得,转载请注明出处 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% ...