Flutter 中 image 图片组件

标签: Flutter

1. 图片的常用属性

1. alignment 对齐方式 。值为Alignment类型,如:Alignment.topCenter;

2. color 颜色。值为Colors类型,如:Colors.red;

3. colorBlendMode 颜色混合模式。要与color一起设置才有效果,值为BlendMode类型,如:BlendMode.darken;

4. fit 图片的填充方式。值为BoxFit类型,常用的有几下几种:

(1). BoxFit.fill  全图显示,图片会被拉伸,并充满父容器;

(2). BoxFit.contain 全图显示,显示原比例,可能会有空隙;

(3). BoxFit.cover 图片充满,显示可能拉伸,可能裁切,但不变形;

(4). BoxFit.fitWidth 宽度横向充满,显示可能拉伸, 可能裁切;

(5). BoxFit.fitHeight  高度竖向充满,显示可能拉 伸,可能裁切;

(6). BoxFit.scaleDown 效果和 contain 差不多,但是此属性不允许显示超过源图片大小,可小不可大;

5. repeat 平铺。值为ImageRepeat类型,常用的有以下几种:

(1). ImageRepeat.repeat : 横向和纵向都进行重复,直到铺满整 个画布;

(2). ImageRepeat.repeatX: 横向重复,纵向不重复;

(3). ImageRepeat.repeatY:纵向重复,横向不重复;

6. width 宽度。一般结合 ClipOval 才能看到效果;

7. height 高度。一般结合 ClipOval 才能看到效果;

 

2. 加载远程图片

使用 Image.network() 来加载远程图片。

代码如下所示:

import 'package:flutter/material.dart';

void main(){
    runApp(MyApp());
}
// 抽离成一个单独的组件
class MyApp extends StatelessWidget{
    @override
    Widget build(BuildContext context) {
        return MaterialApp(
            home: Scaffold(
                // 导航条
                appBar:AppBar(title:Text('Flutter App')),
                // 主题
                body:HomeContent(),
            ),
            theme: ThemeData(primarySwatch:Colors.yellow),
        );
    }
}


// 添加网络远程图片
class HomeContent extends StatelessWidget{
    @override
    Widget build(BuildContext context) {
        return Center(
            child:Container(
                // 将图片作为子元素
                child:Image.network(
                    "http://www.ionic.wang/statics/index/images/ionic4.png",
                    // 对齐方式
                    alignment: Alignment.topCenter,

                    // 图片颜色混合
                    color:Colors.purple,
                    colorBlendMode:BlendMode.darken,

                    // 图片填充方式
                    fit:BoxFit.fitHeight,

                    // 重复-指定重复方向
                    // repeat: ImageRepeat.repeatY,
                ),

                // 宽度
                width:400,
                // 高度
                height:400,
                // 容器装饰
                decoration:BoxDecoration(
                    // 颜色
                    color:Colors.yellow,
                    // 倒圆角
                    borderRadius: BorderRadius.all(
                        Radius.circular(50)
                    )
                ),
            )
        );
    }
}

效果图如下:

上面图片的颜色看起来有点怪怪的,就是用了颜色混合的效果。

 

 

3. 加载本地图片

使用 Image.asset() 加载本地图片。

加载本地图片要复杂一些,分为以下几步:

1. 在项目的根目录下添加images文件夹,放置需要加载的默认图片在里面。为了适配不同分辨率的图片,新建2.x与3.x的文件夹,放置2倍像素与3倍像素的图片。如果有必要,4倍像素的图片也加睛,但2倍像素与3倍像素的图片是必须的;

2. 在pubspec.yaml里配置图片的加载地址;

代码如下所示:

import 'package:flutter/material.dart';

void main(){
    runApp(MyApp());
}
// 抽离成一个单独的组件
class MyApp extends StatelessWidget{
    @override
    Widget build(BuildContext context) {
        return MaterialApp(
            home: Scaffold(
                // 导航条
                appBar:AppBar(title:Text('Flutter App')),
                // 主题
                body:HomeContent(),
            ),
            theme: ThemeData(primarySwatch:Colors.yellow),
        );
    }
}


// 加载本地图片
class HomeContent extends StatelessWidget{
    @override
    Widget build(BuildContext context) {
        return Center(
            child:Container(

                // 在图片文件夹中放置图片,2.x与3.x的都要有
                // 配置pubspec.yaml

                // 添加本地图片
                child:Image.asset("images/a.jpeg"),
                height:500,
                width:300,
            )
        );
    }
}

效果图如下:

 

4. 开发圆形图片效果

圆形图片是开发中经常会遇到的一种效果,多用于用户头像。

1. 添加图片在容器中,给容器倒圆角;

import 'package:flutter/material.dart';

void main(){
    runApp(MyApp());
}
// 抽离成一个单独的组件
class MyApp extends StatelessWidget{
    @override
    Widget build(BuildContext context) {
        return MaterialApp(
            home: Scaffold(
                // 导航条
                appBar:AppBar(title:Text('Flutter App')),
                // 主题
                body:HomeContent(),
            ),
            theme: ThemeData(primarySwatch:Colors.yellow),
        );
    }
}

// 把图片做为背景,制作一个圆形图
class HomeContent extends StatelessWidget{
    @override
    Widget build(BuildContext context) {
        return Center(
            child:Container(
                // 宽度
                width:400,
                // 高度
                height:400,
                // 容器装饰
                decoration:BoxDecoration(
                    // 颜色
                    color:Colors.yellow,
                    // 另一种倒圆角的方式
                    borderRadius:BorderRadius.circular(200),
                    // 将图片作为背景,结合倒圆角实现圆形图片
                    image: DecorationImage(
                        image:NetworkImage("http://www.ionic.wang/statics/index/images/ionic4.png"),
                        fit:BoxFit.cover
                    )
                ),
            )
        );
    }
}

效果图如下: 

2. 用Flutter提供的特定组件ClipOval;

代码如下所示:

import 'package:flutter/material.dart';

void main(){
    runApp(MyApp());
}
// 抽离成一个单独的组件
class MyApp extends StatelessWidget{
    @override
    Widget build(BuildContext context) {
        return MaterialApp(
            home: Scaffold(
                // 导航条
                appBar:AppBar(title:Text('Flutter App')),
                // 主题
                body:HomeContent(),
            ),
            theme: ThemeData(primarySwatch:Colors.yellow),
        );
    }
}


// 制作圆形图的另一种方式
class HomeContent extends StatelessWidget{
    @override
    Widget build(BuildContext context) {
        return Center(
            child:Container(
                // 倒圆角50%
                child:ClipOval(
                    child:Image.network(
                        "http://www.ionic.wang/statics/index/images/ionic4.png",
                        height:200,
                        width:200,
                        fit:BoxFit.cover
                    ),
                ) 
            )
        );
    }
}

效果图如下:

版权声明:本文为weixin_40629244原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_40629244/article/details/111240758

智能推荐

【Flutter】使用flutter_add_image快速导入图片资源

1.安装插件 打开AS的设置,安装这个叫flutter_add_image的插件,然后重启你的IDE 2.建立文件夹 在项目根目录创建一个images文件夹,以后图标图片之类的资源都丢这里 3.插件导入图片 在刚才建立的目录上右键,New→FlutterAddImage,会弹出一个窗口。使用切图工具切出iOS@3X的图片,并把文件名起好。然后拖进这个弹出的窗口里面。插件就会自动成1倍,2...

冒泡排序,及改进方式,性能优化400%>>>附图解加源码

首先源码附上,源码中带有注释,看不懂没关系,源码后面附带图解,最后附上代码效率提升图 源码如下: 方案一:其实实现很简单,两层循环,每次内层迭代出最大的一个值,将其放入数组最后一个位置,外层循环的末端便往前移一位。其原理如下图 方案一代码块: 方案二:优化改进 仔细观察上面的图,我们不难发现当迭代到图下这样的情况时,其实已经全排序好了,但是我们还是需要对它进行1,2,3,4,5,6的迭代,这些情况...

css3常用选择器

先介绍一下基本选择器,如下几种 *:通配符。选择页面的所有元素 E:元素选择器。对页面的一些元素进行选择,如p,div,li等 .class:类选择器 #id:id选择器。一个Id在一个页面中只能选择,这是和类选择器的区别 E F:后代选择器。如ul li。选中ul下的li E>F:子元素选择器。如下,可以用 h1 > strong {color:red;}使h1的子元素strong变...

python is not set from command line or npm configuration

问题 猜测原因  python版本冲突 解决方案  去官网找到最新版本python 点击下载,注意记住你下载的目录,下载好以后,打开这个目录下的文件夹,Python310, 整个文件夹复制一下 在项目里运行npm config list --json 找到python的路径   我的是 C:\\Python27\\python.exe 说明项目里用的还是py...

Java8 Stream流操作

前言 我们常常需要将一个容器转化成另一个容器,或是对这个容器中的数据进行批量处理,这时使用Stream流可以大大减少我们的工作量。 1 Stream概述 Java 8 是一个非常成功的版本,这个版本新增的Stream,配合同版本出现的 Lambda ,给我们操作集合(Collection)提供了极大的便利。 那么什么是Stream? Stream将要处理的元素集合看作一种流,在流的过程中,借助St...

猜你喜欢

带你玩转Visual Studio——带你跳出坑爹的Runtime Library坑

在Windows下进行C++的开发,不可避免的要与Windows的底层库进行交互,然而VS下的一项设置MT、MTd、MD和MDd却经常让人搞迷糊,相信不少人都被他坑过,特别是你工程使用了很多第三库的时候,及容易出现各种链接问题。看一下下面这个错误提示:  LIBCMT.lib(_file.obj) : error LNK2005: ___initstdio already defined...

git 设置 gitignore 忽略 __pycache__

清除git缓存中的pycache 直接删掉硬盘上的文件 如果我想保留硬盘上的这个文件,而只删除版本管理中的文件,就需要加入--cached参数。 切换分支出现问题 尽管我已经删除了__pycache__,硬盘也没有了,但是切换分支的时候依然是会提示本地重写的情况。 提示:需要我在切换分支之前,提交一次更新。 提交了更新之后,再来尝试切换分支,如下: 成功了,说明当做了任何变更之后,切换分支前需要执...

人生苦短,我用Python(二)— 爬取会议网站 EasyChair Smart CFP

寒假留校帮学长写了个爬虫,抓取会议网站上一些CFP信息。想着把一些知识点、坑点记下来,一来做个小总结给工作收收尾,二是以后再遇到好从容应对。 这是我写的第二个比较完善的爬虫了,比第一个要简单许多,完全过程化的代码,而且easychair这个网站页面布局比较友好,适合python新手、前端小白入门练习。但这个网站反爬比较厉害,写爬虫的过程中就被ban了好几次…… 制定抓取...

(三)Single Threaded Execution模式

一、定义 一个线程执行。有时也称为Critical Section(临界区)。   二、模式案例 案例: 假设有三个人,频繁地通过一扇门,规定每次只能通过一个人,当通过一个人时,程序会将通过的总人次加1,同时记录该次通过人的姓名和出生地。   门的定义:   人的定义     测试类     多次执行后发现可能出现以下结果: &...

Linux服务管理之系统管理员需要掌握的命令

为什么80%的码农都做不了架构师?>>>    systemd的主要命令行工具是systemctl。大多数Linux系统管理员应该都已经非常熟悉系统服务和init系统管理,比如service,chkconfig和telinit命令的使用。systemd也完成同样的管理任务,只是命令工具systemctl的语法有所不同而已。 1. sysvinit和system...