fullter 学习记录_01_插件整理

news2024/11/25 13:24:44

flutter学习记录第一节--搭建项目及路由的设置

  • 1.轮播图: flutter_swiper
    • 1.1 用处
    • 1.2 导入flutter_swiper库
    • 1.3 导入库,运行后可能遇到的问题
    • 1.4 属性说明
    • 1.5 代码案例
  • 2. flutter_screenutil
    • 2.1 用处
    • 2.2 引用
    • 2.3 使用说明
    • 2.4 代码实现按理
    • 2.5 ScreenUtl 的封装

1.轮播图: flutter_swiper

1.1 用处

可快速实现轮播图的效果
在这里插入图片描述

1.2 导入flutter_swiper库

pubspec.yaml 中的dependencies: 添加 ·flutter_swiper: ^1.1.6 这个引用,并保存

1.3 导入库,运行后可能遇到的问题

当引入三方库,运行报如下错误时:Cannot run with sound null safety, because the following dependencies, 参考这个解决方案:
[^1]: 解决方案
即,在终端运行下面的代码:flutter run --no-sound-null-safety
如果按照上述方案,后续的热更,就用命令行看实时的效果
在这里插入图片描述
命令行的指令有以下几种:
在这里插入图片描述
Flutter run key commands.
r Hot reload. 🔥🔥🔥 (热更,代码修改完后,保存,在控制台输入“r”, 就可以及时看到修改的效果)
R Hot restart. (热启动,代码修改完后,保存,在控制台输入“R”, 就可以重新启动app)
h List all available interactive commands.
d Detach (terminate “flutter run” but leave application running).
c Clear the screen
q Quit (terminate the application on the device).

1.4 属性说明

在这里插入图片描述

1.5 代码案例

// 轮播图, 把轮播图组件定义成一个方法,抽离出来
  Widget _swiperWidget() {
  // 定义一个网络图片的数组
    List<Map> imageList = [
      {"url": "https://lmg.jj20.com/up/allimg/tp09/210H51R3313N3-0-lp.jpg"},
      {"url": "https://lmg.jj20.com/up/allimg/tp07/31041019268143-lp.jpg"},
      {"url": "https://lmg.jj20.com/up/allimg/711/121513114600/131215114600-0-1200.jpg"}
    ];
	// 返回一个内容视图
    return Container(
    // 用AspectRatio 来设置 轮播图的宽高比
      child: AspectRatio(
          aspectRatio: 2 / 1,
          // 用Swiper组件创建轮播图
          child: Swiper(
          // 每个轮播图的创建方法
            itemBuilder: (context, index) {
              return Image.network(imageList[index]["url"], fit: BoxFit.fill);
            },
            // 设置轮播图的个数
            itemCount: imageList.length,
            // 是否自动播放
            autoplay: true,
            // 
            pagination: const SwiperPagination(),
            // control: SwiperControl(),
          )),
    );
  }

2. flutter_screenutil

2.1 用处

可以根据设计稿的宽高,自适应所有的设备。

2.2 引用

pubspec.yaml 中的dependencies: 添加 ·flutter_screenutil: ^5.0.0+2 这个引用,并保存
参考文档: https://blog.csdn.net/shulianghan/article/details/120043532

使用注意事项:需要在使用之前找一个合适的地方,例如在项目第一个页面初始化一下设计稿的宽高
需要用ScreenUtilInit()包装一下

2.3 使用说明

设置宽度:ScreenUtil().setWidth(xx)
设置高度:ScreenUtil().setHeight(x’x)
根据屏幕宽度适配尺寸 : ScreenUtil().setWidth(540) (sdk>=2.6 : 540.w)
根据屏幕高度适配尺寸(一般根据宽度适配即可) :ScreenUtil().setHeight(200) (sdk>=2.6 : 200.h)
根据宽度或高度中的较小者进行适配:ScreenUtil().radius(200) (sdk>=2.6 : 200.r)
适配字体 : ScreenUtil().setSp(24)
取 24和 24.sp 中的最小值: (sdk>=2.6 : 24.sp) 24.sm
设备的像素密度: ScreenUtil.pixelRatio
设备宽度: ScreenUtil.screenWidth (sdk>=2.6 : 1.sw)
设备高度: ScreenUtil.screenHeight (sdk>=2.6 : 1.sh)
底部安全区距离,适用于全面屏下面有按键的: ScreenUtil.bottomBarHeight
状态栏高度 刘海屏会更高: ScreenUtil.statusBarHeight
系统字体缩放比例: ScreenUtil.textScaleFactor
实际宽度与设计稿宽度的比例: ScreenUtil().scaleWidth
实际高度与设计稿高度的比例: ScreenUtil().scaleHeight
屏幕方向: ScreenUtil().orientation
屏幕宽度的 0.2倍: 0.2.sw
屏幕高度的 0.5倍: 0.5.sh

2.4 代码实现按理

class HomePage extends StatefulWidget {
  const HomePage({super.key});

  
  State<HomePage> createState() => _HomePageState();
}

class _HomePageState extends State<HomePage> {
  
  Widget build(BuildContext context) {
    // 需要用ScreenUtilInit()包装一下
    return  ScreenUtilInit(
      /// 设置设计稿宽高
      designSize: const  Size(750, 1334),
      /// 
      builder: (context, child) {
        return ListView(
          children: <Widget>[
             _swiperWidget(),
             SizedBox(height: ScreenUtil().setHeight(10)),
            _titleWidget("猜你喜欢"),
            SizedBox(height: ScreenUtil().setHeight(10)),
            _titleWidget("热门推荐"),
          ],
        );
      },
    );
  }

  // 轮播图
  Widget _swiperWidget() {
    List<Map> imageList = [
      {"url": "https://lmg.jj20.com/up/allimg/tp09/210H51R3313N3-0-lp.jpg"},
      {"url": "https://lmg.jj20.com/up/allimg/tp07/31041019268143-lp.jpg"},
      {"url": "https://lmg.jj20.com/up/allimg/711/121513114600/131215114600-0-1200.jpg"}
    ];

    return Container(
      child: AspectRatio(
          aspectRatio: 2 / 1,
          child: Swiper(
            itemBuilder: (context, index) {
              return Image.network(imageList[index]["url"], fit: BoxFit.fill);
            },
            itemCount: imageList.length,
            autoplay: true,
            pagination: const SwiperPagination(),
            // control: SwiperControl(),
          )),
    );
  }

  // 猜你喜欢
  Widget _titleWidget(title) {
    return Container(
      height: ScreenUtil().setWidth(32),
      margin: EdgeInsets.only(left: ScreenUtil().setWidth(10)),
      padding: EdgeInsets.only(left: ScreenUtil().setWidth(10)),
      decoration: BoxDecoration(
        border: Border(
          left: BorderSide(
            color: Colors.red,
            width: ScreenUtil().setWidth(10))
      ),
      ),
      child: Text(title, style: const TextStyle(color: Colors.grey)),
    );
  }
}

2.5 ScreenUtl 的封装

理由:将三方库常用的方法进一步封装, 原因如下:

  1. 避免三方库修改方法后, 项目中用的地方太多, 修改起来麻烦
  2. 三方库的方法太长, 使用起来不方便

import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';


class ScreenHelper {
  static init(BuildContext context) {
    ScreenUtil.init(
      context, 
      designSize: const Size(750, 1334));
  }

  static setHeight(double value) {
    return ScreenUtil().setHeight(value);
  }

  static setWidth(double value) {
    return ScreenUtil().setWidth(value);
  }

  static double screenHeight() {
    return ScreenUtil().screenHeight;
  }

  static double screentWidth() {
    return ScreenUtil().screenWidth; 
  }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/552106.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

UNIX环境高级编程——守护进程

13.1 引言 守护进程&#xff08;daemon&#xff09;是生存期长的一种进程。它们常常在系统引导装入时启动&#xff0c;仅在系统关闭时才终止。因为它们没有控制终端&#xff0c;所以说它们是在后台运行的。 13.2 守护进程的特征 系统进程依赖于操作系统实现。父进程ID为0的各…

xxs跨站之原理分类及攻击手法

xss跨站达到原理&#xff0c;危害和特点 他和语言没有太大关系&#xff0c;它大部分都是属于一个前端的漏洞&#xff0c;搭建一个简易的php网站存在xss跨站漏洞 访问这个网站&#xff0c;x1&#xff0c;就输出1&#xff0c; 如果我们把x<script>alert(1)</script&g…

系统分析师考试之论文框架

系统分析师考试之论文框架 系统分析师考试之论文框架

SpringBoot—常用注解

目录 一、注解(annotations)列表 二、注解(annotations)详解 三、JPA注解 四、springMVC相关注解 五、全局异常处理 一、注解(annotations)列表 SpringBootApplication&#xff1a; 包含了ComponentScan、Configuration和EnableAutoConfiguration注解。其中ComponentScan…

linux 读写锁 pthread_rwlock

专栏内容&#xff1a;linux下并发编程个人主页&#xff1a;我的主页座右铭&#xff1a;天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物&#xff0e; 目录 前言 概念介绍 应用场景 接口说明 头文件 rwlock定义 初始化/销毁 两种初始化方…

算法设计与智能计算 || 专题九: 基于拉普拉斯算子的谱聚类算法

谱聚类 文章目录 谱聚类1. 信息增益的度量2. 谱聚类: 寻找最优的函数向量 f \boldsymbol{f} f2.1 : 寻找一个最优的函数向量 f \boldsymbol{f} f2.2 寻找鲁棒性更强的多个函数向量2.3 谱聚类(spectral clustering)算法 小结 1. 信息增益的度量 由于数据集 X [ x 1 , x 2 ,…

自动化仓储管理系统(WMS)

仓储是现代物流的一个重要组成部分&#xff0c;在物流系统中起着至关重要的作用&#xff0c;是厂商研究和规划的重点。高效合理的仓储可以帮助厂商加快物资流动的速度&#xff0c;降低成本&#xff0c;保障生产的顺利进行&#xff0c;并可以实现对资源有效控制和管理。 随着我…

CVE-2023-27363 FOXIT PDF READER与EDITOR任意代码执行漏洞复现

目录 0x01 声明&#xff1a; 0x02 简介&#xff1a; 0x03 漏洞概述&#xff1a; 0x04 影响版本&#xff1a; 0x05 环境搭建&#xff1a; 文件下载&#xff1a; 0x06 漏洞复现&#xff1a; POC下载&#xff1a; 利用POC&#xff1a; RCE&#xff1a; 0x07 修复建议&a…

2023.5.21 第五十四次周报

目录 前言 文献阅读:跨多个时空尺度进行预测的时空 LSTM 模型 背景 本文思路 本文解决的问题 方法论 SPATIAL 自动机器学习模型 数据处理 模型性能 代码 用Python编写的LSTM多变量预测模型 总结 前言 This week, I studied an article that uses LSTM to solve p…

Kuberadm安装部署

目录 1、所需配置 2、准备环境 3、安装Docker 4、安装Kubeadm、Kubelet和Kuberctl 5、部署K8s集群 6、初始化kubeadm 7、设置kubecrl 8、部署网络插件flannel 测试 9、部署Dashboard 10、安装Harbor私有仓库 11、内核参数优化方案 1、所需配置 主机名系统要求IP地…

一款C#开发的窗口文本提取开源软件

窗体上的文字&#xff0c;我们是无法直接复制的&#xff0c;如果要获取&#xff0c;大家第一反应肯定是利用OCR&#xff0c;但是今天给大家推荐一个通过Hook原理来抓取文本的开源项目。 项目简介 这是一个基于.Net Framework开发的&#xff0c;功能强大的文本提取工具&#x…

【消息中间件】为什么要用消息中间件?解决了什么问题?

文章目录 前言一、什么是消息中间件&#xff1f;二、为什么使用&#xff1f;二、使用消息中间件前后对比三、当前几种中间件&#xff1a;四、使用消息中间件场景&#xff1a; 前言 一般认为&#xff0c;采用消息传送机制/消息队列 的中间件技术&#xff0c;进行数据交流&#…

[CISCN 2019华东南]Web4 day5

考察&#xff1a;任意文件读取 获取网卡地址 伪随机 打开界面&#xff0c;点击read somethings直接进行了跳转 直接修改url&#xff0c;发现没显示&#xff0c;但是访问错误的路由就会有no response 读取flag也无果&#xff0c;那就读一下/app/app.py&#xff0c;为什么读这个&…

postgresql|数据库|插件学习(二)---postgresql-12的外置插件pg_profile的启用和使用

前言&#xff1a; postgresql数据库有非常多的插件&#xff0c;那么&#xff0c;pg_profile算是监控类的插件&#xff0c;该插件会通过内置的pg_stat_statements插件和dblink插件这两个插件监控查询postgresql的状态&#xff0c;并可以通过打快照的方式得到awr报告。 ###注&a…

攻防世界 wife_wife

查看提示&#xff1a;不需要爆破 进入到靶场中&#xff0c;发现需要注册用户 到达注册页面&#xff0c;is admin需要打勾&#xff0c;并输入同样 burpsuite抓包 原来payload&#xff1a;{"username":"1","password":"1","isAdmin…

MySQL数据库---笔记2

MySQL数据库---笔记2 一、函数1.1、字符串函数1.2、数值函数1.3、日期函数1.4、流程函数 二、约束2.1、概述2.2、演示2.3、外键约束 一、函数 函数 是指一段可以直接被另一段程序调用的程序或代码。 1.1、字符串函数 函数功能CONCAT(S1,S2,…Sn)字符串拼接&#xff0c;将S1&…

分布式医疗云平台【基础功能搭建、数据表定义、ERP业务表、系统表、其它配置表 】(三)-全面详解(学习总结---从入门到深化)

基础功能搭建 创建数据库 数据表定义 ERP业务表 系统表 其它配置表 基础功能搭建 创建数据库 执行脚本&#xff0c;创建基础数据 数据表定义 业务表 his_care_order: 药用处方表&#xff0c;涉及的业务模块&#xff1a;处方收费、处方发药、新开检查 his_care_history…

jetson填坑-单独安装cuda,cudnn,tensorrt任意适用版本

前言 jetson无法单独安装cuda&#xff0c;cudnn&#xff0c;tensorrt的解决方法&#xff0c;比下载SDK manager刷机安装简单好多倍 这个方法是直接下载deb包安装&#xff0c;deb包安装网站 https://repo.download.nvidia.com/jetson/ 单独安装cuda 1 sudo apt-get install …

ArcMap:第一届全国大学生GIS应用技能大赛(滁州学院)详解

目录 01 上午题 1.1 题目 1.2 数据 1.2.1 如何添加比赛数据&#xff1f; 1.2.2 比赛数据展示 1.3 思路 1.3.1 坐标系问题 1.4 实操 1.4.1 建立空间数据库和比赛数据导入 1.4.2 坐标系问题解决 1.4.3 要素的订正 1.4.4 数据入库和符号化管理&#xff1b; 1.4.5 其…

C++ thread编程(Linux系统为例)—thread成员函数

c 11 之后有了标准的线程库&#xff1a;std::thread。 参考thread库的使用 构造函数 thread的构造函数有下面四个重载 默认构造函数 thread() noexcept初始化构造函数 template <class Fn, class... Args> explicit thread (Fn&& fn, Args&&... arg…