Flutter实现容器组件、图片组件 的代码

•容器组件

容器组件(Container)可以理解为在Android中的RelativeLayout或LinearLayout等,在其中你可以放置你想布局的元素控件,从而形成最终你想要的页面布局。当然Flutter中的容器组件作为一个"容器",肯定会有一些给我们提供一些属性来约束我们容器内的组件,下面介绍一下容器组件(Container)的一些常用属性及描述:

属性名  类型 说明
key Key Container唯一标识符,用于查找更新
alignment  AlignmentGeometry 控制child的对其方式,如果Container或者Container父节点尺寸大于Child的尺寸,这个属性设置会生效,有很多种对齐方式
padding EdgeInsetsGeometry Decoration内部的空白区域,如果有child的话,child位于padding内部
color Color 用来设置Container背景色,如果foregroundDecoration设置的话,可能会遮盖color效果
decoration  Decoration 绘制在child后面的装饰,设置了Decoration的话,就不能设置color属性,否则会报错,此时应该在Decoration中进行颜色的设置
foregroundDecoration Decoration 绘制在child前面的装饰
width double Container的宽度,设置为double.infinity可以强制在宽度上撑满
height double Container的高度,设置为double.infinity可以强制在高度上撑满
constraints BoxConstraints 添加到child上额外的约束条件
margin EdgeInsetsGeometry 围绕在Decoration和child之外的空白区域,不属于内容区域
transform Matrix4 设置Container的变换矩阵,类型为Matrix4
child Widget Container中的内容Widget

于,padding是包含在content内,而margin则是外部边界,设置点击事件的话,padding区域会响应,而margin区域不会响应。

写一个简单的例子,体验一下容器组件Container,主要是加了一个边框及底色,示例代码如下:

import 'package:flutter/material.dart';
void main() => runApp(DemoApp());
class DemoApp extends StatelessWidget{
 @override
 Widget build(BuildContext context) {
 return MaterialApp(
  title: '容器组件demo',
  home: Scaffold(
  body: Center(
   child: Container(
   width: 200,
   height: 200,
   //添加边框装饰效果
   decoration: BoxDecoration(
    color: Colors.blue,
    border: new Border.all(
    width: 10, //边框粗细
    color: Colors.amberAccent //边框颜色
    ),
    borderRadius: const BorderRadius.all(const Radius.circular(5)) //边框圆角
   ),
   child: Text(
    'Flutter Container Demo',
    textAlign: TextAlign.center,
    style: TextStyle(fontSize: 20),
   ),
   ),
  ),
  ),
 );
 }
}

 页面截图如下:

讲解一下上面的代码,其实很简单,就是在body内放置了一个container组件和一个text组件,给容器组件container设置的宽、高、背景色、边框、边框圆角、边框的粗细以及边框的颜色,然后在容器container内放了一个text组件,并设置的text的对齐方式以及字体大小。

看到页面可能有人会问,为什么这个容器会在页面的正中央呢?这是因为body的内容设置的属性为center居中。

简单说几点属性的可选值比如textAlign(文本的对齐方式)、BorderRadius(圆角)、TextStyle(字体样式),最直接的还是让大家看一下截图,如下:

大家可以从提示中看到,textAlign(文本的对齐方式)有左对齐、右对齐、居中等等,BorderRadius(圆角)有对右上、左上、右下、左下单独设置圆角的属性,TextStyle(字体样式)有颜色、大小、行高、阴影、粗细等等属性,这里我们就不一一说明了,感兴趣的同学可以自己尝试一下。

Container小结:

说实话这也是我第一次开始用Flutter写一个简单的界面Demo,作为一个Android程序员来讲,感觉不是很习惯,好在我有weex的开发经历,写过很多vue的页面,其实在Flutter里面写页面就是一层一层的child嵌套,用无数个child堆积出一个页面,现在写的Demo很简单,不知道以后页面复杂了,会不会把自己嵌套懵了.......

•图片组件

图片组件(Image)是显示图像的组件,Image组件有多种构造函数

  1.new Image:从ImageProvider获取图像

  2.new Image.asset:加载资源图片

  3.new Image.file:加载本地图片文件

  4.new Image.newwork:加载网络图片

  5.new Image.memory:加载Uint8List资源图片

Image组件属性及描述

属性 类型 说明
image ImageProvider 抽象类,需要自己实现获取图片数据的操作
width/heyght double Image显示区域的宽度和高度,这里需要把Image和图片两个东西区分开,图片本身有大小,Image Width是图片的容器,本身也有大小,宽度和高度的配置通常和fit属性配合使用
fit BoxFit 图片填充模式,具体取值见下一个表
color Color 图片颜色
colorBlendMode BlendMode 在对图片进行手动处理的时候,可能用到图层混合,如改变图片的颜色。此属性可以对颜色进行混合处理。
alignment Alignment 控制图片的摆放位置,比如图片放置在右下角则为Alignment.BottomRight
repeat ImageRepeat 此属性可以设置图片的重复模式,noRepeat为不重复,Repeat为x和y方向重复,repeatX为x方向重复,repeatY为y方向重复
centerSlice Rect
当图片需要被拉伸显示时,centerSlice定义的举行区域会被拉伸,可以理解成我们在图片内部定义一个9个点文件用作拉伸,9个点为上、下、左、右、上中、下中、左中、右中、正中

matchTextDirection bool matchTextDirection和Directionality配合使用,TextDirection有两个值,分别为TextDirection.ltr从左向右展示图片与TextDirection.rtl从右向左展示图片
gaplessPlayback bool 当ImageProvider发生变化后,重新加载图片的过程中,原图片的展示是否保留,值为true则保留,值为false则不保留,直接空白等待下一张图片加载

BoxFit取值及描述

取值 描述
BoxFit.fill 全图显示,显示可能拉伸,充满
BoxFit.contain 全图显示,显示原比例,不需充满
BoxFit.cover 显示可能拉伸,可能裁剪,充满
BoxFit.fitWidth 显示可能拉伸,可能裁剪,宽度充满
BoxFit.fitHeight 显示可能拉伸,可能裁剪,高度充满
BoxFit.none 原始大小
BoxFit.scaleDown 效果和BoxFit.contain差不多,但是此属性不允许显示超过源图片大小,即可小不可大

按照惯例附上一段Demo:

import 'package:flutter/material.dart';
void main() => runApp(DemoApp());
class DemoApp extends StatelessWidget{
 @override
 Widget build(BuildContext context) {
 return MaterialApp(
  title: '图片组件Demo',
  home: new Center(
  child: Container(
   color: Colors.white,
   child: new Image.network(
   'https://flutter.io/images/homepage/header-illustration.png',
   width: 200,
   height: 200,
   ),
  ),
  ),
 );
 }
}

按照惯例附上效果截图:

上面可以看出,我给从网络上获取的图片设置的宽、高分别为200,但是我并没有设置图片的填充模式,那么我把填充模式设置为fitHeight会怎么样呢?

import 'package:flutter/material.dart';
void main() => runApp(DemoApp());
class DemoApp extends StatelessWidget{
 @override
 Widget build(BuildContext context) {
 return MaterialApp(
  title: '图片组件Demo',
  home: new Center(
  child: Container(
   color: Colors.white,
   child: new Image.network(
   'https://flutter.io/images/homepage/header-illustration.png',
   width: 200,
   height: 200,
   fit: BoxFit.fitHeight,
   ),
  ),
  ),
 );
 }
}

可以看的出来,高度充满了,但是水平方向被拉伸了。

其他的图片属性以及填充方式的属性,我就不一一给大家演示了,我尝试了很多种组合,发现还挺有意思的,希望大家也能多多的进行尝试!

总结

以上所述是小编给大家介绍的Flutter实现容器组件、图片组件 的代码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对我们网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

(0)

相关推荐

  • Flutter实现webview与原生组件组合滑动的示例代码

    最近在用Flutter写一个新闻客户端, 新闻详情页中的内容 需要用Flutter的本地Widget和WebView共同展示 . 比如标题/上方的视频播放器是用本地Widget展示, 新闻内容的富文本文字使用webview展示html, 这样就要求标题/视频播放器与webview可以 组合滑动 . ps: 如果把新闻详情页都用html画出, 就不用考虑组合滑动的问题. 找到支持与本地组件共存的webview控件 找一个可以与本地组件共存的webview控件是首要任务, 以下是我测试过的几个库:

  • Flutter实现文本组件、图标及按钮组件的代码

    •文本组件 文本组件(text)负责显示文本和定义显示样式,下表为text常见属性 Text组件属性及描述 属性名 类型 默认值 说明 data String   要显示的文本 maxLines int 0 文本要显示的最大行数 style TextStyle null 文本样式,可定义文本的字体大小.颜色.粗细等 textAlign TextAlign TextAlign.center 文本水平方向的对齐方式,取值有center.end.justify.left.right.start.val

  • flutter 输入框组件TextField的实现代码

    TextField 顾名思义文本输入框,类似于iOS中的UITextField和Android中的EditText和Web中的TextInput.主要是为用户提供输入文本提供方便.相信大家在原生客户端上都用过这个功能,就不在做具体介绍了,接下来还是具体介绍下Flutter中TextField的用法. 以下内容已更新到 github TextField的构造方法: const TextField({ Key key, this.controller, //控制器,控制TextField文字 thi

  • Flutter实战之自定义日志打印组件详解

    在Flutter中,如果我们需要打印日志,如果不进行自定义,我们只能使用自带的 print() 或者 debugPrint() 方法进行打印,但是这两种打印,日志都是默认 Info 层级的日志,很不友好,所以如果需要日志打印层级分明,我们就需要自定义一个日志打印组件,以下就来介绍如何自定义日志打印组件. 如何让输出的日志层级分明? 换种方式想,如果我们能在Flutter代码中,能够调用到原始Android中的Log组件,岂不是就能解决日志打印问题? 如何进行关联 在Flutter中,可以使用 M

  • Flutter实现容器组件、图片组件 的代码

    •容器组件 容器组件(Container)可以理解为在Android中的RelativeLayout或LinearLayout等,在其中你可以放置你想布局的元素控件,从而形成最终你想要的页面布局.当然Flutter中的容器组件作为一个"容器",肯定会有一些给我们提供一些属性来约束我们容器内的组件,下面介绍一下容器组件(Container)的一些常用属性及描述: 属性名 类型 说明 key Key Container唯一标识符,用于查找更新 alignment AlignmentGeom

  • Vue动态组件表格的实现代码

    目录 Vue组件 数据源 框架结构组件 这里我自己封装了几个组件 按钮组件 图片组件 滑动开关 tap组件 text组件 Vue组件 数据源 //这里是HTML内容 这里通过下面的引入框架结构把数据源传到框架中 还有匹配项 <Mytable :configList="configList" :configData="configData"></Mytable> // 引入结构组件 import myCard from "./comp

  • flutter图片组件核心类源码解析

    目录 导语 问题 Image的核心类图及其关系 网络图片的加载过程 网络图片数据的回调和展示过程 补上图片内存缓存的源码分析 如何支持图片的磁盘缓存 总结 导语 在使用flutter 自带图片组件的过程中,大家有没有考虑过flutter是如何加载一张网络图片的? 以及对自带的图片组件我们可以做些什么优化? 问题 flutter 网络图片是怎么请求的? 图片请求成功后是这么展示的? gif的每一帧是怎么支持展示的? 如何支持图片的磁盘缓存? 接下来,让我们带着问题一起探究flutter 图片组件的

  • 鸿蒙HarmonyOS App开发造轮子之自定义圆形图片组件的实例代码

    一.背景 在采用Java配合xml布局编写鸿蒙app页面的时候,发现sdk自带的Image组件并不能将图片设置成圆形,反复了翻阅了官方API手册(主要查阅了Compont和Image相关的API),起初发现了一个setCornerRadius方法,于是想着将图片宽度和高度设置为一样,然后调用该方法将radios设置为宽度或者高度的一半,以为可以实现圆形图片的效果,后来发现不行.于是乎想着能不能通过继承原有的Image自己来动手重新自定义一个支持圆形的图片组件. 二.思路: 1.对比之前自己在其他

  • Flutter使用RepositoryProvider解决跨组件传值问题

    目录 前言 RepositoryProvider定义 RepositoryProvider 应用 总结 前言 在实际开发过程中,经常会遇到父子组件传值的情况,通常来说会有三种方式: 构造函数传值:父组件将子组件需要的对象通过构造函数传递给子组件: 单例对象:构建单例对象,使得父子组件使用的是同一个对象: 容器:将对象存入容器中,父子组件使用的时候直接从容器中获取. 第一种方式的缺陷是如果组件嵌套很深,传递数据对象需要层层传递,将导致代码很难维护.第二种方式需要自己构建单例类,而实际上要传递的对象

  • Flutter快速制作一个水印组件实例详解

    目录 正文 通过child属性将水印叠加给子组件 createWatermark方法 Watermark组件的完整代码 正文 项目开发的过程中,经常会遇到添加水印的需求,其作用无非就是防止重要信息通过截图外传.(虽然我觉得并没有什么卵用,但领导的需求是不容质疑的) 那么,作为一线码农的我,也只能屁颠屁颠的开搞. 通过child属性将水印叠加给子组件 水印组件,既然是组件,就是需要发扬Flutter套娃的精神,通过child属性将水印叠加给子组件. class Watermark extends

  • ASP wsImage组件添加水印的实用代码

    ASP给图片加水印是需要组件的...常用的有aspjpeg软件和中国人自己开发的wsImage软件,可以上网搜索下载这两个软件,推荐使用咱们中国人自己开发的wsImage,毕竟是中文版,容易操作. 注册组件的方法: 命令提示符下输入"regsvr32 [Dll路径]" 就可以了. 图片添加水印无非就是获得图片大小,然后把水印写上去..ASP代码只是起个控制组件的作用.用代码来说明一切吧. 一:获得图片大小(这里是用象素值表示的.学PhotoShop的朋友都应该明白) 复制代码 代码如下

  • Asp无组件生成缩略图的代码

    还是先看看基础部分吧.首先,我们知道在页面中显示图片是如下代码: <img src="pic.gif" border="0" width="300" height="260"> src是图片路径,border控制图片边缘宽度,width是图片的长度,height是图片的高度.缩略图的生成其实就是在原始尺寸上缩放.但一般为了尽量少失真,我们都会按比例缩放.于是,获取图片的长宽尺寸也就成了生成缩略图的重点. 下面便是编

  • 微信小程序实现image组件图片自适应宽度比例显示的方法

    本文实例讲述了微信小程序实现image组件图片自适应宽度比例显示的方法.分享给大家供大家参考,具体如下: 一. 了解image组件 由于image有默认的固定的宽度和高度,这样我们在做图片自适应的时候,就不好做了.下面就来一起解决下 二. 方法 (一).使用mode:widthFix widthFix:宽度不变,高度自动变化,保持原图宽高比不变. 首先我们先设置image的mode为widthFix,然后给图片加一个固定rpx的宽度,比如:730rpx. 这样图片也可以自适应了..因为小程序的r

  • swing组件JScrollPane滚动条实例代码

    本文研究的主要是swing组件之JScrollPane滚动条的实现代码示例,具体如下. 实例1 /* * 滚动条 */ import javax.swing.*; public class Demo1 extends JFrame{ JTextArea jta = null; JScrollPane jsp = null; public static void main(String[] args) { // TODO Auto-generated method stub Demo1 d = n

随机推荐