Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.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/2/ionic-framework/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
Dart 如果值匹配,则从JSON读取颤振_Dart_Flutter - Fatal编程技术网

Dart 如果值匹配,则从JSON读取颤振

Dart 如果值匹配,则从JSON读取颤振,dart,flutter,Dart,Flutter,我有很多客户: customer.json [ { "name": "Customer 1", "id": "1" }, { "name": "Customer 2", "id": "2" }, { "name": "Customer 3", "id": "3" } ] 这是使用以下json数据的dart文件: customerslist.dart widgets.add(new FutureBuilder(

我有很多客户:

customer.json

[
  {
    "name": "Customer 1",
    "id": "1"
  },
  {
    "name": "Customer 2",
    "id": "2"
  },
  {
    "name": "Customer 3",
    "id": "3"
  }
]
这是使用以下json数据的dart文件:

customerslist.dart

widgets.add(new FutureBuilder(
              future: loadCustomers(),
              builder: (context, snapshot){
                if(snapshot.hasData){

                  //get snapshot data from JSON tree
                  var jsondecode = json.decode(snapshot.data);

                  return new ListView.builder(
                      shrinkWrap: true,
                      itemCount: jsondecode.length,
                      itemBuilder: (context, index){
                        String name = jsondecode[index]["name"];
                        String id = jsondecode[index]["id"];

                        if(name == "Customer 2"){
                          return new Column(
                            children: <Widget>[

                              new ListTile(
                                title: new Text("Name"),
                                trailing: new Text(name),
                              ),
                              new ListTile(
                                title: new Text("ID"),
                                trailing: new Text(id),
                              )
                            ],
                          );
                        }
                      });
                }else{
                  return new Center(
                    child: new CircularProgressIndicator(),
                  );
                }
              }));
未来方法

Future<String> loadCustomers() async{
  var res = await http.get(
      Uri.encodeFull(url),
      headers: {"Accept": "application/json"});
  return res.body;
}
Future loadCustomers()异步{
var res=wait http.get(
encodeFull(url),
标题:{“接受”:“应用程序/json”});
返回实体;
}
小部件

widgets.add(new FutureBuilder(
              future: loadCustomers(),
              builder: (context, snapshot){
                if(snapshot.hasData){

                  //get snapshot data from JSON tree
                  var jsondecode = json.decode(snapshot.data);

                  return new ListView.builder(
                      shrinkWrap: true,
                      itemCount: jsondecode.length,
                      itemBuilder: (context, index){
                        String name = jsondecode[index]["name"];
                        String id = jsondecode[index]["id"];

                        if(name == "Customer 2"){
                          return new Column(
                            children: <Widget>[

                              new ListTile(
                                title: new Text("Name"),
                                trailing: new Text(name),
                              ),
                              new ListTile(
                                title: new Text("ID"),
                                trailing: new Text(id),
                              )
                            ],
                          );
                        }
                      });
                }else{
                  return new Center(
                    child: new CircularProgressIndicator(),
                  );
                }
              }));
widgets.add(新的FutureBuilder(
future:loadCustomers(),
生成器:(上下文,快照){
if(snapshot.hasData){
//从JSON树获取快照数据
var jsondecode=json.decode(snapshot.data);
返回新的ListView.builder(
收缩膜:对,
itemCount:jsondecode.length,
itemBuilder:(上下文,索引){
字符串名称=jsondecode[索引][“名称”];
字符串id=jsondecode[index][“id”];
如果(名称==“客户2”){
返回新列(
儿童:[
新ListTile(
标题:新文本(“名称”),
尾随:新文本(名称),
),
新ListTile(
标题:新文本(“ID”),
尾随:新文本(id),
)
],
);
}
});
}否则{
返回新中心(
子项:新的CircularProgressIndicator(),
);
}
}));
我试图做的是在名称匹配时显示值,正如您可以从
if(name==“Customer 2”)
中看到的那样

但我面临的问题是:

当我将if语句更改为
if(name==“Customer 1”)
时,输出与您预期的一样:

但是,如果我将其更改为
if(name==“Customer 2”)
,则输出结果为空:


有人能解释一下为什么会出现这种情况,或者我可以采取其他方法来解决这个问题吗?

我想这是因为
专栏
小部件占据了全部高度。您可以尝试使用列的最小高度并添加其他条件

                            if(name == "Customer 2"){
                      return new Column(
                        children: <Widget>[

                          new ListTile(
                            title: new Text("Name"),
                            trailing: new Text(name),
                          ),
                          new ListTile(
                            title: new Text("ID"),
                            trailing: new Text(id),
                          )
                        ],
                      );
                    } else {
                    return new Container();
                    }
if(名称==“客户2”){
返回新列(
儿童:[
新ListTile(
标题:新文本(“名称”),
尾随:新文本(名称),
),
新ListTile(
标题:新文本(“ID”),
尾随:新文本(id),
)
],
);
}否则{
返回新容器();
}
当您使用“Customer 1”时,它工作正常,因为您的第一个元素是“Customer 1”,可能您的控制台上有一个错误,因为对于其他项目,没有返回的小部件

在“Customer 2”的情况下,不会返回第一项,因此请检查控制台日志


itemguilder
希望您为所有情况返回一个小部件。

您只需将var字符串转换为list

var jsondecode = json.decode(snapshot.data);

List list = jsondecode;
 String name = list[index]["name"];
                    String id = list[index]["id"];
然后传递列表以获取索引,这可能有效,因为var类型可能仅获取第一个json字符串

enter code here

不是这样。如果我使用print语句进行检查,If(name==“Customer 2”)仍将打印为空。我的if语句可能有问题。令人惊讶的是,它能工作。您能否解释一下,当新容器添加到else语句中时,它为什么会工作?非常感谢。我一定要记住在itemBuilder中放置所有情况下的小部件。没问题:),不要忘了将答案标记为已解决,并保持浮动!!