代码之家  ›  专栏  ›  技术社区  ›  Yeahia2508

错误:“list<lib1::data>”类型的值不能分配给“list<lib2::data>类型的变量

  •  2
  • Yeahia2508  · 技术社区  · 8 年前

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

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

    错误:“dart.core::list<lib1::data>”类型的值无法分配给“dart.core::list<lib2::data>”类型的变量。

    e/flutter(9986):尝试更改左侧的类型,或将右侧强制转换为“dart.core::list<lib2::data>”。

    e/颤振(9986):_地震=地震;

    我的颤振版本: 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();
    }
    

    地震.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,
            ),
          ),
        );
      }
    }
    

    有什么解决办法吗?

    1 回复  |  直到 8 年前
        1
  •  3
  •   Günter Zöchbauer    8 年前

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

    做 不 在中使用相对导入 lib/main.dart (仅) 'package:...' 进口)
    并且做 不 进口 库/主.dart 从任何其他文件。