dart 在构建内部声明Widget变量是一个不好的做法吗?

kmbjn2e3  于 2023-09-28  发布在  其他
关注(0)|答案(2)|浏览(102)

你好社区我有一些非常简单的小部件,在我看来,为它们创建单独的无状态小部件没有好处,但如果我需要在某些情况下将它们移动或放置在其他地方。在构建中将它们声明为变量是一个很好的做法。附件是一个例子

@override
  Widget build(BuildContext context) {

    Widget title = Column(
      children: <Widget>[
        if (isLargeScreen)
          Row(
            mainAxisAlignment: MainAxisAlignment.end,
            children: <Widget>[
              InkWell(
                onTap: Navigator.of(context).pop,
                child: Icon(
                  ...
                ),
              ),
            ],
          )
        else
          Container(
            margin: ...,
            width: ...,
            height: ...,
            decoration:...,
          ),
        Align(
          alignment: Alignment.centerLeft,
          child: Padding(
            padding: ...,
            child: Text(
             ...
            ),
          ),
        ),
      ],
    );
    Widget paragraph = Padding(
      padding: UIPadding.paddingH16,
      child: Column(
        children: <Widget>[
          Text(
            ...
            ),
          ),
          Spacing.spacingV8,
          Text(
            formatCurrency.format(
              ....
            ),
            style: ...,
          ),
        ],
      ),
    );
    Widget acceptButton = Button(
      buttonType:...
      text: 'some text'
      onPressed:
         ....
    );
    return isLargeScreen
        ? Material(
            borderRadius: const BorderRadius.only(
             ...
            ),
            child: SizedBox(
              width: 376,
              height: MediaQuery.of(context).size.height,
              child: Column(
                children: <Widget>[
                  ...,
                  title,
                  paragraph,
                  const Spacer(),
                  Divider(
                    color: ...,
                  ),
                  Padding(
                    padding: ..., 
                    child: acceptButton,
                  ),
                ],
              ),
            ),
          )
        : Column(
            mainAxisSize: MainAxisSize.min,
            children: <Widget>[
             ...,
              Modal(
               ...
                footerActions: <Widget>[acceptButton],
              ),
            ],
          );
  }

我想知道你是怎么想的,或者你是否知道任何关于这方面的文档。请记住,它们不是函数,而是构建中的变量。

xxb16uws

xxb16uws1#

由于潜在的性能问题和代码可读性降低,通常不建议在Flutter中的build方法中声明小部件变量。最好在类级别声明小部件变量,并在build外部初始化它们,以提高性能和代码组织。

23c0lvtd

23c0lvtd2#

使用单独的小部件而不是helper方法是一种方法,因为它们可以防止不必要的小部件重新构建,并且您还将拥有干净,可维护的代码。Flutter有一个很棒的视频解释了为什么。link

相关问题