【问题标题】:How to save Mediaquery Size in a separate file in flutter?如何将Mediaquery Size保存在flutter中的单独文件中?
【发布时间】:2022-01-11 13:17:16
【问题描述】:

我想将每个按钮和容器大小保存为 mediaquery,如下所示在单独的 dart 文件中。

class FrameSize{
  var SliderHeight = MediaQuery.of(context).size.height / 6;
  var addToCartButtonHeight = MediaQuery.of(context).size.height / 14;

}

所以我可以在任何我想要的地方打电话给他们,并在一个地方进行更改。这可能吗??

【问题讨论】:

  • 我不明白这个问题

标签: flutter flutter-layout media-queries


【解决方案1】:

是的,但你需要像单例这样的东西。我曾经实现Get it 来实现这一点。很简单,创建一个文件(你可以给它任何你想要的名字),我习惯叫它appData,像这样:

class AppData {
  var isAuthenticated = false;
  User user;[...] you can place whathever you want
}

一个名为 locator.dart 的文件(再一次,随意命名):

import 'package:get_it/get_it.dart';
GetIt locator = GetIt.instance;

void setupLocator() {
  locator.registerLazySingleton(() => AppData());
 [...] you can place oher singletons too
}

在你的 main.dart 中放置这个:

setupLocator();

在您调用 runApp() 之前的主页开始...

现在,当您想使用数据时,您只需这样做:

    class DocumentBloc extends BaseBloc (im a big fan of bloc "pattern") {
    var appData = locator.get<AppData>();
    
    //... photo = appData.user.photo;
    //... locator.get<AppData>().user.photo works too...
    }

【讨论】:

    【解决方案2】:

    这可能会有所帮助:

    1)创建类:

    import 'package:flutter/widgets.dart';
    
    class FrameSize {
      //init method is static so no object creation is required
      static void init({
        required context,
      }) {
        //instantiate variables here
        _mediaQueryData = MediaQuery.of(context);
        screenWidth = _mediaQueryData.size.width;
        screenHeight = _mediaQueryData.size.height;
        _safeAreaHorizontal =
            _mediaQueryData.padding.left + _mediaQueryData.padding.right;
        _safeAreaVertical =
            _mediaQueryData.padding.top + _mediaQueryData.padding.bottom;
        sliderHeight = screenHeight / 6;
        addToCartButtonHeight = screenHeight / 14;
      }
    
      //declare variables here
      static late MediaQueryData _mediaQueryData;
      static late double screenWidth;
      static late double screenHeight;
      static late double _safeAreaHorizontal;
      static late double _safeAreaVertical;
      static late double sliderHeight;
      static late double addToCartButtonHeight;
    }
    

    2)在您的主屏幕中实例化它(不要忘记)。

    class HomeScreen extends StatelessWidget {
     @override
     Widget build(BuildContext context) {
     FrameSize.init(context);
     …
     }
    }
    

    3)最后,使用它来设置小部件的尺寸。

    @override
    Widget build(BuildContext context) {
     return Column(
      children: <Widget>[
        MySlider(
          height: FrameSize.sliderHeight,
          ...
        ),
        AddToCartButton(
          height: FrameSize.addToCartButtonHeight,
          ...
        ),
      ],
     );
    }
    

    您也可以参考this article。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-21
      相关资源
      最近更新 更多