Dart 传递状态的更好方法,而不是在颤振中创建两条相同的线

Dart 传递状态的更好方法,而不是在颤振中创建两条相同的线,dart,flutter,Dart,Flutter,所以,我在做颤振的教程,然后修改教程的代码,在有状态小部件上添加删除功能。我认为这是一件多余的事情(评论1至5): 导入“包装:颤振/材料.省道”; 导入“package:english_words/english_words.dart”; void main(){ runApp(新的MyApp()); } 类SavedWords扩展StatefulWidget{ 最终集_已保存;//1 SavedWords(this._saved);//2 @凌驾 createState()=>SavedWo

所以,我在做颤振的教程,然后修改教程的代码,在有状态小部件上添加删除功能。我认为这是一件多余的事情(评论1至5):

导入“包装:颤振/材料.省道”;
导入“package:english_words/english_words.dart”;
void main(){
runApp(新的MyApp());
}
类SavedWords扩展StatefulWidget{
最终集_已保存;//1
SavedWords(this._saved);//2
@凌驾
createState()=>SavedWordState(_saved);//3
}
类SavedWordState扩展状态{
设置_已保存;//4
SavedWordState(此._已保存);//5
@凌驾
小部件构建(构建上下文){
最终分幅=\u已保存.map(
(一对){
返回新的ListTile(
标题:新文本(
pair.asPascalCase,
),
尾随:新图标(Icons.delete),
onTap:(){
设置状态(){
_保存。删除(对);
});
},
);
},
);
最终分割=列表块
.分隔砖(
上下文:上下文,
瓷砖:瓷砖,
)
.toList();
归还新脚手架(
appBar:新的appBar(
标题:新文本(“保存的建议”),
),
正文:新列表视图(子项:已分割),
);
}
}
类RandomWords扩展了StatefulWidget{
@凌驾
createState()=>RandomWordsState();
}
类RandomWordsState扩展状态{
最终建议=[];
最终保存=新设置();
final _biggerFont=const TextStyle(字体大小:18.0);
@凌驾
小部件构建(构建上下文){
归还新脚手架(
appBar:新的appBar(
标题:新文本(“启动名称生成器”),
行动:[
新建图标按钮(图标:新建图标(Icons.list),打开按钮:按下保存),
],
),
正文:_buildSuggestions(),
);
}
作废(){
导航器.of(上下文).push(
新材料路线(
生成器:(上下文){
返回新保存的单词(_已保存);
},
),
);
}
小部件_buildSuggestions(){
返回新的ListView.builder(
填充:常数边集全部(16.0),
itemBuilder:(上下文,i){
如果(i.isOdd)返回新的分隔符();
最终指数=i~/2;
如果(索引>=\u建议长度){
_建议.addAll(generateWordPairs().take(10));
}
返回_buildRow(_建议[索引]);
});
}
小部件构建行(字对){
final alreadySaved=\u saved.contains(对);
返回新的ListTile(
标题:新文本(
pair.asPascalCase,
风格:_biggerFont,
),
尾随:新图标(
alreadySaved?Icons.favorite:Icons.favorite_边框,
颜色:已保存?颜色。红色:空,
),
onTap:(){
设置状态(){
如果(已保存){
_保存。删除(对);
}否则{
_保存。添加(对);
}
});
},
);
}
}
类MyApp扩展了无状态小部件{
@凌驾
小部件构建(构建上下文){
返回新材料PP(
标题:“启动名称生成器”,
home:新单词(),
主题:新主题数据(
原色:颜色。黑色,
第二种颜色:颜色。黑色,
),
);
}
}

这只是一个视图,想象一下,如果有很多视图,有没有更好的方法来实现这一点?

您不应该在
State
子类上有自定义构造函数

所以你不能这么做

class SavedWordState extends State<SavedWords> {
  Set<WordPair> _saved; // 4
  SavedWordState(this._saved); // 5
相反,
State
有一个
T widget
属性,用于从
StatefulWidget
子类获取字段

因此,在
状态中
可以执行以下操作:

class SavedWords extends StatefulWidget {
  final Set<WordPair> saved;
  SavedWords({ this.saved });

  @override
  createState() => SavedWordState();
}

...

  @override
  Widget build(BuildContext context) {
    final tiles = widget.saved.map(
类SavedWords扩展StatefulWidget{
保存最终集;
SavedWords({this.saved});
@凌驾
createState()=>SavedWordState();
}
...
@凌驾
小部件构建(构建上下文){
最终分幅=widget.saved.map(

状态
子类上不应该有自定义构造函数

所以你不能这么做

class SavedWordState extends State<SavedWords> {
  Set<WordPair> _saved; // 4
  SavedWordState(this._saved); // 5
相反,
State
有一个
T widget
属性,用于从
StatefulWidget
子类获取字段

因此,在
状态中
可以执行以下操作:

class SavedWords extends StatefulWidget {
  final Set<WordPair> saved;
  SavedWords({ this.saved });

  @override
  createState() => SavedWordState();
}

...

  @override
  Widget build(BuildContext context) {
    final tiles = widget.saved.map(
类SavedWords扩展StatefulWidget{
保存最终集;
SavedWords({this.saved});
@凌驾
createState()=>SavedWordState();
}
...
@凌驾
小部件构建(构建上下文){
最终分幅=widget.saved.map(