flutter:图片&stful 生命周期 (三)

简介: 本文档介绍了如何在Flutter中处理图片,包括加载网络图片、本地图片、创建圆形图片和带有圆角的图片,以及如何配置`pubspec.yaml`文件来添加资源文件。还展示了如何使用`AssetImage`对象来显示本地资源图片,并通过代码示例详细说明了这些操作的实现方法。最后,简要介绍了StatefulWidget的生命周期。

前言

在现代移动应用开发中,图像处理是一项不可或缺的功能,尤其是在用户体验日益重要的今天。Flutter,作为一个跨平台的开发框架,以其高效的性能和丰富的组件库,提供了多种简便的方法来加载和处理图片。无论是从网络加载动态内容,还是展示本地资源,Flutter 都能轻松应对。

图片

网络图片

https://www.itying.com/images/flutter/1.png
return Center(
      child: Container(
        width: 150,
        height: 150,
        decoration: BoxDecoration(
            color: Colors.blue
        ),
        child: Image.network(
          "https://tse4-mm.cn.bing.net/th/id/OIP-C.rFThJiI7O5BEtAjW2bx2bAHaHa?pid=ImgDet&rs=1",
          //覆盖满容器
          fit: BoxFit.cover,
          //  fit.Boxfit.fill
        ),
      ),
    );

圆形

return Container(
      width: 150,
      height: 150,
      decoration: BoxDecoration(
        color: Colors.white,
        borderRadius: BorderRadius.circular(40),
        image: DecorationImage(
          image: NetworkImage(
              "https://tse4-mm.cn.bing.net/th/id/OIP-C.rFThJiI7O5BEtAjW2bx2bAHaHa?pid=ImgDet&rs=1",
            )
        )
      ),
    );


本地加载图片

assets    为 根目录

flutter:
  assets:
  - assets/imgs/

设置依赖

return SizedBox(
      height: 150,
      width: 150,
      // 自带的 widget
      child: Image.asset("imgs/laying.jpg"),
    );

AssetImage 是一个 Flutter 自带的 ImageProvider 对象,用于在 Flutter 中提供一个本地资源图片

Image.asset("assets/imgs/laying.jpg",height: 300,width: 300,)
          image:AssetImage("./assets/imgs/laying.jpg"),



图片的使用

johns.blog.csdn.net

首先创建 assets 文件夹 在该文件夹下面创建  images/img

然后在pubspec.yaml  里面配置依赖

flutter:
  assets:
    - assets/images/
import 'package:flutter/material.dart';
class Echo extends StatefulWidget{
  const Echo({super.key});
  @override
  State<StatefulWidget> createState() {
   return _Echo();
  }
}
class _Echo extends State <Echo> with SingleTickerProviderStateMixin{
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
    home: Scaffold(
    appBar: AppBar(
    title: Text("资源文件使用"),
    leading: GestureDetector(
    onTap: (){
    Navigator.pop(context);
    },
    child: Icon(Icons.arrow_back_ios),
    ),
    ),
     body: Container(
    // 居中显示
    alignment: Alignment.center,
    // 垂直线性布局
      child: Column(
     mainAxisAlignment: MainAxisAlignment.center,
    children: <Widget>[
    Image(
    width: 200,
    height: 200,
    image: AssetImage("images/buy.jpg"),
    )
    ],
    ),
    ),
    ))
    ;
  }
  }
  @override
    Widget build(BuildContext context){
       return Container();
  }
  Widget buildImg(){
  return Image.asset(
    "assets/imgs/buy.jpg",
  );
  }
void main(List<String> args){
runApp(const MaterialApp(
  title: 'hello',
  home: Echo(),
));
}

使用网络图片

复制的为图片链接

image: NetworkImage("https://pic3.zhimg.com/v2-d3f40345bde9c7f7ad4f63cf7bdcdab2_r.jpg"),


圆形图片

ClipOval(
                    child: Image.asset(
                      "imgs/laying.jpg",
                      height: 50,
                      width: 50,
                    ),
                  )

头像

leading: CircleAvatar(
                          backgroundImage: AssetImage("imgs/noodle.jpg"),
                        ),


给图片加 圆角


Container(
              height: 60,
              width: 60,
              margin: EdgeInsets.only(left: 40, right: 40),
              decoration: BoxDecoration(
                  borderRadius: BorderRadius.circular(10),
                  image: DecorationImage(
                      image: AssetImage("images/laying.jpg"),
                      fit: BoxFit.cover)),
            ),


stful   生命周期


import 'package:flutter/material.dart';
class MyApp extends StatefulWidget {
  const MyApp({Key? key}) : super(key: key);
  @override
  State<MyApp> createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Center(
        child: test(),
      ),
    );
  }
}
class test extends StatefulWidget {
  test() {
    print("1.调用了test的contructor方法");
  }
  @override
  State<test> createState() {
    print("2.调用test的createState方法");
    return _testState();
  }
}
class _testState extends State<test> {
  _testState() {
    print("3.调用_testState的constructor方法");
  }
  @override
  void initState() {
    // TODO: implement initState
    super.initState();
    print("4.调用_setState 的init 方法");
  }
  @override
  void dispose() {
    // TODO: implement dispose
    super.dispose();
    print("6.调用 dispose  方法");
  }
  bool _checkValue = true;
  @override
  Widget build(BuildContext context) {
    print("5.build 的 方法");
    return Container(
      child: Row(
        children: [
          Checkbox(
              value: _checkValue,
              onChanged: (v) {
                this.setState(() {
                  _checkValue = v!;
                });
              }),
        ],
      ),
    );
  }
}










相关文章
|
5月前
|
编解码 调度 UED
Flutter笔记:Flutter的WidgetsBinding.instance的window属性
Flutter笔记:Flutter的WidgetsBinding.instance的window属性
178 0
|
5月前
HBuilderX使用uniapp中的video标签开发视频应用APP,出现视频覆盖<view>图层无法遮住等问题如何解决?
HBuilderX使用uniapp中的video标签开发视频应用APP,出现视频覆盖<view>图层无法遮住等问题如何解决?
|
5月前
Flutter 自定义ICON库
Flutter 自定义ICON库 Flutter提供了一些内置的ICON库,但在实际开发中,可能需要一些自定义的ICON图标。Flutter允许我们使用自定义图标,本文将介绍如何创建和使用自定义ICON库。
202 0
|
存储 Android开发
Flutter控件之图片Image封装
Flutter中偏偏原生的控件,少了很多需要又常用的属性,比如宽高,比如内外边距,又比如点击事件,如果不采取封装,视图的结构会一层嵌套一层,徒增很多的冗余代码,所以,为了简洁代码,还有为了拓展原生组件没有的属性,就不得不进行一次简单的封装,使其在调用的时候,可以很方便的实现某些功能。
131 0
flutter系列之:创建一个内嵌的navigation
我们在flutter中可以使用Navigator.push或者Navigator.pushNamed方法来向Navigator中添加不同的页面,从而达到页面调整的目的。 一般情况下这样已经足够了,但是有时候我们有多个Navigator的情况下,上面的使用方式就不够用了。比如我们有一个主页面app的Navigator,然后里面有一个匹配好友的功能,这个功能有多个页面,因为匹配好友功能的多个页面实际上是一个完整的流程,所以这些页面需要被放在一个子Navigator中,并和主Navigator区分开。
|
存储 容器
flutter系列之:做一个修改组件属性的动画
什么是动画呢?动画实际上就是不同的图片连续起来形成的。flutter为我们提供了一个AnimationController来对动画进行详尽的控制,不过直接是用AnimationController是比较复杂的,如果只是对一个widget的属性进行修改,可以做成动画吗? 答案是肯定的,一起来看看吧。
|
开发工具 Android开发 iOS开发
【Flutter】Flutter 启动白屏问题 ( 问题描述 | 在 launch_background.xml 中设置启动过渡 UI )
【Flutter】Flutter 启动白屏问题 ( 问题描述 | 在 launch_background.xml 中设置启动过渡 UI )
1162 0
【Flutter】Flutter 启动白屏问题 ( 问题描述 | 在 launch_background.xml 中设置启动过渡 UI )
【Flutter】自定义 Flutter 组件 ( 创建自定义 StatelessWidget、StatefulWidget 组件 | 调用自定义组件 )(二)
【Flutter】自定义 Flutter 组件 ( 创建自定义 StatelessWidget、StatefulWidget 组件 | 调用自定义组件 )(二)
609 0
【Flutter】自定义 Flutter 组件 ( 创建自定义 StatelessWidget、StatefulWidget 组件 | 调用自定义组件 )(二)
|
Dart 开发工具 开发者
【Flutter】Flutter 拍照示例 ( 创建应用 | 安装 image_picker 插件 )(二)
【Flutter】Flutter 拍照示例 ( 创建应用 | 安装 image_picker 插件 )(二)
207 0
【Flutter】Flutter 拍照示例 ( 创建应用 | 安装 image_picker 插件 )(二)