zoukankan      html  css  js  c++  java
  • 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,
                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(
               80.0,
              height: 80.0,
              color: Colors.black54,
              child: Icon(Icons.add),
            ),
          ),
        );
      }
    
      Widget buildPhoto(){
        return Padding(
          padding: const EdgeInsets.all(8.0),
          child: Container(
            80.0,
            height: 80.0,
            color: Colors.amber,
            child: Center(
              child: Text('照片'),
            ),
          ),
        );
      }
    }
    warp_demo.dart

      

  • 相关阅读:
    Ubuntu 14.04 卸载通过源码安装的库
    Ubuntu 14.04 indigo 相关依赖
    Ubuntu 14.04 indigo 安装 cartographer 1.0.0
    Ubuntu 14.04 改变文件或者文件夹的拥有者
    安装cartographer遇到Unrecognized syntax identifier "proto3". This parser only recognizes "proto2"问题
    Unrecognized syntax identifier "proto3". This parser only recognizes "proto2". ”问题解决方法
    查看所有用户组,用户名
    1卸载ROS
    Ubuntu14.04 软件安装卸载
    Ubuntu14.04系统显示器不自动休眠修改
  • 原文地址:https://www.cnblogs.com/wangjunwei/p/10604617.html
Copyright © 2011-2022 走看看