我有一个StatefulWidget
post_view,创建一个DataTable
。用于填充DataTable
的数据来自另一个名为Post:
的类中的静态方法。
static generateData(){
List<Post> postList= [];
postList.add(Post(title: "Coolest Post", numDownVotes: 6, numUpVotes: 9));
postList.add(Post(title: "Covid-19 vaccine found!", numDownVotes: 3, numUpVotes: 67));
postList.add(Post(title: "Unreal ending to basketball game", numDownVotes: 2, numUpVotes: 23));
postList.add(Post(title: "Sample Post", numDownVotes: 2, numUpVotes: 6));
postList.add(Post(title: "What A Save!", numDownVotes: 5, numUpVotes: 34));
return postList;
}
我在表中有DataCells
,这样向上/向下投票的数量在数据单元格内的行小部件中,以及一个图标按钮,分别更改或增加/减少向上/向下投票的数量。因此,我在post_view中声明了一个变量'_posts',它调用generateData()
并显示数据,但我希望能够操纵这些数据并将其传递给另一个小部件BarGraph
,这将生成动态数据的条形图。
BarGraph
小部件:
class BarGraph extends StatefulWidget {
BarGraph({Key? key, required this.tableData}) : super(key: key);
List<Post>? tableData;
@override
State<BarGraph> createState() => _BarGraphState();
}
这里的问题是TabelData
根本无法访问,但我希望能够获得标题,numupvotes和numdownvotes,以便能够在图表中显示它们。我尝试使用getter,但null检查操作符不起作用。我完全卡住了,任何帮助都会很感激!
你可以提升你的状态或者使用状态管理包
参考
- 解除状态
- 上升状态
状态管理包
- GetX
- Riverpod
- 和更多…
找到答案了!通过使用widget.tableData
,我可以访问传递给该变量的数据。
如何使用任何状态管理方法,例如:Bloc、Provider等?使用这些库可以解决问题,并使代码更有条理。例如,使用bloc将看起来像
class ManagePost extends Cubit<List<Post>> {
List<Post> postList = [];
void addPost(Post post) {
postList.add(Post);
emit(postList);
}
void deletePost() {}
void updateVote() {}
void getAllPost() {}
}
接下来,把你的视图封装在BlocBuilder中,它将监听post list的状态并更新UI。