类型'String'不是get方法颤动中类型'Null'的子类型

Posted

技术标签:

【中文标题】类型\'String\'不是get方法颤动中类型\'Null\'的子类型【英文标题】:type 'String' is not a subtype of type 'Null' in get method flutter类型'String'不是get方法颤动中类型'Null'的子类型 【发布时间】:2020-05-14 05:44:36 【问题描述】:

我得到了这个错误:类型'String'不是get方法flutter中'Null'类型的子类型

这是我使用的get api函数

 Future<Stream<ServiceTypes>> getServiceTypesa() async 
 final String url = 'https://test.com';

 final client = new http.Client();
 final streamedRest = await client.send(
   http.Request('get', Uri.parse(url))
 );

 return streamedRest.stream 
     .transform(utf8.decoder)
     .transform(json.decoder)
     .expand((data) => (data as List))
     .map((data) => ServiceTypes.fromJson(data));

你可以在这里看到函数检测数据

我也看到了这个错误

StateError(错误状态:Stream 已被监听。)

还有这个错误

这是我的监听功能

  @override
  void initState() 
    _serviceTypes = new List<ServiceTypes>();
    listenForServiceTypes();
    super.initState();
  

  void listenForServiceTypes() async 
    setState(() 
      this._show_serviceTypesProgress = true;
    );
    final Stream<ServiceTypes> stream = await getServiceTypesa();

    stream.listen((ServiceTypes serviceTypes) =>
        setState(() => _serviceTypes.add(serviceTypes)));

    setState(() 
      this._show_serviceTypesProgress = false;
    );

    print(_serviceTypes);
  

这是我做的模型

我不知道是什么问题,因为打印函数返回:[]

【问题讨论】:

你确定'deleted_at'在你的api服务器的json里面吗? 是的,我确定并添加模型以查看它 【参考方案1】:

问题很清楚,您将image 类型定义为Null 然后尝试将字符串传递给它,尝试更改定义.. 像这样:

Class ServiceTypes
  int id;
  String name;
  String image;
...

【讨论】:

【参考方案2】:

当您创建模型时,图像类型值为 null,因此,模型是使用 Null 类型的图像创建的,但是当图像不是来自服务器的 null 类型时,它会给您一个错误

     type 'String' is not a subtype of type 'Null' in get method flutter 

因为您的图像类型是来自服务器的字符串,并且您通过 Null 对象获取值,所以使用字符串类型对象来获取字符串值或图像。

使用这个

  Class ServiceTypes
  String image;

而不是

   Class ServiceTypes
   Null image;

【讨论】:

以上是关于类型'String'不是get方法颤动中类型'Null'的子类型的主要内容,如果未能解决你的问题,请参考以下文章

“字符串?”类型的值不能分配给“字符串”类型的变量颤动

需要一个“Widget”类型的值,但得到一个“Null”类型的值,颤动

Redis 常用命令

Java中,List<String>返回类型

在颤动中加载 api 时出现类型转换错误

如何在颤动中使用小部件映射列表