Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Routes 如何刷新路由页面_Routes_Flutter - Fatal编程技术网

Routes 如何刷新路由页面

Routes 如何刷新路由页面,routes,flutter,Routes,Flutter,我遵循了颤振网站上的StartupNameGenerator教程,没有问题。 但是我想添加从保存的列表中删除单词对的功能。这也起到了作用,但当一个单词从列表中删除时,listview不会更新,我不得不返回主页并再次打开列表以查看效果。我在setState函数中搜索了一种更新listview的方法,在该函数中我删除了单词对,但是我找不到任何东西。因此,在删除setstate中的字对后,我只是弹出了路由并再次按下它。 有人能提出更好的办法吗? 谢谢您可能可以使用StreamBuilder来实现这一点

我遵循了颤振网站上的StartupNameGenerator教程,没有问题。 但是我想添加从保存的列表中删除单词对的功能。这也起到了作用,但当一个单词从列表中删除时,listview不会更新,我不得不返回主页并再次打开列表以查看效果。我在setState函数中搜索了一种更新listview的方法,在该函数中我删除了单词对,但是我找不到任何东西。因此,在删除setstate中的字对后,我只是弹出了路由并再次按下它。 有人能提出更好的办法吗?
谢谢

您可能可以使用
StreamBuilder
来实现这一点。使用该选项,您的论点应该如下所示:

stream: FirebaseDatabase.instance.reference().child(
      "profiles").onValue

如您所见,每当您删除一个值时,
onValue
将自动更新您的屏幕。

假设您刚刚使用了,然后,您可以修改
\u buildRow
函数,添加一个删除按钮,然后调用
setState
并修改
\u建议
列表,如下所示:

Widget _buildRow(WordPair pair) {
    return ListTile(
        title: Text(
          pair.asPascalCase,
          style: _biggerFont,
        ),
        subtitle: RaisedButton(
            child: Text('delete'),
            onPressed: () {
              setState(() {
                _suggestions.remove(pair);
              });
            }));
  }
这是完整的
main.dart

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> {
  final _suggestions = <WordPair>[];

  final _biggerFont = const TextStyle(fontSize: 18.0);

  Widget _buildSuggestions() {
    return ListView.builder(
        padding: const EdgeInsets.all(16.0),
        itemBuilder: (context, i) {
          // Add a one-pixel-high divider widget before each row in theListView.
          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 pair) {
    return ListTile(
        title: Text(
          pair.asPascalCase,
          style: _biggerFont,
        ),
        subtitle: RaisedButton(
            child: Text('delete'),
            onPressed: () {
              setState(() {
                _suggestions.remove(pair);
              });
            }));
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Startup Name Generator'),
      ),
      body: _buildSuggestions(),
    );
  }
}

class RandomWords extends StatefulWidget {
  @override
  RandomWordsState createState() => new RandomWordsState();
}
导入“包装:颤振/材料.省道”;
导入“package:english_words/english_words.dart”;
void main()=>runApp(MyApp());
类MyApp扩展了无状态小部件{
@凌驾
小部件构建(构建上下文){
返回材料PP(
标题:“启动名称生成器”,
home:RandomWords(),
);
}
}
类RandomWordsState扩展状态{
最终建议=[];
final _biggerFont=const TextStyle(字体大小:18.0);
小部件_buildSuggestions(){
返回ListView.builder(
填充:常数边集全部(16.0),
itemBuilder:(上下文,i){
//在ListView中的每一行之前添加一个一像素高的分割器小部件。
如果(i.isOdd)返回分隔符();
最终指数=i~/2;
如果(索引>=\u建议长度){
_建议.addAll(generateWordPairs().take(10));
}
返回_buildRow(_建议[索引]);
});
}
小部件构建行(字对){
返回列表块(
标题:正文(
pair.asPascalCase,
风格:_biggerFont,
),
字幕:升起按钮(
子项:文本('delete'),
已按下:(){
设置状态(){
_建议。删除(对);
});
}));
}
@凌驾
小部件构建(构建上下文){
返回脚手架(
appBar:appBar(
标题:文本(“启动名称生成器”),
),
正文:_buildSuggestions(),
);
}
}
类RandomWords扩展了StatefulWidget{
@凌驾
RandomWordsState createState()=>新的RandomWordsState();
}

我通过将保存的对列表作为一个单独的有状态小部件来修复它。我知道这会使列表在每次删除一对时都会刷新,但我认为两个有状态小部件的状态之间的链接会丢失,并且每当我从保存的对列表中删除一对时,另一个有状态小部件中的收藏夹图标都不会更新。但令人惊讶的是,我错了。各州之间有某种联系。我认为这是因为它们是同一堆栈上的两个有状态小部件。我开始真正喜欢flifter了。

单词对存储在一个集合中,集合中没有onValue getter(正如错误告诉我的那样)。如何将集合转换为流?此外,流似乎没有任何方法来删除以前发送的项目。