IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> Flutter 完美封装Image -> 正文阅读

[移动开发]Flutter 完美封装Image

紧接着上一篇完美封装Text,本次依然使用android的写法,封装Image,加载本地图片比较简单,这边主要加载网络图片,同步设置宽度、高度、圆角、圆形图片、边框宽度、边框颜色等参数

先看效果图

?

?依然还是熟悉的配方,依然还是熟悉的味道,让你写Flutter有写android组件的感觉

ImageView(
            imageUrl,
            width: 100,
            height: 100,
            marginLeft: 10,
            cornerRadius: 5,
            borderWidth: 2,
            marginTop: 20,
            isCircle: true,
            borderColor: Colors.yellow,
          )

封装的类我们依然使用ImageView,以下是源代码

import 'package:flutter/material.dart';

class ImageView extends StatelessWidget {
  String url = "";
  double? width = 0;
  double? height = 0;

  double? marginLeft = 0;
  double? marginRight = 0;
  double? marginTop = 0;
  double? marginBottom = 0;
  double? cornerRadius = 0;
  double? margin = 0;
  double? borderWidth = 0;
  Color? borderColor = Colors.transparent;
  bool? isCircle = false;
  Color? backgroundColor = Colors.transparent;

  ImageView(
    this.url, {
    this.width,
    this.height,
    this.marginBottom,
    this.marginRight,
    this.marginTop,
    this.marginLeft,
    this.margin,
    this.cornerRadius,
    this.isCircle,
    this.borderColor,
    this.borderWidth,
    this.backgroundColor,
  }) {
    if (margin != null) {
      if (margin != null && margin! > 0) {
        marginLeft = margin;
        marginTop = margin;
        marginRight = margin;
        marginBottom = margin;
      }
    }

    if (isCircle != null) {
      if (isCircle ?? true) {
        cornerRadius = width ?? 0 / 2;
      }
    }
  }

  @override
  Widget build(BuildContext context) {
    return Container(
        width: width ?? 0,
        height: height ?? 0,
        margin: EdgeInsets.fromLTRB(this.marginLeft ?? 0, this.marginTop ?? 0,
            this.marginRight ?? 0, this.marginBottom ?? 0),
        decoration: new BoxDecoration(
          border: new Border.all(
              width: this.borderWidth ?? 0,
              color: this.borderColor ?? Colors.transparent),
          color: this.backgroundColor,
          borderRadius:
              new BorderRadius.all(new Radius.circular(this.cornerRadius ?? 0)),
        ),
        child: ClipRRect(
            borderRadius: BorderRadius.circular(this.cornerRadius ?? 0),
            child: Image.network(
              url,
              width: this.width ?? 0,
              height: this.height ?? 0,
              fit: BoxFit.cover,
            )));
  }
}

这个美中不足的就是你需要设置宽度和高度,Flutter自适应的问题,我一直搞的不是很清楚,但大部分使用图片的场景都是需要设置宽高的,有些不需要设置宽高展示原本图片大小的,那就可以直接用原生的了,也很简单

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2021-11-25 08:13:48  更:2021-11-25 08:15:08 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 4:26:53-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码