20个Flutter实例视频教程-第12节: 流式布局 模拟添加照片效果
视频地址;
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节: 流式布局 模拟添加照片效果的更多相关文章
- 20个Flutter实例视频教程-第10节: 一个不简单的搜索条-1
20个Flutter实例视频教程-第10节: 一个不简单的搜索条-1 视频地址: https://www.bilibili.com/video/av39709290/?p=10 博客地址: https ...
- 20个Flutter实例视频教程-第13节: 展开闭合案例
20个Flutter实例视频教程-第13节: 展开闭合案例 视频地址: https://www.bilibili.com/video/av39709290/?p=13 博客地址: https://js ...
- 20个Flutter实例视频教程-第03节: 不规则底部工具栏制作-1
第03节: 不规则底部工具栏制作-1 博客地址: https://jspang.com/post/flutterDemo.html#toc-973 视频地址: https://www.bilibili ...
- 20个Flutter实例视频教程-第05节: 酷炫的路由动画-1
视屏地址: https://www.bilibili.com/video/av39709290/?p=5 博客地址: https://jspang.com/post/flutterDemo.html# ...
- 20个Flutter实例视频教程-第02节: 底部导航栏制作-2
视频地址: https://www.bilibili.com/video/av39709290?p=2 博客地址: https://jspang.com/post/flutterDemo.html#t ...
- 20个Flutter实例视频教程-第04节: 不规则底部工具栏制作-2
视频地址: https://www.bilibili.com/video/av39709290/?p=4 博客地址: https://jspang.com/post/flutterDemo.html# ...
- 20个Flutter实例视频教程-第06节: 酷炫的路由动画-2
博客地址: https://jspang.com/post/flutterDemo.html#toc-94f 视频地址: https://jspang.com/post/flutterDemo.htm ...
- 20个Flutter实例视频教程-第07节: 毛玻璃效果制作
视频地址: https://www.bilibili.com/video/av39709290/?p=7 博客地址: https://jspang.com/post/flutterDemo.html# ...
- 20个Flutter实例视频教程-第08节: 保持页面状态
博客地址: https://jspang.com/post/flutterDemo.html#toc-bb9 视频地址: https://www.bilibili.com/video/av397092 ...
随机推荐
- ORCAD元件属性白色区域和黄色区域的理解
白色部分为instance属性,黄色部分为occurence 属性 在平坦式电路中,黄色部分是默认不显示的. 在层次式电路中,黄色部分会显示. 如果这两个区域的Reference不同,以黄色 ...
- Something about cache
http://www.tyut.edu.cn/kecheng1/2008/site04/courseware/chapter5/5.5.htm 5.5 高速缓冲存储器cache 随着CPU时钟速率的不 ...
- Learning English From Android Source Code:2 Ampersand
这一次想把标点符号的英语表达总结一下,这些单词非常重要但easy被我们忽视.以我的经验,还是多认识几个.以备不时之需. 以下从"标点符号"開始: punctuation [英][ˌ ...
- C# 之 集合ArrayList
.NET Framework提供了用于数据存储和检索的专用类,这些类统称集合. 这些类提供对堆栈.队列.列表和哈希表的支持.大多数集合类实现系统的接口.以下我们主要来讲一下ArrayList. ...
- maven的坑2
导入工程后,pom.xml文件中以下插件报错: <plugin> <groupId>com.jayway.maven.plugins.android.generation2&l ...
- Oracle中,将毫秒数转换为timestamp类型的两种方法
在许多场景中,开发人员习惯用1970-01-01 00:00:00.000以来的毫秒数来表示具体的时间,这样可以将数据以NUMBER类型存储到数据库中,在某些时候方便比较,同样,有些时候我们需要 把这 ...
- 隐私问题成O2O绊脚石,加强行业监管迫在眉睫
这年头,O2O的发展越来越给力了.因为O2O能充分结合互联网经济的线上优势和传统经济的线下优势,因此,传统商户纷纷借助O2O来开展业务,取得了不俗的成绩.只是,在移动互联网越来越"开 ...
- EasyPusher安卓Android手机直播推送之MediaCodec 硬编码H264格式
本文转自Holo的博客:http://blog.csdn.net/u013758734/article/details/50834770 最近在研究EasyDarwin的Push库EasyPusher ...
- Mixtures of Gaussians and the EM algorithm
http://cs229.stanford.edu/ http://cs229.stanford.edu/notes/cs229-notes7b.pdf
- 1.JavaScript:写入 HTML 输出
①JavaScript 是可插入HTML页面的编程代码 ②JavaScript插入HTML页面后,可有所有的现代浏览器执行 ※提示:您只能在 HTML 输出中使用 document.write.如果您 ...