Flutter如何设置高刷新率displaymode.sethighrefreshrate()

在Flutter中调用DisplayMode.setHighRefreshRate()时,如何正确设置高刷新率?我尝试了以下代码但未能生效:

await DisplayMode.setHighRefreshRate();

需要额外配置设备参数吗?是否对Android/iOS有版本限制?部分机型调用后出现画面撕裂该如何解决?

2 回复

Flutter中设置高刷新率需使用display插件。首先添加依赖,然后调用Display.setHighRefreshRate()方法。注意设备需支持高刷新率,部分情况需手动在系统设置中开启。

更多关于Flutter如何设置高刷新率displaymode.sethighrefreshrate()的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


在 Flutter 中,设置高刷新率通常需要结合平台特定的代码来实现,因为 Flutter 本身不直接提供跨平台的高刷新率设置 API。以下是一个基于 Android 平台的实现方法,使用 DisplayDisplay.Mode 类来设置高刷新率。

步骤说明:

  1. 平台通道(Platform Channels):通过 Flutter 的平台通道调用原生代码。
  2. 原生代码(Android):在 Android 中获取 Display 对象,并设置高刷新率模式。

代码示例:

1. Flutter 端代码(Dart)

首先,在 Flutter 中创建一个方法通道来调用原生代码:

import 'package:flutter/services.dart';

class DisplayMode {
  static const MethodChannel _channel = MethodChannel('display_mode');

  // 设置高刷新率
  static Future<void> setHighRefreshRate() async {
    try {
      await _channel.invokeMethod('setHighRefreshRate');
    } on PlatformException catch (e) {
      print("设置高刷新率失败: ${e.message}");
    }
  }
}

2. Android 端代码(Kotlin)

在 Android 项目中,实现平台通道的处理逻辑。编辑 MainActivity.kt

import android.view.Display
import io.flutter.embedding.android.FlutterActivity
import io.flutter.embedding.engine.FlutterEngine
import io.flutter.plugin.common.MethodChannel

class MainActivity : FlutterActivity() {
    private val CHANNEL = "display_mode"

    override fun configureFlutterEngine(flutterEngine: FlutterEngine) {
        super.configureFlutterEngine(flutterEngine)
        MethodChannel(flutterEngine.dartExecutor.binaryMessenger, CHANNEL).setMethodCallHandler { call, result ->
            when (call.method) {
                "setHighRefreshRate" -> {
                    setHighRefreshRate()
                    result.success(null)
                }
                else -> result.notImplemented()
            }
        }
    }

    private fun setHighRefreshRate() {
        val display = windowManager.defaultDisplay
        val modes = display.supportedModes
        var highRefreshRateMode: Display.Mode? = null

        // 查找支持高刷新率的模式(例如 90Hz 或 120Hz)
        for (mode in modes) {
            val refreshRate = mode.refreshRate
            if (refreshRate >= 90.0) { // 根据设备支持调整阈值
                highRefreshRateMode = mode
                break
            }
        }

        // 设置高刷新率模式
        highRefreshRateMode?.let {
            val layoutParams = window.attributes
            layoutParams.preferredDisplayModeId = it.modeId
            window.attributes = layoutParams
        }
    }
}

注意事项:

  • 设备兼容性:并非所有设备都支持高刷新率,代码中通过 supportedModes 检测可用模式。
  • 阈值调整:示例中设置刷新率阈值 ≥90Hz,可根据实际设备支持修改(如 120Hz)。
  • iOS 支持:iOS 设备的高刷新率设置不同,通常通过 CADisplayLink 或系统设置实现,但 Flutter 目前没有直接 API,可能需要额外插件。

使用方式:

在 Flutter 中调用 DisplayMode.setHighRefreshRate() 即可尝试设置高刷新率。建议在应用启动时或用户触发时调用。

此方法依赖于原生代码,确保测试目标设备的兼容性。如果遇到问题,请检查设备是否支持高刷新率,并调试原生代码逻辑。

回到顶部