【问题标题】:Use variable in Text Widget在文本小部件中使用变量
【发布时间】:2019-01-18 09:36:24
【问题描述】:

我正在尝试在 Text Widget 中使用一个变量,它显示 Invalid const value,所以我需要使用 const,但我正在以动态方式使用 Text Widget。有没有办法使用带有变量的文本?还是有其他我可以使用的小部件?

我有这样的事情:

class PlaceCardState extends StatelessWidget {
  PlaceCardState(this._placeCard);
  Place _placeCard;

  @override
  Widget build(BuildContext context) {
    return ListTile(
            leading: const Icon(Icons.album),
            title: Text(_placeCard.title),
            subtitle: const Text('Come and dance tonight!'),
          );
  }
}

place.dart

class Place {
  Place([this.title = '', this.description = '', this.image='',     this.value=0.0]);
  String title;
  String description;
  String image;
  double value;
}

我遇到了这个问题:

【问题讨论】:

  • “变量”是什么意思?在变量小部件中或文本需要更改?
  • 我需要使用一个变量,比如 var myText = 'My Text';并将其打印到 Text(myText) 中,但它要求我使用 const,但是,在我的代码中,我需要使用类属性 _placeCard.title,这是一个变量,不是 const 有意义吗?
  • 我附上了这个问题的截图
  • 这里的字符串插值不适合您的需要吗?
  • 这样我应该使用类似:title: Text('I am ${_placeCard.title}'),但我得到了同样的结果

标签: dart flutter


【解决方案1】:

改变这个:

const ListTile(
        leading: const Icon(Icons.album),
        title: Text(_placeCard.title),
        subtitle: const Text('Come and dance tonight!'),
      );

进入这个:

const ListTile(
        leading: const Icon(Icons.album),
        title: const Text(_placeCard.title),
        subtitle: const Text('Come and dance tonight!'),
      );

由于在您的屏幕截图中ListTile 是一个常量,因此所有属性也必须是常量,因此在Text(_placeCard.title), 之前添加const

【讨论】:

  • 这只有在_placeCard.title 也是常量时才有效
【解决方案2】:

Const 将被假定为 IconText,因为它们必须保持不变,因此 ListTile 可以作为一个整体保持不变。

所以写起来也一样:

const ListTile(
    leading: const Icon(Icons.album),
    title: const Text(_placeCard.title),
    subtitle: const Text('Come and dance tonight!'),
  );

作为

const ListTile(
    leading: Icon(Icons.album),
    title: Text(_placeCard.title),
    subtitle: Text('Come and dance tonight!'),
  );

但您似乎还是混淆了const 的含义,因为这可能在您的应用程序中不起作用。

来自news.dartlang.org,

“const”在 Dart 中具有更复杂和微妙的含义。 const 修改值。您可以在创建集合时使用它,例如 const [1, 2, 3],以及在构造对象(而不是 new)时 常量点 (2, 3)。这里,const 表示对象的整个深 状态可以完全在编译时确定,并且对象 将被冻结且完全不可变

这意味着你可以说

const ListTile(
    leading: Icon(Icons.album),
    title: Text("foo"),
    subtitle: Text('Come and dance tonight!'),
  );

但在运行应用程序时不要创建该 Object 常量,因为您在编译时没有所有数据。

你不应该使用 const 然后它应该没问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-03-19
    • 1970-01-01
    • 1970-01-01
    • 2021-01-18
    • 2013-01-15
    • 2019-09-21
    • 1970-01-01
    相关资源
    最近更新 更多