Rangeerror (index): Invalid value: Valid value range is Empty: 0

Asked

Viewed 36 times

0

People I am trying to return data from my api in the application and I am using Getx to manage the state, but in my View I am having the error Rangeerror (index): Invalid value: Valid value range is Empty: 0, I print the return of the api in the view and is return the right value.

follows the code below:

//View

import 'package:aurora_mobile/src/controllers/home_controller.dart';
import 'package:aurora_mobile/src/controllers/pedido_controller.dart';
import 'package:aurora_mobile/src/rotas/RouteGenerator.dart';
import 'package:aurora_mobile/src/tiles/check_pedidos_tile.dart';
import 'package:flutter/material.dart';
import 'package:get/get.dart';

class ListaPedidos extends StatefulWidget {

  String result;

  ListaPedidos(this.result);

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

class _ListaPedidosState extends State<ListaPedidos> {

  HomeController homeController = Get.find();
  PedidoController pedidoController = Get.find();
  PedidoController controller = Get.put(PedidoController());

  @override
  void initState() {
    super.initState();

    pedidoController.getPedidoData(widget.result, homeController.cnpj);
    controller.checkeds.clear();
  }

  @override
  void dispose() {
    super.dispose();

    pedidoController.pedidos.clear();
    controller.checkeds.clear();
  }

  @override
  Widget build(BuildContext context) {

    print("Views: "+widget.result);

    return Scaffold(
        appBar: AppBar(
          title: Row(
            mainAxisAlignment: MainAxisAlignment.spaceBetween,
            children: [
              Image.asset(
                "assets/imagens/LOGO.jpg",
                width: 100,
                height: 100,
              ),
              Text(
                "Armazém Geral\n${homeController.empresa}\nPerfil: ${homeController.perfil}",
                style: TextStyle(
                    color: Colors.black,
                    fontSize: 12
                ),
              ),
              IconButton(
                color: Colors.black87,
                icon: Icon(Icons.logout),
                onPressed: (){
                  Navigator.pushReplacementNamed(context, RouteGenerator.ROTA_LOGIN);
                },
              )
            ],
          ),
          backgroundColor: Colors.white,
        ),
        body: Container(
          child: Obx((){

              if(pedidoController.loading.value){
                  return Center(
                    child: CircularProgressIndicator(
                      valueColor: AlwaysStoppedAnimation(
                          Colors.blue
                      ),
                    ),
                  );
              }else if(pedidoController.pedidos.isEmpty){
                  return Center(
                    child: Text("Não foi encontrado dados"),
                  );
              }else{
                return Column(
                  crossAxisAlignment: CrossAxisAlignment.center,
                  children: [
                      Expanded(
                          child:  ListView.builder(
                                itemCount: pedidoController.pedidos.length,
                                itemBuilder: (_, index){

                                   print("View Pedido: "+pedidoController.pedidos[index].produto);

                                    return Obx(() =>  CheckboxPedidos(
                                          nota: pedidoController.pedidos[index].notaFiscal,
                                          produto: pedidoController.pedidos[index].produto,
                                          lote: pedidoController.pedidos[index].lote,
                                          qtd: pedidoController.pedidos[index].qtdDisp,
                                          unidade: pedidoController.pedidos[index].unidMedida,
                                          cnpjCli: homeController.cnpj,
                                          uz: pedidoController.pedidos[index].palete,
                                          checked: controller.checkeds[index],
                                          selectAll: pedidoController.selectAll,
                                          serial: pedidoController.pedidos[index].loteSerial,
                                          cubagem: pedidoController.pedidos[index].cubagem,
                                          qtd_total: pedidoController.pedidos[index].qtdTotal,
                                          qtd_uz: pedidoController.pedidos[index].qtdUz,
                                          index: index,
                                      )
                                    );
                                },
                            )
                          )
                   ],
                );
              }

          }),
        ),
        floatingActionButtonLocation: FloatingActionButtonLocation.endDocked,
        floatingActionButton: FloatingActionButton(
          elevation: 8,
          backgroundColor: Colors.orange,
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: [
              Icon(Icons.home, color: Colors.white70),
              Text("Inicio",
                style: TextStyle(
                    fontSize: 10,
                    color: Colors.white70
                ),
              )

            ],
          ),
          onPressed: (){
            Navigator.pushReplacementNamed(context, RouteGenerator.ROTA_HOME);
          },
        ),
        bottomNavigationBar: BottomAppBar(
          elevation: 8,
          child: Row(
            mainAxisAlignment: MainAxisAlignment.start,
            children: [
              SizedBox(
                width: 15,
              ),
              RaisedButton(
                  child: SizedBox(
                    height: 68,
                    child: Row(
                      children: [
                        Icon(Icons.arrow_back, color: Colors.white70),
                        //Text("Voltar", style: TextStyle(color: Colors.white70))
                      ],
                    ),
                  ),
                  color: Colors.orange,
                  shape: CircleBorder(),
                  onPressed: (){
                    Navigator.pushReplacementNamed(context, RouteGenerator.ROTA_PALETE);
                  }
              ),
              SizedBox(
                width: 20,
              ),
              RaisedButton(
                  elevation: 8,
                  child: SizedBox(
                    height: 55,
                    child: Row(
                      children: [
                        Text("Gerar Pedido", style: TextStyle(color: Colors.white))
                      ],
                    ),
                  ),
                  color: Colors.lightBlue,
                  onPressed: (){

//                    showDialog(
//                        context: context,
//                        builder: (context){

//                          return  AlertDialog(
//                            title: Text("Autoriza Remontagem?"),
//                            content: DropdownButtonFormField(
//                              icon: Icon(Icons.arrow_drop_down),
//                              iconSize: 40,
//                              isExpanded: true,
//                              elevation: 16,
//                              style: TextStyle(color: Colors.orangeAccent),
//                              //  value: _selected,
//                              onChanged: (newValue){
//
//                              },

//                              items: status.map((Status status) {
//                                return DropdownMenuItem<Status>(
//                                    value: status,
//                                    child: Text(status.status)
//                                );
//                              }).toList(),
//                            ),
//                            actions: [
//                              FlatButton(
//                                  onPressed: () => Navigator.pop(context),
//                                  child: Text("Cancelar")
//                              ),
//                              FlatButton(
//                                  onPressed:() async {
//
//
//                                    Navigator.pop(context);
//                                  } ,
//                                  child: Text("Salvar")
//                              ),
//                            ],
//                          );

//                        }
//                    );

                  }
              ),
            ],
          ),
        )
    );
  }
}

//Controller

import 'package:aurora_mobile/src/model/PedidosUZ.dart';
import 'package:aurora_mobile/src/repository/pedido_repository.dart';
import 'package:get/get.dart';

class PedidoController extends GetxController {

  RxBool loading = false.obs;
  RxList<PedidosUZ> pedidos = <PedidosUZ>[].obs;

  final checkeds = <bool>[].obs;

  bool selectAll = false;

  //Puxar os dados da Api
  Future getPedidoData(String busca, String cnpjCli) async {

    loading.value = true;

    print("Contoller Pedido: "+busca+" "+cnpjCli);

    pedidos.addAll(await PedidoRepository.getDados(busca, cnpjCli));

    loading.value = false;
  }
}

//Class

class PedidosUZ {
  String notaFiscal;
  String loteSerial;
  String produto;
  String qtdDisp;
  String lote;
  String unidMedida;
  String cnpj;
  String palete;
  String cubagem;
  String timeStamp;
  String qtdTotal;
  String qtdUz;

  PedidosUZ(
      {this.notaFiscal,
        this.loteSerial,
        this.produto,
        this.qtdDisp,
        this.lote,
        this.unidMedida,
        this.cnpj,
        this.palete,
        this.cubagem,
        this.timeStamp,
        this.qtdTotal,
        this.qtdUz});

  PedidosUZ.fromJson(Map<String, dynamic> json) {
    notaFiscal = json['nota_fiscal'];
    loteSerial = json['lote_serial'];
    produto = json['produto'];
    qtdDisp = json['qtd_disp'];
    lote = json['lote'];
    unidMedida = json['unid_medida'];
    cnpj = json['cnpj'];
    palete = json['palete'];
    cubagem = json['cubagem'];
    timeStamp = json['time_stamp'];
    qtdTotal = json['qtd_total'];
    qtdUz = json['qtd_uz'];
  }

  Map<String, dynamic> toJson() {
    final Map<String, dynamic> data = new Map<String, dynamic>();
    data['nota_fiscal'] = this.notaFiscal;
    data['lote_serial'] = this.loteSerial;
    data['produto'] = this.produto;
    data['qtd_disp'] = this.qtdDisp;
    data['lote'] = this.lote;
    data['unid_medida'] = this.unidMedida;
    data['cnpj'] = this.cnpj;
    data['palete'] = this.palete;
    data['cubagem'] = this.cubagem;
    data['time_stamp'] = this.timeStamp;
    data['qtd_total'] = this.qtdTotal;
    data['qtd_uz'] = this.qtdUz;
    return data;
  }
}

//Repository

import 'package:aurora_mobile/src/model/PedidosUZ.dart';
import 'package:aurora_mobile/src/util/api_pedido.dart';

class PedidoRepository {

  static Future<List<PedidosUZ>> getDados(String busca, String cnpjCli) async {


    List<PedidosUZ> dados = [];

    var map = await ApiPedido.buscaPedidos(busca, cnpjCli);

    var listaMaps = map;

    if(listaMaps != null && listaMaps.isNotEmpty){
      listaMaps.forEach((m) => dados.add(PedidosUZ.fromJson(m)));
    }

    print("Repository Pedido: "+dados[0].notaFiscal);

    return dados;

  }
}

//api

import 'dart:convert';

import 'package:get/get.dart';
import 'package:http/http.dart' as http;

class ApiPedido {

  static final URL = 'http://localhost/camera/api.php';

  static Future buscaPedidos(String busca, String cnpjCli) async {

    var client = http.Client();

    try{

      var response = await client.get(URL + "?action=pesquisaPedido"
          "&busca=$busca"
          "&cnpj=$cnpjCli"
      );

      //Map<String, dynamic> resp = json.decode(response.body);
      var resp = json.decode(response.body);

      print("Api Pedido: "+response.body);

      return resp;

    }catch(e){
      Get.snackbar("Erro ao Conectar", "Não foi possível acessar o servidor $e");
    }finally{
      client.close();
    }

  }

}
No answers

Browser other questions tagged

You are not signed in. Login or sign up in order to post.