从Scaffold中的主体窗口小部件更新AppBar标题

时间:2019-10-25 21:48:31

标签: exception events flutter setstate

我开始使用flutter并编写“启动名称生成器”(Startup Name Generator)教程,还修改了代码以执行一些不同的操作,并且遇到了我无法解决的问题。我希望AppBar标题显示_suggestions数组的大小,但无法使其正常工作,尝试了许多不同的操作,但无济于事,总是在尝试将'setState()'排除在外的同时构建。

这是我目前拥有的:

import 'package:flutter/material.dart';
import 'package:english_words/english_words.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Startup Name Generator',
      home: RandomWords(),
    );
  }
}

class RandomWordsState extends State<RandomWords> {
  static final _suggestions = <WordPair>[];
  final _biggerFont = const TextStyle(fontSize: 18.0);
  ValueNotifier<String> appBarTitleNotifier = ValueNotifier('Startup Name Generator: 0');

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: new AppBar(title: ValueListenableBuilder<String>(
        valueListenable: appBarTitleNotifier,
        builder: (context,value,child) {
          return Text(value);
        }
      )),
      body: _buildSuggestions(),
    );

  }

  Widget _buildSuggestions() {
    var blder = ListView.builder(
      padding: const EdgeInsets.all(16.0),
      itemBuilder: /*1*/ (context, i) {
        if (i.isOdd) return Divider(); /*2*/

        final index = i ~/2; /*3*/
        if (index >= _suggestions.length) {
          _suggestions.addAll(generateWordPairs().take(10)); /*4*/

/**** THIS NEXT LINE CAUSES THE ISSUE ****/
          appBarTitleNotifier.value = 'Startup Name Generator: ' + _suggestions.length.toString();


        }
        return _buildRow(_suggestions[index],index);
      },



    );
    return blder;
  }

  Widget _buildRow(WordPair pair, int i) {

    return ListTile(
      title: Text(
        pair.asPascalCase + ': ' + i.toString(),
        style: _biggerFont,
      ),
    );
  }


}

class RandomWords extends StatefulWidget {
  @override
  RandomWordsState createState() => RandomWordsState();
}

在对事件进行了一些研究之后,我使用了ValueNotifier和listener,但是与我在ListView itemBuilder中手动使用setState()调用(问题似乎出在这里;从内部调用/更新AppBar标题)时的例外相同ListView itemBuilder)。

我在这里没有找到解决方案,所以我问。抱歉,如果已经回答了这个问题,但是我找不到解决方法。

0 个答案:

没有答案