从 MediaQuery.fromWindow 迁移到 MediaQuery.fromView

spy*_*don 8 flutter

我如何从 迁移MediaQuery.fromWindowMediaQuery.fromView

弃用消息是:

信息:“fromWindow”已弃用,不应使用。请改用 MediaQuery.fromView。为了准备即将到来的多窗口支持,此构造函数已被弃用。此功能在 v3.7.0-32.0.pre 之后已弃用。(deprecated_member_use at [flame_studio] lib/src/widgets/left_panel.dart:15)

fromView方法正在获取一个FlutterView实例,我可以从上下文中获取它,或者我如何获取它?

Bas*_* A. 17

没有上下文

如果您没有上下文,请使用以下代码:

/// Without context
/// views can be [single, first, last, firstOrNull]
final MediaQueryData data = MediaQueryData.fromView(WidgetsBinding.instance.platformDispatcher.views.single);

return data.size.shortestSide < 600 ? "M" : "T";
Run Code Online (Sandbox Code Playgroud)

有上下文

/// With Context

/// Basically - View.of(context) === WidgetsBinding.instance.window

/// Examples:
/// final double dpr = View.of(context).devicePixelRatio;
/// final Locale locale = View.of(context).platformDispatcher.locale;

MediaQuery.fromView(
  view: View.of(context),
  child: ...
)
Run Code Online (Sandbox Code Playgroud)

有关更多详细信息,请查看 flutter 文档窗口单例已弃用


spy*_*don 5

解决方案比我预期的要简单得多,只需FlutterView使用View.of(context)

MediaQuery.fromView(
  view: View.of(context),
  child: ...
)
Run Code Online (Sandbox Code Playgroud)

  • 但这个解决方案需要一个上下文。 (2认同)