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学习(8)AspectRatio、Card卡片组件 -> 正文阅读

[移动开发]flutter学习(8)AspectRatio、Card卡片组件

Flutter学习(8) AspectRatio、Card 卡片组件

一、Flutter AspectRatio 组件

image-20220304111521502

  • 子元素的宽高比是相对于父元素来说的

    import 'package:flutter/material.dart';
    
    void main() => runApp(MyApp());
    
    class MyApp extends StatelessWidget {
      const MyApp({Key? key}) : super(key: key);
    
      @override
      Widget build(BuildContext context) {
        return MaterialApp(
            home: Scaffold(
          appBar: AppBar(title: Text('FlutterDemo')),
          body: LayoutDemo(),
        ));
      }
    }
    
    class LayoutDemo extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        return Container(
          width: 200,
          
          child: AspectRatio(
              aspectRatio: 2.0 / 1.0, child: Container(color: Colors.cyanAccent)),
        );
      }
    }
    

    image-20220304111932557

  • 有时候要铺满屏幕的宽度,然后自动对应宽高比,可以像下面这样写:

    class LayoutDemo extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        return Container(
          child: AspectRatio(
              aspectRatio: 3.0 / 1.0, child: Container(color: Colors.cyanAccent)),
        );
      }
    }
    
    

    image-20220304112029232

二、Flutter Card 组件

卡片组件属性

image-20220304112126586

demo


class LayoutDemo extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return ListView(
      //ListView里面没法继续嵌套ListView
      children: <Widget>[
        Card(
          margin: EdgeInsets.all(10),
          child: Column(children: <Widget>[
            ListTile(
                title: Text("张三", style: TextStyle(fontSize: 28)),
                subtitle: Text("高级工程师")),
            Divider(),
            ListTile(
              title: Text("电话:121312"),
            ),
            ListTile(title: Text("地址:北京海淀"))
          ]),
        ),
        Card(
          margin: EdgeInsets.all(10),
          child: Column(children: <Widget>[
            ListTile(
                title: Text("李四", style: TextStyle(fontSize: 28)),
                subtitle: Text("高级工程师")),
            Divider(),
            ListTile(
              title: Text("电话:121312"),
            ),
            ListTile(title: Text("地址:北京海淀"))
          ]),
        )
      ],
    );
  }
}

image-20220304113224554

图文卡片demo

class LayoutDemo extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return ListView(
      //ListView里面没法继续嵌套ListView
      children: <Widget>[
        Card(
          margin: EdgeInsets.all(10),
          child: Column(children: <Widget>[
            Image.network(""),
            ListTile(
              leading: Icon(Icons.list, color: Colors.cyan),
              title: Text("图片1"),
              subtitle: Text("嘿嘿"),
            )
          ]),
        )
      ],
    );
  }
}

这样子的问题是没法控制图片的宽高比,于是把Image.network放进AspectRatio组件

class LayoutDemo extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return ListView(
      //ListView里面没法继续嵌套ListView
      children: <Widget>[
        Card(
          margin: EdgeInsets.all(10),
          child: Column(children: <Widget>[
            AspectRatio(
              aspectRatio: 16 / 9,
              child: Image.network(
                  "https://www.itying.com/images/flutter/1.png",
                  fit: BoxFit.cover //让Image.network铺满AspectRatio
                  ),
            ),
            ListTile(
              leading: Icon(Icons.list, color: Colors.cyan),
              title: Text("图片1"),
              subtitle: Text("嘿嘿"),
            )
          ]),
        )
      ],
    );
  }
}

image-20220304114826579

  • 多加几张图片

    import 'package:flutter/material.dart';
    
    void main() => runApp(MyApp());
    
    class MyApp extends StatelessWidget {
      const MyApp({Key? key}) : super(key: key);
    
      @override
      Widget build(BuildContext context) {
        return MaterialApp(
            home: Scaffold(
          appBar: AppBar(title: Text('FlutterDemo')),
          body: LayoutDemo(),
        ));
      }
    }
    
    class LayoutDemo extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        return ListView(
          //ListView里面没法继续嵌套ListView
          children: <Widget>[
            Card(
              margin: EdgeInsets.all(10),
              child: Column(children: <Widget>[
                AspectRatio(
                  aspectRatio: 16 / 9,
                  child: Image.network(
                      "https://www.itying.com/images/flutter/1.png",
                      fit: BoxFit.cover //让Image.network铺满AspectRatio
                      ),
                ),
                ListTile(
                  leading: ClipOval(
                      child: Image.network(
                          "https://www.itying.com/images/flutter/1.png",
                          fit: BoxFit.cover,
                          height: 60,
                          width: 60)),
                  title: Text("图片1"),
                  subtitle: Text("嘿嘿"),
                )
              ]),
            ),
            Card(
              margin: EdgeInsets.all(10),
              child: Column(children: <Widget>[
                AspectRatio(
                  aspectRatio: 16 / 9,
                  child: Image.network(
                      "https://www.itying.com/images/flutter/2.png",
                      fit: BoxFit.cover //让Image.network铺满AspectRatio
                      ),
                ),
                ListTile(
                  leading: ClipOval(
                      child: Image.network(
                          "https://www.itying.com/images/flutter/2.png",
                          fit: BoxFit.cover,
                          height: 60,
                          width: 60)),
                  title: Text("图片2"),
                  subtitle: Text("嘿嘿"),
                )
              ]),
            ),
            Card(
              margin: EdgeInsets.all(10),
              child: Column(children: <Widget>[
                AspectRatio(
                  aspectRatio: 16 / 9,
                  child: Image.network(
                      "https://www.itying.com/images/flutter/5.png",
                      fit: BoxFit.cover //让Image.network铺满AspectRatio
                      ),
                ),
                ListTile(
                  leading: ClipOval(
                      child: Image.network(
                          "https://www.itying.com/images/flutter/5.png",
                          fit: BoxFit.cover,
                          height: 60,
                          width: 60)),
                  title: Text("图片3"),
                  subtitle: Text("嘿嘿"),
                )
              ]),
            )
          ],
        );
      }
    }
    
    
    image-20220304115541873 - 圆形图片处理方式2
    ListTile(
                  leading: CircleAvatar(
                    backgroundImage:
                        NetworkImage("https://www.itying.com/images/flutter/5.png"),
                  ),
                  title: Text("图片3"),
                  subtitle: Text("嘿嘿"),
                )
    

    image-20220304115735905

将列表中的数据渲染进去 ,生成动态卡片列表

  • 列表listData.dart

    List listData = [
      {
        "title": 'Candy Shop',
        "author": 'Mohamed Chahin',
        "imageUrl": 'https://www.itying.com/images/flutter/1.png',
      },
      {
        "title": 'Childhood in a picture',
        "author": 'Google',
        "imageUrl": 'https://www.itying.com/images/flutter/2.png',
      },
      {
        "title": 'Alibaba Shop',
        "author": 'Alibaba',
        "imageUrl": 'https://www.itying.com/images/flutter/3.png',
      },
      {
        "title": 'Candy Shop',
        "author": 'Mohamed Chahin',
        "imageUrl": 'https://www.itying.com/images/flutter/4.png',
      },
      {
        "title": 'Tornado',
        "author": 'Mohamed Chahin',
        "imageUrl": 'https://www.itying.com/images/flutter/5.png',
      },
      {
        "title": 'Undo',
        "author": 'Mohamed Chahin',
        "imageUrl": 'https://www.itying.com/images/flutter/6.png',
      },
      {
        "title": 'white-dragon',
        "author": 'Mohamed Chahin',
        "imageUrl": 'https://www.itying.com/images/flutter/7.png',
      }
    ];
    
    
  • 代码

    import 'package:flutter/material.dart';
    import 'res/listData.dart';
    
    void main() => runApp(MyApp());
    
    class MyApp extends StatelessWidget {
      const MyApp({Key? key}) : super(key: key);
    
      @override
      Widget build(BuildContext context) {
        return MaterialApp(
            home: Scaffold(
          appBar: AppBar(title: Text('FlutterDemo')),
          body: LayoutDemo(),
        ));
      }
    }
    
    class LayoutDemo extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        return ListView(
          //ListView里面没法继续嵌套ListView
          children: listData.map((value) {
            return Card(
              margin: EdgeInsets.all(10),
              child: Column(children: <Widget>[
                AspectRatio(
                  aspectRatio: 16 / 9,
                  child: Image.network(value["imageUrl"],
                      fit: BoxFit.cover //让Image.network铺满AspectRatio
                      ),
                ),
                ListTile(
                  leading: CircleAvatar(
                    backgroundImage: NetworkImage(value["imageUrl"]),
                  ),
                  title: Text(value["title"]),
                  subtitle: Text(value["author"]),
                )
              ]),
            );
          }).toList(),
        );
      }
    }
    
  • 效果

    ),
            ),
            ListTile(
              leading: CircleAvatar(
                backgroundImage: NetworkImage(value["imageUrl"]),
              ),
              title: Text(value["title"]),
              subtitle: Text(value["author"]),
            )
          ]),
        );
      }).toList(),
    );
    
  • 效果

    image-20220304121032525

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2022-03-06 13:12:56  更:2022-03-06 13:14:06 
 
开发: 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 17:10:21-

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