flutter Riverpod和媒体查询

xam8gpfp  于 2022-12-05  发布在  Flutter
关注(0)|答案(1)|浏览(147)

我正在尝试编写一个Riverpod提供程序,它将返回屏幕的缩放因子,以便我可以相应地调整所有元素的大小。

final scale = ref.watch(scaleProvider);
return LinearPercentIndicator(
   animation: true,
   lineHeight: 15 * scale,
   ...
);

不幸的是,对于我的简单实现来说,MediaQuery需要一个构建上下文,而我在第一次创建全局scaleProvider时并没有这个上下文

final scaleProvider = Provider<double>((ref) {
  final availableHeight = MediaQuery.of(context).size.height -
      AppBar().preferredSize.height -
      MediaQuery.of(context).padding.top -
      MediaQuery.of(context).padding.bottom;
  
  return availableHeight / 600.0;
});

我该怎么做?提供者是不是应该这样使用的?我该如何让缩放因子在我的所有控件中随时可用?

vc9ivgsu

vc9ivgsu1#

如果您在media_querydart.size中检查它,则在构造函数中以window.physical.size形式获取其数据,因此:

import 'package:flutter/material.dart';

import 'dart:ui' as ui;

import 'package:flutter_riverpod/flutter_riverpod.dart';

final scaleProvider = Provider<double>((ref) {
  final window = ui.window;

  final availableHeight = window.physicalSize.height -
      AppBar().preferredSize.height -
      window.padding.top -
      window.padding.bottom;

  return availableHeight / 600.0;
});

相关问题