以编程方式返回由父窗口小部件包装的窗口小部件的最佳方法

时间:2019-03-21 01:57:04

标签: dart flutter

我不会为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的最佳做法。

1 个答案:

答案 0 :(得分:0)

没有理由您的方法需要成为类的成员。如果将其设为顶级功能(在类之外),则会保存几个字符(以及不必要的Utils构造-尽管也可以将其设为static来实现)。

在类之外,声明以下内容:

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

并像这样使用它

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