首页 > 解决方案 > 将地图数据从 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()),
      );

标签: jsonflutterdictionarydart

解决方案


感谢所有试图帮助我的人,我得到了问题以及如何解决它。我会把解决方案放在这里给有同样问题的人。实际上要改变一个简单的事情:

从列表中删除特定屏幕。

 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();
   }
 */
}

推荐阅读