【问题标题】:TextStyle not applied to ListView itemBuilderTextStyle 未应用于 ListView itemBuilder
【发布时间】:2019-01-31 02:29:02
【问题描述】:

我是 Flutter/dart 的新手,正在学习本教程。我正在尝试设置 ListView 的文本样式,但它没有被应用。

class RandomWordsState extends State<RandomWords> {
  final _suggestions = <WordPair>[];
  final _font = TextStyle(fontSize: 18.0, fontWeight: FontWeight.bold, color: Colors.blueAccent);

  Widget _buildSuggestions() {
    return ListView.builder(
      itemBuilder: (context, i) {
        if (i.isOdd) return Divider();
        final index = i ~/ 2;
        if (index >= _suggestions.length) {
          _suggestions.addAll(generateWordPairs().take(10));
        }
        return _buildRow(_suggestions[index]);
      }
    );
  }

  Widget _buildRow(WordPair w) {
    print(_font);
    return ListTile(
      title: Text(
        WordPair.random().asPascalCase,
        style: _font)
      );
  }

  @override
  Widget build(BuildContext context) {
    return _buildSuggestions();
  }

}

如果我直接在 Text Widget 中创建一个新的 TextStyle,它会起作用,但是当我提供 State 类本身提供的最终 ivar 时不起作用,我想知道为什么?

所以这行得通:

  Widget _buildRow(WordPair w) {
    print(_font);
    return ListTile(
      title: Text(
        WordPair.random().asPascalCase,
        style: TextStyle(fontSize: 18.0, fontWeight: FontWeight.bold, color: Colors.blueAccent))
      );
  }

但这不是:

  Widget _buildRow(WordPair w) {
    print(_font);
    return ListTile(
      title: Text(
        WordPair.random().asPascalCase,
        style: _font)
      );
  }

【问题讨论】:

  • 这似乎只是热重载的问题。更改 TextStyle 不会更新视图,但重新启动应用程序会更新。仍然很奇怪,为什么它没有收到变化?我正在使用 VSCode。

标签: dart flutter


【解决方案1】:

这是因为热重载会再次调用您在状态类中的构建函数,但该类不会再次重新加载,因此它不会选择构建函数之外的任何更改。完全重新加载以执行此操作。

【讨论】:

    猜你喜欢
    • 2021-08-07
    • 2020-06-08
    • 2020-04-20
    • 2020-05-26
    • 2018-08-10
    • 1970-01-01
    • 2019-12-07
    • 2021-10-19
    • 1970-01-01
    相关资源
    最近更新 更多