【问题标题】:flutter specifying width, height, paddings, margins etc in percentages?颤振以百分比指定宽度,高度,填充,边距等?
【发布时间】:2020-05-13 07:40:58
【问题描述】:

flutter 中是否有一种方法允许以屏幕尺寸的百分比指定宽度、高度、填充、边距等,而不是在每个小部件中编写计算?

为这个琐碎的事情传递提供者或扩展一些基类是不对的。

【问题讨论】:

    标签: flutter responsive dimensions


    【解决方案1】:

    唯一已知的解决方案是使用MediaQuery。我实现了一个助手类,我只是调用它的方法:

    class SizeManager {
      var _context;
      double _screenHeight;
      double _screenWidth;
    
      SizeManager(this._context) {
        _screenHeight = MediaQuery.of(_context).size.height;
        _screenWidth = MediaQuery.of(_context).size.width;
      }
    
      double scaledHeight(double value) {
        return value * _screenHeight / 100;
      }
    
      double scaledWidth(double value) {
        return value * _screenWidth / 100;
      }
    }
    

    在每个build() 中,就在return 之前,这样称呼它:

    SizeManager sizeManager = new SizeManager(context);
    

    无论何时你想设置边距/填充/大小:

    Container(
      padding: EdgeInsets.symmetric(vertical: sizeManager.scaledHeight(2.5)), //Gives a 2.5 % height padding
    ),
    

    【讨论】:

    • 所以唯一可能的方法是,所有小部件都从某个 SizeManager 扩展,还是在每个小部件中创建 SizeManager 的实例?而且每次都要加计算?难道没有一个选项可以让 Flutter 以百分比来处理我们的尺寸吗?
    • 哦,我为这些实用方法创建了一个不同的类,并在需要的任何地方调用该类。只需在每个 Widget 的顶部创建一个 SizeManager,在 build 方法中对其进行初始化。之后,它实际上一遍又一遍地调用相同的东西。
    • 不,不幸的是,据我所知,颤振没有基于百分比的概念,甚至没有 DIP 等。你可以看看FractionallySizedBox
    猜你喜欢
    • 2013-04-25
    • 2014-03-05
    • 1970-01-01
    • 2015-08-12
    • 1970-01-01
    • 2012-11-21
    • 2020-07-17
    • 1970-01-01
    • 2021-09-19
    相关资源
    最近更新 更多