如何打印未来地图的动态元素,动态

how to print an elements of Future Map dynamic, dynamic

提问人:GarjesMan 提问时间:7/19/2023 最后编辑:TijnvdEijndeGarjesMan 更新时间:8/15/2023 访问量:39

问:

我希望打印未来地图的元素,我通过 API 结果获取这些元素,我可以用 then 读取结果,但我不能使用这个结果在屏幕上显示它并在 then 之外使用它的元素,因为我使用我在 then 中获得的元素来制作每个屏幕的结构每个返回的元素。

`class _PaginaDetalleScreenState extends State<PaginaDetalleScreen> {
  @override
  Widget build(BuildContext context) {
    Future<Map<dynamic, dynamic>> progs =
        login().detalles(widget.clave, widget.sucursal, widget.folio);
    // progs.then((value) => print(value['ocs'][0][2]));

    print(progs[0]); // how to print each element

    return Scaffold(
      appBar: AppBar(
        backgroundColor: const Color(0xff3c4854),
        title: const Text('Detalles Pedido'),
      ),
      body: ListView.builder(
          itemCount: null,
          itemBuilder: (BuildContext context, int index) {
            return;
          }),
    );
  }
}`

我试图将地图传递给列表以访问每个数据并能够在屏幕上单独显示它,我还尝试在另一个变量中保存带有循环的元素以更改其结构,但是我仍然得到相同的结果,动态的未来地图动态。

Android Flutter 列表 Dart Future

评论

0赞 Randal Schwartz 7/19/2023
如果你有未来,你还没有价值。如果你在build()中,你就等不及了,所以你使用像FutureBuilder这样的东西来显示一个替代的小部件。

答:

0赞 GarjesMan 8/15/2023 #1

当发出使用 API 的请求时,我们正在等待响应,这并不完全是即时的,但可能需要一些时间,具体取决于连接本身的几个因素。为此,使用了异步编程,您要做的是一个异步函数,该函数在构建其余部分的同时等待答案,已经有明确的答案,然后我们通过状态管理显示答案。这样我就解决了问题......

import 'package:dio/dio.dart'; // Paquete necesario para la petición a internet.
import 'package:flutter/material.dart';

class Opcion1 extends StatefulWidget {

  const Opcion1({super.key});

  @override
  State<Opcion1> createState() => _Opcion1State();
}

class _Opcion1State extends State<Opcion1> {

    dynamic productos; // Variable dinamica para almacenar la respuesta de la API

// Initstate, para cargar primero lo que esta en la función.
   @override
   void initState() {
     super.initState();
     getProductos(); //Funcion futura
   }

// Creación de la función asincrona
   Future<void> getProductos() async {
    
    final response = await Dio().get('urldelAPI');
    productos = response.data; //asignación de los valores

 //Manejo del estado, cuando se obtiene la respuesta manda el cambio de estado
    setState(() {});

   }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      debugShowCheckedModeBanner: false,
      title: 'Material App',
      home: Scaffold(
        appBar: AppBar(
          title: const Text('Pruebas'),
        ),
        body: Container(
          child: Center(
            // Mostramos la respuesta de acuerdo a la estructura de la misma. 
            child: Text( productos?['ocs'][0][2].toString() ?? 'No data'), 
          ),
        ),
      ),
    );
  }
}

下一步是根据设计格式化响应,并使用 ListView 显示我们需要的数据。

评论

0赞 doneforaiur 8/17/2023
SO 只允许英语问题和答案。