Flutter如何用解决不同平台,不同设备尺寸的样式兼容问题?使用第三方库--ScreenUtil

文章详细介绍了如何在Flutter项目中引入和使用flutter_screenUtil库,包括从pub.dev查找库信息,选择兼容版本,修改pubspec.yaml文件添加依赖,通过Pubget安装,以及在代码中使用ScreenUtil进行屏幕适配的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一. 准备工作

        1. 首先需要去pub官网查看这个第三方库的信息,访问地址:https://pub.dev

        2. 在搜索框中输入 flutter_screenUtil

        3.进入详情页后,最关心的是关于该依赖的版本问题,因为版本会导致功能不一样

        4. 进入版本页

         注意:如果你的flutter项目版本低于2.12.0 ,那么你需要在版本页往下寻找不带有 Null Safety的版本去使用。

         5. 找到你所需的版本号,我们的准备工作就到此结束,接下来进入编辑器中开始实际引入操作。

二. 项目中引入

        1. 找到项目中的 pubspec.yaml 文件,在依赖中添加你需要的screenUtil依赖,以及所需的版本号。(因为作者本人的flutter项目版本是1.22.6,所以在此我引入的是4.0.4,不支持空安全的版本,大家根据自己项目的flutter版本引入版本号)

        2. 添加完成后,ctrl+s 保存文件

        (1)点击Andriod Studio编辑器中的右上角:Pub get即可,此时,项目会根据yaml文件中的dependencies去下载对应的资源(推荐使用这个Pub get按钮,编辑器的终端输入命令没有这个稳定)

 

        (2)点击Pub get后,Android Studio会在message中,告知下载是否成功。

                code为0,代表成功;如果code不为0,那么会出现对应的错误。

 三. 代码中使用

        1. 在成功引入后,接下来就是对代码进行修改。

        (1) 这是不加入ScreenUtil时,runApp内容

import 'package:flutter/material.dart';

void main() {
  runApp(MaterialApp(
    debugShowCheckedModeBanner: false,
    title: "flutter Demo",
    theme: ThemeData(primarySwatch: Colors.blue),
    home: Scaffold(
      body: Container(
            child: Text("hello screen")
        ) 
    ),
  ));
}

         (2)重点来了:在常规runApp的结构中,我们是直接嵌入了 MaterialApp组件。如果使用ScreenUtil,那么就需要对runApp组件进行改造,改造分为4步:

        第一步:将MaterialApp组件内容剪切出来;

import 'package:flutter/material.dart';

// 不要忘记引入该资源!!!
import 'package:flutter_screenutil/flutter_screenutil.dart';

void main() {
  runApp();
}

        第二步:在runApp()中返回ScreenUtilInit();

import 'package:flutter/material.dart';

// 不要忘记引入该资源
import 'package:flutter_screenutil/flutter_screenutil.dart';

void main() {
  runApp(ScreenUtilInit());
}

        第三步:在剪切板的MaterialApp组件内容放在ScreenUtilInit组件的builder中保存即可;

import 'package:flutter/material.dart';

// 不要忘记引入该资源
import 'package:flutter_screenutil/flutter_screenutil.dart';

void main() {
  runApp(ScreenUtilInit(
     // 第一个参数,必传项
    designSize: Size(375, 812),  // 代表UI图设计尺寸,具体值根据UI提供的设置
    // 第二个参数,必传项
    builder: () =>
        MaterialApp(
          debugShowCheckedModeBanner: false,
          title: "flutter Demo",
          theme: ThemeData(primarySwatch: Colors.blue),
          home: Scaffold(
              body: Container(
                  child: Text("hello screen")
              )
          ),
        ),
      )
  );
}

        第四步:在项目中设置了具体数值的地方,比如width,height,top,left,padding,borderRadius,fontSize等进行相应的修改。

// 使用screenUtil前的代码
width: 200,
height: 200,
padding: EdgeInsets.all(10.0),
fontSize: 14,


// 使用screenUtil后的代码
width: ScreenUtil().setWidth(200),
height: ScreenUtil().setHeight(200),
padding: EdgeInsets.all(ScreenUtil().SetWidth(10.0)),
fontSize: ScreenUtil().setSp(14)

注意:如果项目的Dart版本高于2.6.0,(windows键+R键:cmd窗口中输入dart --version即可查看版本号)那么就不采用ScreenUtil.setWidth() 这样的写法,直接使用.w,.h,.sp这样的写法,参照下图

width: 200,
fontSize: 14,

// 修改为:
width: 200.w,
fontSize: 14.sp,

最后:你可以到手机,平板上进行调试了

### 关于 `flutter_secure_storage` 的跨平台兼容性及其解决方案 `flutter_secure_storage` 是一个专为 Flutter 提供的安全存储插件,旨在帮助开发者在多个平台上安全地存储敏感信息[^2]。该插件的核心功能之一就是其强大的 **跨平台支持**,能够覆盖主流操作系统,包括 AndroidiOS、macOS、Linux、Windows 和 Web 平台[^4]。 #### 跨平台兼容性的实现机制 1. **Android 平台**: 在 Android 上,`flutter_secure_storage` 默认使用 AES 加密算法来保护数据,并提供了选项以启用更高强度的加密模式(如 AES/GCM/NoPadding 或 RSA/ECB/OAEPWithSHA-256AndMGF1Padding)。此外,在某些场景下还可以通过配置 EncryptedSharedPreferences 来增强本地存储的安全性。 2. **iOS 平台**: 对于 iOS 设备,此插件利用系统的 Keychain 服务完成数据的持久化保存操作。Keychain 是苹果官方推荐的一种高度可靠的数据管理工具,具有天然的安全性和隔离特性。 3. **其他桌面端与移动端的支持情况**: macOS 及 Linux 系统同样依赖各自的操作系统级 API 实现相应的安全保障措施;而 Windows 则借助 DPAPI (Data Protection API) 技术达成同等效果。 4. **Web 特殊处理方式**: 针对 Web 场景下的特殊需求,`flutter_secure_storage` 引入了基于现代浏览器标准定义的一套名为 WebCrypto 的协议栈来进行加解密运算工作流设计。这使得即使是在无状态环境里也能维持一定程度上的机密性防护水平。 #### 解决方案概述 尽管上述提到的技术手段已经极大程度满足日常开发所需,但在实际运用过程中仍可能出现因目标运行时差异而导致的行为不一致现象。以下是几种常见问题对应的解决办法: - 如果发现特定版本间存在行为偏差,则建议检查所使用的 SDK 是否最新并及时升级至稳定版; - 当遇到性能瓶颈或者资源占用过高时,可以根据具体业务逻辑调整内部参数设定比如更改默认加密策略等; - 若面临极端复杂环境下难以适配的情况,则考虑引入第三方库辅助完成额外定制化的扩展能力构建。 总之,合理评估项目实际情况后再做针对性优化才是最有效的途径。 ```dart // 示例代码展示如何初始化和读写 secure storage 中的内容 import 'package:flutter_secure_storage/flutter_secure_storage.dart'; final storage = new FlutterSecureStorage(); void writeData() async { await storage.write(key: "token", value: "your_token_here"); } Future<String> readData() async { String? token = await storage.read(key: "token"); return token ?? ""; } ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值