json - 将地图数据从 API 传递到多个屏幕?
问题描述
我如何将地图数据从该列表传递到其他屏幕是 StatefulWidget 或 StatelessWidget,以及为什么它不像一个屏幕示例那样工作?
这里的 API 部分:
Future pokeinfo(int position) async {
var dio = Dio();
Response response;
response =
await dio.get('https://pokeapi.co/api/v2/pokemon/${position.toString()}');
Map json = jsonDecode(response.toString());
return json;
}
这里的功能部分:
bool widgetVisible = false;
List<PokeList> elements = [];
void showWidget() {
createList();
setState(() {
widgetVisible = !widgetVisible;
});
}
@override
void initState() {
super.initState();
}
@override
void dispose() {
super.dispose();
}
void createList() async {
List<PokeList> _elements = [];
for (int i = 1; i < 50; i++) {
Map currentData = await pokeinfo(i);
_elements.add(PokeList(currentData));
}
setState(() {
elements = _elements;
});
它是如何在一个屏幕上工作的:
Map data;
PokeList(Map this.data);
@override
Widget build(BuildContext context) {
return GestureDetector(
onTap: () {
Navigator.push(
context,
MaterialPageRoute(builder: (context) => PokemonPage()),
);
解决方案
感谢所有试图帮助我的人,我得到了问题以及如何解决它。我会把解决方案放在这里给有同样问题的人。实际上要改变一个简单的事情:
从列表中删除特定屏幕。
bool widgetVisible = false;
List elements = [];
void showWidget() {
createList();
setState(() {
widgetVisible = !widgetVisible;
});
}
在函数内部,您只需要更改列表,重复之前显示的内容。
void createList() async {
List _elements = [];
for (int i = 1; i < 50; i++) {
Map currentData = await pokeinfo(i);
_elements.add(PokeList(currentData));
}
最后,您只需要放入 screen 类。像那样:
Class ScreenNameHere extends StatelessWidget{
Map data;
ScreenNameHere(Map this.data);
/*
@override
Widget build(BuildContext context) {
return ScreenBody();
}
*/
}
推荐阅读
- ag-grid - 如何将值发送到下拉单元格编辑器?
- adobe - 每次对项目进行更改时,是否可以在 After Effects HTML 面板中获取通知/事件?
- java - Primefaces LineChart 未显示正确的日期值(谷歌浏览器)
- android - 导出 .apk 文件时出现问题(无法访问数字证书 - 无法加载证书)
- yii2 - 如何在 Yii2 中重置模型以添加新/下一条记录?
- git - git-flow 在提高 MR 进行代码审查时是不是有点模棱两可?
- java - 使用 Java Hibernate 从 MySQL 数据库中检索多行并将其存储在变量中
- java - 类文件中的 InnerClass 属性有什么用?
- c# - 如何在 Unity 中使用 C# 代码在移动设备上工作?
- c# - serializedObject 变为 null 错误