Routes 如何刷新路由页面
我遵循了颤振网站上的StartupNameGenerator教程,没有问题。 但是我想添加从保存的列表中删除单词对的功能。这也起到了作用,但当一个单词从列表中删除时,listview不会更新,我不得不返回主页并再次打开列表以查看效果。我在setState函数中搜索了一种更新listview的方法,在该函数中我删除了单词对,但是我找不到任何东西。因此,在删除setstate中的字对后,我只是弹出了路由并再次按下它。 有人能提出更好的办法吗?Routes 如何刷新路由页面,routes,flutter,Routes,Flutter,我遵循了颤振网站上的StartupNameGenerator教程,没有问题。 但是我想添加从保存的列表中删除单词对的功能。这也起到了作用,但当一个单词从列表中删除时,listview不会更新,我不得不返回主页并再次打开列表以查看效果。我在setState函数中搜索了一种更新listview的方法,在该函数中我删除了单词对,但是我找不到任何东西。因此,在删除setstate中的字对后,我只是弹出了路由并再次按下它。 有人能提出更好的办法吗? 谢谢您可能可以使用StreamBuilder来实现这一点
谢谢您可能可以使用
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(正如错误告诉我的那样)。如何将集合转换为流?此外,流似乎没有任何方法来删除以前发送的项目。