Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Json 颤振-省道变量丢失并不断重新初始化_Json_Variables_Static_Dart_Flutter - Fatal编程技术网

Json 颤振-省道变量丢失并不断重新初始化

Json 颤振-省道变量丢失并不断重新初始化,json,variables,static,dart,flutter,Json,Variables,Static,Dart,Flutter,我现在正和弗利特一起尝试。但当从另一个类访问时,我的变量会不断重新初始化 我正在使用json解析,我需要请求的两部分。“关系”部分和“策略”部分 要解析此json,我将执行以下操作: List<RelatorioProdutos> parseRelatorioPorProduto(String responseBody) { final parsed = json.decode(responseBody); var relatorio = parsed['Relatorio'

我现在正和弗利特一起尝试。但当从另一个类访问时,我的变量会不断重新初始化

我正在使用json解析,我需要请求的两部分。“关系”部分和“策略”部分

要解析此json,我将执行以下操作:

List<RelatorioProdutos> parseRelatorioPorProduto(String responseBody) {
  final parsed = json.decode(responseBody);
  var relatorio = parsed['Relatorio'];
  var mensagem = parsed['Mensagem'];
  print (mensagem); // Here the variable returns well,
 //but when i need it in other class i receive null.

  return  relatorio.map<RelatorioProdutos>((json) => new RelatorioProdutos.fromJson(json)).toList();
}

class RelatorioProdutos {
  String CodigoProduto;
  var QtdVendida;
  var TotalVendas;
  String Descricao;

  RelatorioProdutos({this.CodigoProduto, this.QtdVendida, this.TotalVendas, this.Descricao,});

  factory RelatorioProdutos.fromJson(Map json) {

    //returns a List of Maps
    return new RelatorioProdutos(

      CodigoProduto: json['CodigoProduto'] as String,
      QtdVendida: json['QtdVendida'],
      TotalVendas: json['TotalVendas'],
      Descricao: json['Descricao'] as String,
    );
  }
}
List parseRelatorioPorProduto(字符串响应库){
final parsed=json.decode(responseBody);
var relatorio=已解析['relatorio'];
var mensage=parsed['mensage'];
print(mensage);//这里变量返回良好,
//但当我在其他类中需要它时,我会收到null。
返回relatorio.map((json)=>newrelatorioprodutos.fromJson(json)).toList();
}
类关系程序{
字符串CodigoProduto;
QtdVendida变种;
var TotalVendas;
字符串描述符;
RelatorioProdutos({this.CodigoProduto,this.QtdVendida,this.TotalVendas,this.descripao,});
factory RelatorioProdutos.fromJson(映射json){
//返回地图列表
返回新的relatoroprodutos(
CodigoProduto:json['CodigoProduto']作为字符串,
QtdVendida:json['QtdVendida'],
TotalVendas:json['TotalVendas'],
descripcao:json['descripcao']作为字符串,
);
}
}
我想在另一个类中使用这个'mensagem'变量为用户显示错误,但我总是收到'null'

我已经尝试过setState,但它会重新加载我的json,我不想再次请求RestServer


从现在开始谢谢你

如果我理解正确,您希望从另一个类访问函数的局部变量。我认为这是不可能的

一种方法是将您的响应包装到另一个包含响应的对象中,并使用以下变量:

List<Response<RelatorioProdutos>> parseRelatorioPorProduto(
    String responseBody) {
  final parsed = json.decode(responseBody);
  var relatorio = parsed['Relatorio'];
  var mensagem = parsed['Mensagem'];
  print(mensagem); // Here the variable returns well,
  //but when i need it in other class i receive null.

  return relatorio
      .map((json) => new Response<RelatorioProdutos>(
          new RelatorioProdutos.fromJson(json), mensagem))
      .toList();
}

class RelatorioProdutos {
  String CodigoProduto;
  var QtdVendida;
  var TotalVendas;
  String Descricao;

  RelatorioProdutos({
    this.CodigoProduto,
    this.QtdVendida,
    this.TotalVendas,
    this.Descricao,
  });

  factory RelatorioProdutos.fromJson(Map json) {
    //returns a List of Maps
    return new RelatorioProdutos(
      CodigoProduto: json['CodigoProduto'] as String,
      QtdVendida: json['QtdVendida'],
      TotalVendas: json['TotalVendas'],
      Descricao: json['Descricao'] as String,
    );
  }
}

class Response<T> {
  const Response(
    this.value,
    this.errorMessage,
  );

  final T value;

  final String errorMessage;

  bool get hasError => errorMessage != null;
}
List parseRelatorioPorProduto(
字符串响应体){
final parsed=json.decode(responseBody);
var relatorio=已解析['relatorio'];
var mensage=parsed['mensage'];
print(mensage);//这里变量返回良好,
//但当我在其他类中需要它时,我会收到null。
回程关系
.map((json)=>新响应(
新的RelatorioProdutos.fromJson(json),mensage)
.toList();
}
类关系程序{
字符串CodigoProduto;
QtdVendida变种;
var TotalVendas;
字符串描述符;
关系调节器({
这是CodigoProduto,
这是QtdVendida,
这是TotalVendas,
这个,描述一下,
});
factory RelatorioProdutos.fromJson(映射json){
//返回地图列表
返回新的relatoroprodutos(
CodigoProduto:json['CodigoProduto']作为字符串,
QtdVendida:json['QtdVendida'],
TotalVendas:json['TotalVendas'],
descripcao:json['descripcao']作为字符串,
);
}
}
班级反应{
常数响应(
这个,这个价值,,
这是一条错误消息,
);
最终T值;
最终字符串错误消息;
bool get hasError=>errorMessage!=null;
}
在本例中,我创建了一个
Response
对象,该对象可以包含响应值和错误消息


parseRelatorioPorProduto
中,我没有返回relatorio,而是将返回类型更改为
Response
,以便能够访问调用此函数的任何类的值和错误消息。

谢谢Letsar,我尝试了YoutIdeia,但我遇到了许多其他错误

为了解决这个问题,我使用了以下方法:

List<RelatorioProdutos>  parseRelatorioPorProduto(String responseBody) {
  final parsed = json.decode(responseBody);
  var relatorio = parsed['Relatorio'];
  var mensagem = parsed['Mensagem'];

  if(mensagem[0].toString().substring(16,17) == "0"){
    List<RelatorioProdutos> asd = new List();
    RelatorioProdutos aimeudeus = new RelatorioProdutos(Descricao: mensagem[0].toString(), CodigoProduto: "a", TotalVendas: 0, QtdVendida: 0);
    asd.add(aimeudeus);
    return asd;
  }else{
    return relatorio.map<RelatorioProdutos>((json) => new RelatorioProdutos.fromJson(json)).toList();
  }


}
List parseRelatorioPorProduto(字符串响应库){
final parsed=json.decode(responseBody);
var relatorio=已解析['relatorio'];
var mensage=parsed['mensage'];
if(mensage[0].toString().substring(16,17)=“0”){
List asd=新列表();
RelatorioProdutos aimeudeus=新的RelatorioProdutos(descripcao:mensage[0].toString(),CodigoProduto:“a”,TotalVendas:0,QtdVendida:0);
asd.add(aimeudeus);
返回asd;
}否则{
返回relatorio.map((json)=>newrelatorioprodutos.fromJson(json)).toList();
}
}

感谢Letsar提供的帮助,但如果我这样做,我会在List和List中遇到很多其他错误,我这样做是为了解决这个问题ParseRelationOporProduto(String responseBody){final parsed=json.decode(responseBody);var Relationrio=parsed['Relationio'];var mensagem=parsed['mensagem'];if(mensagem[0].toString().substring(16,17)=“0”){List asd=new List();RelatorioProdutos aimeudeus=new RelatorioProdutos(descripao:mensage[0].toString(),CodigoProduto:“a”,TotalVendas:0,QtdVendida:0);asd.add(aimeudeus);return asd;}else{return relatorio.map((json)=>new RelatorioProdutos.fromJson(json)).toList();}