Flutter屏幕适配插件screen_adapter的使用

Flutter屏幕适配插件screen_adapter的介绍

屏幕适配插件screen_adapter是一个基于flutter_screenutil开发的屏幕适配工具,主要用于Android和iOS平台。它的使用方式与flutter_screenutil基本一致。

screen_adapter使用方法

初始化

在应用启动时,只需进行一次初始化操作:

Future<void> main() async {
  // 初始化屏幕适配插件
  ScreenAdapter.init();

  runApp(const MyApp());
}

调用方式

在项目中,可以通过以下方式调用适配后的尺寸:

  • 16.w 表示宽度为16的适配值。
  • 16.r 表示字体大小为16的适配值。
  • 16.h 表示高度为16的适配值。

具体的使用方法可以参考flutter_screenutil的官方文档。

完整示例代码

以下是一个完整的示例代码,展示了如何使用screen_adapter插件:

import 'dart:ui';

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

import 'package:flutter/services.dart';
import 'package:screen_adapter/screen_adapter.dart';
import 'package:screen_adapter_example/example.dart'; // 示例页面

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

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

  [@override](/user/override)
  State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: HomeWidget(),
    );
  }
}

class HomeWidget extends StatefulWidget {
  const HomeWidget({Key? key}) : super(key: key);

  [@override](/user/override)
  State<HomeWidget> createState() => _HomeWidgetState();
}

class _HomeWidgetState extends State<HomeWidget> {
  String _platformVersion = 'Unknown';
  double _devicePxRadio = 0;
  double _height = 0;
  double _width = 0;

  [@override](/user/override)
  void initState() {
    super.initState();
    initPlatformState();
  }

  // 平台状态初始化
  Future<void> initPlatformState() async {
    String platformVersion;
    double height;
    double width;
    double devicePxRadio;

    try {
      // 获取平台版本、设备像素比、物理宽度和高度
      platformVersion = await ScreenAdapter.getPlatformVersion() ?? 'Unknown platform version';
      devicePxRadio = await ScreenAdapter.getDevicePxRatio() ?? 0;
      width = await ScreenAdapter.getPhysicalWidth() ?? 0;
      height = await ScreenAdapter.getPhysicalHeight() ?? 0;
    } on PlatformException {
      platformVersion = 'Failed to get platform version.';
      height = 0;
      width = 0;
      devicePxRadio = 0;
    }

    // 更新UI状态
    if (!mounted) return;

    setState(() {
      _platformVersion = platformVersion;
      _height = height;
      _width = width;
      _devicePxRadio = devicePxRadio;
    });
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('screen_adapter 示例'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            // 显示平台信息
            Text('运行环境: $_platformVersion\n'),
            Text('设备高度: $_height\n'),
            Text('设备宽度: $_width\n'),
            Text('设备像素比: $_devicePxRadio\n'),
            // 显示屏幕适配示例
            Text('宽度适配: ${16.w}'),
            Text('高度适配: ${16.h}'),
            Text('字体大小适配: ${16.r}'),
            ElevatedButton(
              onPressed: () {
                // 跳转到示例页面
                Navigator.push(
                  context,
                  MaterialPageRoute(builder: (context) => const ExamplePage()),
                );
              },
              child: Text('查看示例'),
            ),
          ],
        ),
      ),
    );
  }
}

示例页面(ExamplePage)

class ExamplePage extends StatelessWidget {
  const ExamplePage({Key? key}) : super(key: key);

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('示例页面'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            Text('宽度适配: ${200.w}'),
            Text('高度适配: ${100.h}'),
            Text('字体大小适配: ${20.r}'),
          ],
        ),
      ),
    );
  }
}

更多关于Flutter屏幕适配插件screen_adapter的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter屏幕适配插件screen_adapter的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


screen_adapter 是一个用于 Flutter 的屏幕适配插件,它可以帮助开发者轻松地实现不同屏幕尺寸的适配。通过使用 screen_adapter,你可以确保你的应用在各种设备上都能保持良好的布局和视觉效果。

安装 screen_adapter

首先,你需要在 pubspec.yaml 文件中添加 screen_adapter 依赖:

dependencies:
  flutter:
    sdk: flutter
  screen_adapter: ^1.0.0  # 请使用最新版本

然后运行 flutter pub get 来安装依赖。

基本使用

  1. 初始化 ScreenAdapter

    在你的应用的入口文件(通常是 main.dart)中,初始化 ScreenAdapter。你需要在 runApp 之前调用 ScreenAdapter.init() 方法。

    import 'package:flutter/material.dart';
    import 'package:screen_adapter/screen_adapter.dart';
    
    void main() {
      runApp(MyApp());
    }
    
    class MyApp extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        return MaterialApp(
          title: 'Flutter Demo',
          theme: ThemeData(
            primarySwatch: Colors.blue,
          ),
          home: MyHomePage(),
        );
      }
    }
    
    class MyHomePage extends StatefulWidget {
      @override
      _MyHomePageState createState() => _MyHomePageState();
    }
    
    class _MyHomePageState extends State<MyHomePage> {
      @override
      void initState() {
        super.initState();
        ScreenAdapter.init(
          designSize: Size(375, 667), // 设计稿的尺寸
          allowFontScaling: false, // 是否允许字体缩放
        );
      }
    
      @override
      Widget build(BuildContext context) {
        return Scaffold(
          appBar: AppBar(
            title: Text('Screen Adapter Demo'),
          ),
          body: Center(
            child: Text('Hello, World!'),
          ),
        );
      }
    }
    
  2. 使用 ScreenAdapter 进行适配

    在布局中使用 ScreenAdapter 提供的方法来适配尺寸。常用的方法有:

    • ScreenAdapter.width(double width):将设计稿中的宽度转换为实际屏幕宽度。
    • ScreenAdapter.height(double height):将设计稿中的高度转换为实际屏幕高度。
    • ScreenAdapter.fontSize(double fontSize):将设计稿中的字体大小转换为实际屏幕字体大小。

    例如:

    class _MyHomePageState extends State<MyHomePage> {
      @override
      void initState() {
        super.initState();
        ScreenAdapter.init(
          designSize: Size(375, 667), // 设计稿的尺寸
          allowFontScaling: false, // 是否允许字体缩放
        );
      }
    
      @override
      Widget build(BuildContext context) {
        return Scaffold(
          appBar: AppBar(
            title: Text('Screen Adapter Demo'),
          ),
          body: Center(
            child: Container(
              width: ScreenAdapter.width(200), // 设计稿中的宽度为200
              height: ScreenAdapter.height(100), // 设计稿中的高度为100
              color: Colors.blue,
              child: Text(
                'Hello, World!',
                style: TextStyle(
                  fontSize: ScreenAdapter.fontSize(16), // 设计稿中的字体大小为16
                ),
              ),
            ),
          ),
        );
      }
    }
回到顶部