当前位置: 首页 > 知识库问答 >
问题:

如何在Flutter中正确重用小部件样式?

咸玄天
2023-03-14

我来自像angular、react和vue这样的前端webframeworks,我很难找到编写可重用小部件样式的最佳方法。让我用一个例子来演示这个问题。

假设我们有这个小部件:

Container(
  width: 25,
  height: 10,
  decoration: BoxDecoration(
    color: const Color(0xff7c94b6),
    border: Border.all(
      color: Colors.black,
      width: 8.0,
      ),
    ),
  child: /* some custom widget */,
);

现在让我们假设我想让容器属性像widthheight等可以通过参数改变。如果没有传递属性的某个参数,则应该使用其默认值,如下所示:

class CustomWidget extends StatelessWidget {
  final double width;
  final double height;
  final BoxDecoration decoration;

  const CustomWidget ({
    Key key,
    this.width = 25,
    this.height = 10,
    this.decoration = /* default decoration */
    /* possibly even more properties */
  }) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return Container(
      width: width,
      height: height,
      decoration: decoration,
      child: /* some custom widget */
  }
}

共有1个答案

洪黎昕
2023-03-14

Flutter样式的行为类似于Vue范围内的styled/React“styled-component”或React本地:

在这些场景中没有“全局风格”。取而代之的是,您使用组合来获得所需的结果。

从某种意义上说,每个“CSS类”都有一个StatelessWidget,而不是一个带有许多参数的大StatelessWidget。

    null
RedBackground(
  child: Text('hello world'),
)
RedBackground(
  child: MyBorder(
    child: Text('hello world'),
  ),
)
 类似资料:
  • 我在C:\src中使用这一行 git克隆-B稳定https://github.com/flutter/flutter.git 在路径中,我键入这一行: 一些错误是:

  • 有趣的是,我尝试了一个switch case语句,它给了我同样的警告,因此我无法运行代码。是我做错了什么,还是让人无法使用if/else或switch语句而不认为有死代码?

  • 我正在尝试从Flutter中的父部件传递堆栈的高度,但我无法做到。请帮助我找到解决方案,我将把我的代码作为参考。 父小工具 子部件 如何将堆栈的高度传递给SVGPicture。

  • 我正在寻找AndroidVisibility.GONE等效选项。 以编程方式在 Flutter 中显示/隐藏小部件 上述链接批准的解决方案在将“不透明度”设置为 0 后将占用空间。对于没有像Android那样占用任何空间,该解决方案说 要使其不占用空间,请将其替换为空的。 有人请告诉我如何实现这一目标。我需要使Widget完全擦除,而无需以编程方式占用任何空间。 注意:我需要类似的执行解决方案,如

  • 在Android中,每个子类都有一个方法,允许您修改对象的可见性 设置可见性有3个选项: 可见:呈现布局内部可见的 Flutter中的小部件是否有与上述相同的功能? 快速参考:https://developer.android.com/reference/android/view/View.html#attr_android:visibility

  • 听起来有点愚蠢,但我需要我的方法的帮助,这很烦人。我试着在网上查找,因为是一个出错和“找不到Kid constructor#2”的程序,尽管它在那里,我甚至会做其他事情,但它不起作用。好吧,这太多了,下面是我的代码: 好的,所以我上面的toString(我知道,我的第三个参数是关闭的,应该是字符串)是关闭的。如果我硬编码第三个值,它就会失控,说它找不到这个(上面)。那么我怎么才能得到日期并把它分开