gpt4 book ai didi

Flutter 小部件最佳实践 : Inner Class vs Function

转载 作者:行者123 更新时间:2023-12-03 03:01:17 25 4
gpt4 key购买 nike

我是一名 Java 开发人员,目前正在学习 Flutter/Dart。我擅长使用小函数和一些小部件示例来编写干净的代码,这让我很害怕。

我正在尝试使用一些交易信息(价格、标题和日期)来实现一个卡片小部件。目前代码如下所示:

class TransactionCard extends StatelessWidget {
final Transaction _transaction;

TransactionCard(this._transaction);

@override
Widget build(BuildContext context) {
return Container(
child: Card(
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: [
_PriceContainer(_transaction.amount),
_DetailContainer(_transaction.title, _transaction.date),
],
),
),
);
}
}

// Inner Widgets

class _PriceContainer extends Container {
_PriceContainer(double amount)
: super(
margin: EdgeInsets.symmetric(
vertical: 10,
horizontal: 15,
),
decoration: BoxDecoration(
border: Border.all(
color: Colors.purple,
width: 2,
),
),
padding: EdgeInsets.all(10),
child: Text(
amount.toString(),
style: _amountTextStyle(),
),
);
}

class _DetailContainer extends Container {
_DetailContainer(String title, DateTime date)
: super(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
Text(
title,
style: _titleTextStyle(),
),
Text(
date.toString(),
style: _dateTextStyle(),
),
],
),
);
}

// Text styles

TextStyle _amountTextStyle() {
return TextStyle(
fontWeight: FontWeight.bold,
fontSize: 20,
color: Colors.purple,
);
}

TextStyle _titleTextStyle() {
return TextStyle(
fontWeight: FontWeight.bold,
fontSize: 18,
);
}

TextStyle _dateTextStyle() {
return TextStyle(color: Colors.grey);
}

我使用了两种方法:
  • 对于内部小部件,我扩展了 Containers 并给出了特定的样式。
  • 对于文本样式,我创建了一个返回所需样式的函数。

  • 有没有比另一种更可取的方法?第三个?在同一个文件上创建多个小部件是否有不好的做法?

    最佳答案

    组合 > 继承

    如评论和 in the Flutter documentation 中所述,您应该始终组合小部件而不是从例如继承Container .

    在你的情况下,这看起来像这样:

    class _PriceContainer extends StatelessWidget {
    final double amount;

    const _PriceContainer({
    Key key,
    this.amount,
    }) : super(key: key);

    @override
    Widget build(BuildContext context) => Container(
    margin: const EdgeInsets.symmetric(
    vertical: 10,
    horizontal: 15,
    ),
    decoration: BoxDecoration(
    border: Border.all(
    color: Colors.purple,
    width: 2,
    ),
    ),
    padding: EdgeInsets.all(10),
    child: Text(
    amount.toString(),
    style: _amountTextStyle,
    ),
    );
    }

    这与您的其他小部件类似。

    顶层函数

    声明顶级函数通常没问题,但是,在这种情况下,您应该真正定义一个顶级属性 - 最好声明一个 const利用编译时常量:

    const _amountTextStyle = TextStyle(
    fontWeight: FontWeight.bold,
    fontSize: 20,
    color: Colors.purple,
    );

    您应该能够将相同的内容应用于其他文本样式。

    关于Flutter 小部件最佳实践 : Inner Class vs Function,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58825316/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com