微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

颤振| Dart 有没有更优雅的方式来编写这段代码?

如何解决颤振| Dart 有没有更优雅的方式来编写这段代码?

  var showtextA = true;
  @override
  Widget build(BuildContext context) {
    return Row(
      children: (showtextA)
          ? [
              Text("A"),Text("B"),Text("C"),]
          : [
              Text("B"),],);
  }
  var havePadding = true;
  @override
  Widget build(BuildContext context) {
    return (havePadding) ?
    Container(
      padding: EdgeInsets.all(10.0),child:...,) : Container(
      child:...,);
  }

通过上面的代码,不知道你能不能理解我的意思? 我记得 Dart 为 Flutter 提供了某种语法糖,但是我忘了,我一直在寻找它,但我不知道如何描述它。

解决方法

基于代码给出它最好这样做。最好最小化小部件重建。如果只有少数状态小部件要更改,则只需管理该小部件。

  var showTextA = true;
  @override
  Widget build(BuildContext context) {
    return Row(
      children: [
        (showTextA) ? Text("A") : SizedBox(),Text("B"),Text("C"),],);
  }
  var havePadding = true;
  @override
  Widget build(BuildContext context) {
    return Container(
      padding: EdgeInsets.all(havePadding ? 10.0:  0 ),child: ....,)
,

您可以创建一个看起来很棒的方法:

List<Widget> getTexts(bool showTextA) {
    if (showTextA) {
        return [Text("A"),Text("C")];
    }
        else {
            return [Text("B"),Text("C")];
        }
}

然后在 build 方法中:

Widget build(BuildContext context) {
    return Row(
        children: getTexts(showTextA)
    );
  }
,

你可以试试

var showTextA = true;
@override
Widget build(BuildContext context) {
    return Row(
      children:[
            if (showTextA) Text("A"),);
}

var havePadding = true;
@override
Widget build(BuildContext context) {
  return Container(
      padding: havePadding ? EdgeInsets.all(10.0) : null,child: Text('sdfsdf'),);
}
,

对于第一个示例,由于您的条件中只有 1 个小部件,因此只需将 ? : 替换为无括号的 if

  var showTextA = true;
  @override
  Widget build(BuildContext context) {
    return Row(
      children: [
              if(showTextA) Text("A"),]
    );
  }

至于你的第二个例子,你可以做

  var havePadding = true;
  @override
  Widget build(BuildContext context) {
    return Container(
      padding: havePadding ? EdgeInsets.all(10.0) : null //or EdgeInsets.zero,child:...,)
  }

这肯定会减少几行代码并使其更具可读性。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。