视频地址;html
https://www.bilibili.com/video/av39709290/?p=12数组
博客地址:app
https://jspang.com/post/flutterDemo.html#toc-b97less
要实现的效果;jsp
这里主要是用咱们的流式布局ide
顺序排,通常到头了 会顺序往下排列。布局
还会学到 媒体查询、手势操做post
先写main.dartui
这个组件确定是动态的。spa
那些加号都是数组生成的,因此这里声明一个数组。数组里面添加按钮,添加按钮咱们须要单独写一个方法
咱们的Container是没有手势识别的。若是想让它具备手势识别,就要外层给他加一个GestureDetector手势识别
至关于咱们 html里面的div咱们要向让它点击挑战连接的话,就在外层加一个a标签。
点击的时候触发的事件:咱们如今尚未这个buildPhoto方法
buildPhoto也返回一个widget
由于是一个动态的组件,因此要修改里面的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() ); } }
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/2,//屏幕高度的一半 color: Colors.grey, child: Wrap(//而后使用流式布局 children: list,//就把list放在这 spacing: 26.0,//间距 ), ), ), ), ); } //这个方法返回了一个组件 Widget buildAddButton(){ // 手势识别,能识别咱们手机上的好几种手势 return GestureDetector( onTap: (){ if(list.length<9){ setState(() { list.insert(list.length-1, 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('照片'), ), ), ); } }