Flutter图片控件(七)

1、加载图片

dart 复制代码
import 'package:flutter/material.dart';

void main() {
  runApp(const MaterialApp(
    home: MyHomePage(),
  ));
}

class MyHomePage extends StatelessWidget {
  const MyHomePage({super.key});

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Center(child: Text("图片控件")),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            // 静态引入方式1
            const Image(
              image: AssetImage("assets/imgs/touxiang.jpg"),
              width: 100.0,
            ),
            const SizedBox(height: 10.0),
            // 静态引入方式2
            Image.asset(
              "assets/imgs/touxiang.jpg",
              width: 50.0,
            ),
            const SizedBox(
              height: 10.0,
            ),
            // 从网络加载图像
            const Image(
              image: NetworkImage(
                  "https://cdn.jsdelivr.net/gh/Justinc-github/images/touxiang.jpg"),
              width: 100.0,
            )
          ],
        ),
      ),
    );
  }
}
  • 效果图:

2、图片参数

dart 复制代码
const Image({
    super.key,
    required this.image,
    this.frameBuilder,
    this.loadingBuilder,
    this.errorBuilder,
    this.semanticLabel,
    this.excludeFromSemantics = false,
    this.width,
    this.height,
    this.color,
    this.opacity,
    this.colorBlendMode,
    this.fit,
    this.alignment = Alignment.center,
    this.repeat = ImageRepeat.noRepeat,
    this.centerSlice,
    this.matchTextDirection = false,
    this.gaplessPlayback = false,
    this.isAntiAlias = false,
    this.filterQuality = FilterQuality.medium,
  });
  • super.key:指定Image组件的标识,不指定自动生成一个标识符;
  • image:必选参数,它是一个ImageProvider对象,用于指定要显示的图片;
  • frameBuilder:在图片加载时显示一个自定义框架;
  • loadingBuilder:在图片加载时显示自定义加载指示器;
  • errorBuilder:在图片加载时显示一个自定义错误提示;
  • semanticLabel:为图片提供语义标签;
  • excludeFromSemantics:默认为false,设置为true图片将被排除在语义树之外,屏幕阅读器等辅助技术将不会读取它;
  • width:指定图片的宽;
  • height:指定图片的高;
  • color:用于给图片着色;
  • opacity:控制图片的透明度;
  • colorBlendMode:可选枚举值,指定颜色混合模式;
  • fit:可选枚举值。用于控制图片如何适应仪器,
    • fill:填充父容器所有空间;
    • cover:按照宽高比方法,超出部分会被裁掉;
    • contain:按照长宽自适应当前父容器大小;
    • fitWidth:缩放当前图片至显示空间的宽度,高度按比例缩放,然后居中显示;
    • fitHeight:缩放当前图片至显示空间的高度,宽度按比例缩放,然后居中显示;
    • none:没有适应,图片中间显示在控件内,超出部分会被剪裁。
  • alignment:可选对齐方式,默认为Alignment.center;
  • repeat:可选枚举值,指定图片是否重复显示,如何重复;
  • centerSlice:这是一个可选的Rect对象,指定如片中心切片区域,以便缩放时不会失真;
  • matchTextDirection:默认为false,设置为true时,方向取决于文本方向;
  • gaplessPlayback:默认为false,设置为true时,图片将在重新加载时无缝播放,不会出现闪烁;
  • isAntiAlias:默认为false,设置为true时,图片将使用抗锯齿基础,以减少边缘锯齿;
  • filterQuality:枚举值,默认为FilterQuality.medium,指定图片的过滤数量。
dart 复制代码
// 以fitshu'xing

import 'package:flutter/material.dart';

void main() {
  runApp(const MaterialApp(
    home: MyHomePage(),
  ));
}

class MyHomePage extends StatelessWidget {
  const MyHomePage({super.key});

  @override
  Widget build(BuildContext context) {
    return Scaffold(
        appBar: AppBar(
          title: const Text("图片控件"),
        ),
        body: const Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: [
              SizedBox(
                height: 100.0,
                child: Image(
                  image: AssetImage("assets/imgs/touxiang.jpg"),
                  fit: BoxFit.fill,
                ),
              ),
              SizedBox(
                height: 100.0,
                child: Image(
                  image: AssetImage("assets/imgs/touxiang.jpg"),
                  fit: BoxFit.cover,
                ),
              ),
              SizedBox(
                height: 100.0,
                child: Image(
                  image: AssetImage("assets/imgs/touxiang.jpg"),
                  fit: BoxFit.contain,
                ),
              ),
              SizedBox(
                height: 100.0,
                child: Image(
                  image: AssetImage("assets/imgs/touxiang.jpg"),
                  fit: BoxFit.fitWidth,
                ),
              ),
              SizedBox(
                height: 100.0,
                child: Image(
                  image: AssetImage("assets/imgs/touxiang.jpg"),
                  fit: BoxFit.fitHeight,
                ),
              ),
              SizedBox(
                height: 100.0,
                child: Image(
                  image: AssetImage("assets/imgs/touxiang.jpg"),
                  fit: BoxFit.none,
                ),
              ),
            ],
          ),
        ));
  }
}
        image: AssetImage("assets/imgs/touxiang.jpg"),
                  fit: BoxFit.none,
                ),
              ),
            ],
          ),
        ));
  }
}
相关推荐
跨境数据猎手40 分钟前
反向海淘实战|独立站搭建+国内电商API对接
开发语言·爬虫·架构
没钥匙的锁11 小时前
05-Java面向对象构造器与封装
java·开发语言
仙人球部落1 小时前
-python-LangGraph框架(3-31-LangGraph 「合并式状态管理」的原理与实践)
开发语言·javascript·python
2401_894915531 小时前
Geo搜索优化排名源码部署搭建全流程详解
android·开发语言·flask·php·精选
chouchuang2 小时前
day-025-面向对象-上
开发语言·python
sunfdf2 小时前
Next.js 新手从零部署到首跑实战指南
开发语言·javascript·ecmascript
千逐683 小时前
React Native 性能优化深度解析:从原理到实战
flutter·华为·鸿蒙
hold?fish:palm3 小时前
从源码到可执行文件:C++程序的编译过程
开发语言·c++
随性而行3603 小时前
微信API接口与AI自动化:开发者的实现思路
运维·服务器·开发语言·人工智能·微信·自动化
lingran__3 小时前
C++_STL简介
开发语言·c++