Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/magento/5.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
Flutter 如果不存在元素,为什么list.length返回1个大小_Flutter_Dart - Fatal编程技术网

Flutter 如果不存在元素,为什么list.length返回1个大小

Flutter 如果不存在元素,为什么list.length返回1个大小,flutter,dart,Flutter,Dart,我在返回列表大小时遇到了一个werid问题。 服务器将列表作为返回类型。作为对颤振请求的响应,我得到了弦 I/flutter ( 4454): ["Email is already taken","Phone number is already taken","Username is already taken"] I/flutter ( 4454): [Email is already taken, Phone number is a

我在返回列表大小时遇到了一个werid问题。 服务器将
列表
作为返回类型。作为对颤振请求的响应,我得到了弦

I/flutter ( 4454): ["Email is already taken","Phone number is already taken","Username is already taken"]
I/flutter ( 4454): [Email is already taken, Phone number is already taken, Username is already taken]
I/flutter ( 4454): 3
I/flutter ( 4454): false
因此,我将其转换为列表,删除
[
]
,如下所示:

 print(response.body);
    List<String> list = response.body
        .substring(1, response.body.length - 1)
        .replaceAll('"', '')
        .split(',')
        .toList();

 print(list);
    print(list.length);
    print(list.length == 0);
它返回1个大小,尽管列表中没有元素


你能告诉我我做错了什么吗?还有为什么服务器端返回
列表时response.body包含字符串?

将此
更改为
.substring(1,response.body.length-1)
.substring(0,response.body.length-1)

您的列表确实包含一个元素,即值为:
''
的空
字符串。打印列表时您没有看到它的原因是,Dart在打印字符串时没有向字符串添加任何内容(例如,用
将其封装为“

我们可以在这个例子中看到这一点:

void main() {
  final list = [''];
  print(list); // []

  for (var i = 0; i < list.length; i++) {
    print('$i = ${list[i]}'); // 0 = 
  }
}
void main(){
最终列表=[''];
打印(列表);//[]
对于(变量i=0;i
在我看来,您正在尝试手动解析一些JSON。您可以在示例中执行以下操作,而不是自己解析:

import 'dart:convert';

void main() {
  const input = r'["Email is already taken","Phone number is already taken","Username is already taken"]';
  print(parseJsonList(input));
  // [Email is already taken, Phone number is already taken, Username is already taken]
}

List<String> parseJsonList(String json) =>
    (jsonDecode(json) as List<dynamic>).cast<String>();
导入'dart:convert';
void main(){
const input=r'[“电子邮件已被占用”、“电话号码已被占用”、“用户名已被占用”];
打印(parseJsonList(输入));
//[电子邮件已发送,电话号码已发送,用户名已发送]
}
List parseJsonList(字符串json)=>
(jsonDecode(json)as List).cast();

但如果我更改为
.substring(0…)
则如果列表包含某些元素,则我有双“[”=[[电子邮件已被占用,电话号码已被占用,用户名已被占用]`好的,这部分我帮不了你。问题是为什么一个看似空的列表会有一个长度。:)好的。但是为什么我有这个空字符串?我不明白。艾哈迈德·拉扎的答案不起作用。@traki111你为什么要自己解析而不是用JSON解析器解码?因为JSON.decode是打开
列表
非常不方便。有更好的解码器吗?它不工作。
import 'dart:convert';

void main() {
  const input = r'["Email is already taken","Phone number is already taken","Username is already taken"]';
  print(parseJsonList(input));
  // [Email is already taken, Phone number is already taken, Username is already taken]
}

List<String> parseJsonList(String json) =>
    (jsonDecode(json) as List<dynamic>).cast<String>();