【问题标题】:Best way to programmatically return widget wrapped by a parent widget以编程方式返回由父小部件包装的小部件的最佳方法
【发布时间】:2019-03-21 01:57:03
【问题描述】:

我不想为我的 Flutter 应用完全禁用 iOS 动态类型,因为当用户将全局文本大小设置得太高时,它会完全破坏我的一些布局。

我问了关于如何完成此here 的问题,并得到了我想实施的答案。

return MediaQuery(
  child: your-widget-here,
  data: MediaQuery.of(context).copyWith(textScaleFactor: 1.0),
);

只是好奇使用 DRY 原则实现这一点的最佳方法,以便我可以在整个代码中重复使用它。目前,我只是创建了一个 Utils 类,编写了一个类似这样的方法

Widget unscaledWidget(Widget widget, BuildContext context){
  return MediaQuery(
    child: widget,
      data: MediaQuery.of(context).copyWith(textScaleFactor: 1.0),
  );
}

然后在我的应用程序中页面的构建方法中,而不是调用

return Scaffold(...);

在做

Scaffold scaf = Scaffold(...);
return Utils().unscaledWidget(scaf, context);

我应该有更好的方法来完成这项工作吗?只是不确定这是 Dart 的最佳实践。

【问题讨论】:

    标签: dart flutter


    【解决方案1】:

    没有理由让您的方法成为类的成员。如果将其设为顶级函数(在类之外),则可以节省多个字符(以及不必要的 Utils 构造——尽管这同样可以通过将其设为 static 来实现)。

    在一个类之外,声明这个:

    Widget unscaledWidget(Widget widget, BuildContext context) => MediaQuery(
          child: widget,
          data: MediaQuery.of(context).copyWith(textScaleFactor: 1.0),
        );
    

    并像这样使用它

      return unscaledWidget(Scaffold(...), context);
    

    【讨论】:

    • 如果我想在一个类中使用它很好,但是如果我有十几个不同的脚手架分布在十几个不同的文件中(所有这些我都想应用 textScaleFactor)可能。
    • 为什么不在每个脚手架前使用相同的unscaledWidget( 位?
    • 抱歉,我没有意识到甚至可以在这样的类之外定义方法。刚刚试了一下,效果很好。
    猜你喜欢
    • 2011-03-16
    • 1970-01-01
    • 2013-10-07
    • 2012-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-09
    • 1970-01-01
    相关资源
    最近更新 更多