首页 > 其他分享 >flutter屏幕适配方案

flutter屏幕适配方案

时间:2023-12-18 17:57:40浏览次数:29  
标签:double screenutil 适配 屏幕 flutter Text

使用MediaQuery和比例因子

优点:使用简单,可以处理大多数情况下的屏幕适配需求。

缺点:需要手动计算比例因子,并且随着UI元素变得更加复杂和层次化(例如多层次列表或动画效果),使用此方法可能会变得更加困难。

import 'package:flutter/material.dart';

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    // 使用 MediaQuery.of(context) 获取 MediaQueryData 对象
    final mediaQueryData = MediaQuery.of(context);

    // 获取屏幕大小
    final screenSize = mediaQueryData.size;

    // 获取设备像素比
    final devicePixelRatio = mediaQueryData.devicePixelRatio;

    // 获取 SafeArea 内边距 ; SafeArea 是一个指定在屏幕上可见内容的区域
    final padding = mediaQueryData.padding;

    // 获取当前可见区域的内边距
    final viewInsets = mediaQueryData.viewInsets;

    // 获取屏幕方向
    final orientation = mediaQueryData.orientation;

    // 获取平台亮度模式
    final brightness = mediaQueryData.platformBrightness;

    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('MediaQuery Example'),
        ),
        body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: [
              Text('Screen Size: $screenSize'),
              Text('Device Pixel Ratio: $devicePixelRatio'),
              Text('SafeArea Padding: $padding'),
              Text('View Insets: $viewInsets'),
              Text('Orientation: $orientation'),
              Text('Brightness: $brightness'),
            ],
          ),
        ),
      ),
    );
  }
}

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

flutter_screenutil

优点:使用简单,支持屏幕宽度适配和按照设备像素密度适配,并提供了多种适配方式,可以应对多种屏幕尺寸和设备像素密度的情况。

缺点:在高级UI布局和元素调整方面可能存在一些限制,并可能会影响代码的可维护性。

flutter_screenutil 插件的 ScreenUtilInit 对 MaterialApp 进行了包装,以便于在应用程序启动时对屏幕适配进行初始化。然而,由于这个包装可能会与某些特定应用场景的组件结合使用,导致一些额外的问题。一般来说,flutter_screenutil 可能会给您带来以下一些问题:

  1. 在一些特定应用场景下可能会失效:例如,在 BottomNavigationBar 或者 TabBar 中,因为这些组件自带屏幕适配,使用 flutter_screenutil 可能会导致无法正常适配。

  2. 需要注意不同尺寸之间的兼容性:使用 flutter_screenutil 后,您需要确保您的应用程序可以在不同的尺寸上正常工作,否则可能会导致布局问题。

  3. 可能会对性能造成一定的影响:由于 flutter_screenutil 需要在运行时进行适配计算,可能会对应用程序的性能造成一定的影响。

  4. debugShowCheckedModeBanner :false;失效
import 'package:flutter_screenutil/flutter_screenutil.dart';  //使用的页面都要添加

void main() {
  runApp(
    MaterialApp(
        debugShowCheckedModeBanner: false, // 在这添加可以解决debugShowCheckedModeBanner失效问题
      home: ScreenUtilInit(
        designSize: const Size(1920, 1080), //第一个参数是宽度,第二个参数是高度
        builder: (context, widget) =>  MyApp(),
        
      ),
    ),
  );
}

// 屏幕宽度(单位 dp)
double screenWidth = ScreenUtil().screenWidth;

// 屏幕高度
double screenHeight = ScreenUtil().screenHeight;

// 根据屏幕宽度动态计算出的实际宽度
double width = ScreenUtil().setWidth(200);

// 根据屏幕高度动态计算出的实际高度
double height = ScreenUtil().setHeight(200);

// 根据屏幕宽度和高度动态计算出的实际字体大小
double fontSize = ScreenUtil().setSp(18);

LayoutBuilder 来获取一个内的盒子的宽度和高度

class MyBoxWidget extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return LayoutBuilder(
      builder: (BuildContext context, BoxConstraints constraints) {
        double width = constraints.maxWidth;
        double height = constraints.maxHeight;

        return Container(
          color: Colors.blue,
          width: width,
          height: height,
          child: Text(
            'Width: $width, Height: $height',
            style: TextStyle(color: Colors.white),
          ),
        );
      },
    );
  }
}

...

标签:double,screenutil,适配,屏幕,flutter,Text
From: https://www.cnblogs.com/xbinbin/p/17911507.html

相关文章

  • flutter中显示年月日、星期与时间
    代码import'package:flutter/material.dart';import'package:intl/intl.dart';import'dart:async';import'package:intl/date_symbol_data_local.dart';//添加此行classDateWidgetextendsStatefulWidget{@override_......
  • flutter better_player 增加投屏按钮
    better_player播放器默认不可以修改UI需要增加投屏按钮则需要自定义UI但是自定义UI需要布局有需要定义手势动作还需要监听播放事件有没可能服用原来的一切仅仅增加一个投屏按钮呢?答案是肯定的第一步设置主题默认安卓和IOS我们设置自定义BetterPlayerControlsC......
  • Flutter使用SharedPreferences示例
    SharedPreferencesAndroid原生开发经常会用SharedPreferences来保存一些设置,Flutter用什么来保存这些设置呢?在Flutter中,你可以使用shared_preferences插件来实现类似Android原生开发中的SharedPreferences功能,用于在应用程序中保存和检索持久化的键值对。具体使用首先,在你的Fl......
  • flutter最新封装Dio
    import'dart:convert';import'package:becoin/Routers/Routes.dart';import'package:common_utils/common_utils.dart';import'package:dio/dio.dart';import'package:flutter/cupertino.dart';import'pac......
  • 结构性设计模式-适配器模式的优缺点
    把一个类的接口变换成客户端所期待的另一种接口,从而使原本接口不匹配而无法一起工作的两个类能够在一起工作。类的适配器模式对象的适配器模式对象适配器在上图中可以看出:冲突:Target期待调用Request方法,而Adaptee并没有(这就是所谓的不兼容了)。解决方案:为使Target能够使用Ad......
  • 适配器模式揭秘:让不兼容的组件完美协同
    前言从这篇文章开始来盘一盘结构型设计模式,在开始之前先来简单回顾一下创建型的设计模式有哪些,如果有兴趣,就来一起学习吧:设计模式之简单工厂模式工厂方法模式:改变你对软件开发的认知_凡夫编程的技术博客_51CTO博客抽象工厂模式:角色解析与应用探索_凡夫编程的技术博客_51CTO博客设计......
  • Flutter 自带的搜索组件
    效果如下官方需要重写四个关键方法classsearchBarDelegateextendsSearchDelegate<String>{/*这个方法返回一个控件列表,显示为搜索框右边的图标按钮,这里设置为一个清除按钮,并且在搜索内容为空的时候显示建议搜索内容,使用的是showSuggestions(context)方法:*/@overrid......
  • 模拟适配器设计方案:360-基于10G以太网的模拟适配器
    基于10G以太网的模拟适配器一、产品概述   基于10G以太网的模拟适配器是一款分布式高速数据采集系统,实现多路AD的数据采集,并通过10G以太网光纤远距离传输到存储计算服务器,计算控制指令能通过光纤返回给数据卡进行IO信号控制。产品基于10G太网络,可迅速构建起......
  • Unity3D ugui适配iPhoneX的齐刘海屏幕详解
    Unity3D是一款强大的游戏开发引擎,广泛应用于手机游戏开发。随着苹果推出了iPhoneX,这款全面屏手机的出现给游戏开发者带来了新的适配问题。本文将详解如何在Unity3D中适配iPhoneX的齐刘海屏幕,并给出相应的技术详解和代码实现。对啦!这里有个游戏开发交流小组里面聚集了一帮热爱学习......
  • Flutter开发之安卓打包,和获取签名相关信息,公钥值相关操作
    我们Flutter开发中,难免有些小朋友因需求要获取打包签名的一些相关信息,下面我们来讲一下怎么获取一生成签名文件我们打包安卓APK包需要先生成签名文件,需运行以下指令,生成签名文件keytool-genkey-v-keystoreGMT\_keystore.keystore-aliasGMT\_keystore-keyalgRSA-keysi......