错误:类型为'List<#lib1 :: Data>'的值不能分配给类型为'List<#lib2 :: Data> [英] Error: A value of type 'List<#lib1::Data>' can't be assigned to a variable of type 'List<#lib2::Data>

查看:58
本文介绍了错误:类型为'List<#lib1 :: Data>'的值不能分配给类型为'List<#lib2 :: Data>的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

使用此api创建地震信息应用程序:
https://earthquake.usgs.gov/earthquakes/feed/v1.0/summary/all_day.geojson

Creating a earthquake information app using this api: https://earthquake.usgs.gov/earthquakes/feed/v1.0/summary/all_day.geojson

但是运行后出现此错误应用程序:

But getting this error after running application:


错误:无法将类型为'dart.core :: List<#lib1 :: Data>'的值分配给一个变量类型为'dart.core :: List<#lib2 :: Data>'。

Error: A value of type 'dart.core::List<#lib1::Data>' can't beassigned to a variable of type 'dart.core::List<#lib2::Data>'.

E / flutter(9986):尝试更改左手的类型

E/flutter ( 9986): Try changing the type of the left hand side, or casting the right hand side to 'dart.core::List<#lib2::Data>'.

E / flutter(9986):_quakes = quakes ;

E/flutter ( 9986): _quakes = quakes;

我的Flutter版本: Flutter 0.5.7-pre.100•频道主版

My flutter version: Flutter 0.5.7-pre.100 • channel master

代码:api.dart

import 'dart:async';
import 'dart:convert';
import 'package:flutter_layout/project/quake/models/quake.dart';
import 'package:flutter_layout/project/quake/models/serializers.dart';

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

const String baseUrl = 'https://earthquake.usgs.gov/earthquakes/feed/v1.0/summary/all_day.geojson';

Future<List<Data>> getQuake() async {
  final response  = await http.get((Uri.parse(baseUrl)));
  print("${response.toString()}");

  Quake quake = serializers.deserializeWith(Quake.serializer, json.decode(response.body));

  return quake.features.map((Properties properties) => properties.properties).toList();
}

quake.dart

import 'package:built_collection/built_collection.dart';
import 'package:built_value/built_value.dart';
import 'package:built_value/serializer.dart';

part 'quake.g.dart';

abstract class Quake implements Built<Quake, QuakeBuilder> {
  BuiltList<Properties> get features;
  Quake._();
  factory Quake([updates(QuakeBuilder b)]) = _$Quake;
  static Serializer<Quake> get serializer => _$quakeSerializer;
}

abstract class Properties implements Built<Properties, PropertiesBuilder> {
  Data get properties;
  Properties._();
  factory Properties([updates(PropertiesBuilder b)]) = _$Properties;
  static Serializer<Properties> get serializer => _$propertiesSerializer;
}

abstract class Data implements Built<Data, DataBuilder> {
  double get mag;
  String get place;
  Data._();
  factory Data([updates(DataBuilder b)]) = _$Data;
  static Serializer<Data> get serializer => _$dataSerializer;
}

QuakeApp.dart

import 'package:flutter/material.dart';
import 'QuakeListView.dart';
import 'models/api.dart';
import 'models/quake.dart';

class QuakeApp extends StatefulWidget {
  @override
  State<StatefulWidget> createState() {
    return QuakeAppState();
  }
}

class QuakeAppState extends State<QuakeApp>{
  List<Data> _quakes = [];

  @override
  void initState() {
    super.initState();
    getQuake().then((quakes){
      _quakes = quakes;
    });
  }

  List<QuakeListItem> buildListWidget(){
    return _quakes.map((post) => QuakeListItem(
      mag: post.mag,
      place: post.place,
    )).toList();
  }

  @override
  Widget build(BuildContext context) {
    return new Scaffold(
      appBar: new AppBar(
        title: new Text("Quake App"),
        centerTitle: true,
      ),
      body: RefreshIndicator(
        onRefresh: () async{
          getQuake().then((quakes){
            setState(() {
              _quakes = quakes;
              print("${quakes.length}");
            });
          });
        },
        child: AnimatedCrossFade(
          duration: Duration(microseconds: 300),
          firstChild: Center(
            child: CircularProgressIndicator(),
          ),
          secondChild: ListView(
            children: buildListWidget(),
          ),
          crossFadeState: _quakes != null ? CrossFadeState.showSecond : CrossFadeState.showFirst,
        ),
      ),
    );
  }
}

任何解决方案?

推荐答案

我想这是已知问题 https://github.com/dart-lang/sdk/issues/33076

执行不要 lib / main.dart 中使用相对导入(仅'package:...'导入)

,并从任何其他文件中导入 lib / main.dart

Do not use relative imports in lib/main.dart (only 'package:...' imports)
and do not import lib/main.dart from any other file.

这篇关于错误:类型为'List&lt;#lib1 :: Data&gt;'的值不能分配给类型为'List&lt;#lib2 :: Data&gt;的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆