Flutter 用于集团模式和列表的存储库模型<;对象>;

Flutter 用于集团模式和列表的存储库模型<;对象>;,flutter,dart,bloc,Flutter,Dart,Bloc,我在flatter中实现bloc模式时遇到问题,我得到一个json,其结构如下: { items: [ { id: int, name: string, price: double }, { id: int, name: string, price: double } ] } 使用felix angelov的示例作为参考,但我无法让它在api_客

我在flatter中实现bloc模式时遇到问题,我得到一个json,其结构如下:

{ 
   items: [
     {
       id: int, 
       name: string, 
       price: double
     }, 
     {
       id: int, 
       name: string, 
       price: double
     }
   ]
 }
使用felix angelov的示例作为参考,但我无法让它在api_客户机包和存储库包之间正常工作。我详细介绍了如何实现这些包

Packages/product_api/src/product_api_client.dart

import 'dart:async';
import 'dart:convert';
import 'package:http/http.dart' as http;
import 'package:product_api/product_api.dart';


class SearchRequestFailure implements Exception {}

class SearchIdRequestFailure implements Exception {}


class ProductApiClient {
  ProductApiClient({http.BasicAuthClient httpClient}) : _httpClient = httpClient ??
      http();

  static const _baseUrl = '';
  final http.BasicAuthClient _httpClient;

  Future<Product> SearchProduct(String request) async {
    final searchRequest = Uri.http(_baseUrl, '/', {
      'q': request});
    final searchResponse = await _httpClient.get(searchRequest);
    if (searchResponse.statusCode != 200) {
      throw SearchRequestFailure();
    }
    final searchJson = jsonDecode(searchResponse.body);
    return searchJson?.isNotEmpty == true ?
    Product.fromJson(searchJson) : null;
  }

  Future<Product> SearchProductId(String request) async {
    final searchRequest = Uri.http(_baseUrl, '/$request');
    final searchResponse = await _httpClient.get(searchRequest);
    if (searchResponse.statusCode != 200) {
      throw SearchIdRequestFailure();
    }
    final searchJson = jsonDecode(searchResponse.body);
    return searchJson?.isNotEmpty == true ?
    Product.fromJson(searchJson) : null;
  }
}

Packages/product_api/src/models/product.dart

import 'package:json_annotation/json_annotation.dart';
import 'package:meta/meta.dart';

part 'product.g.dart';

@JsonSerializable()
class Product {
  const Product({@required this.items});

  final List<Items> items;

  factory Product.fromJson(Map<String, dynamic> json) =>
      _$ProductFromJson(json);
}

@JsonSerializable()
class Items {
  final int id;
  final String name;
  final double price;
  
  Items(
    this.id,
    this.name,
    this.price,
  );

  factory Items.fromJson(Map<String, dynamic> json) => _$ItemsFromJson(json);
}

Packages/repository/src/product_repository.dart

import 'dart:async';

import 'package:product_api/product_api.dart'
    hide Product, Items;
import 'package:product_repository/product_repository.dart';


class productRepository {
  productRepository({productApiClient productApiClient})
      : _productApiClient = productApiClient ?? productApiClient();

  final productApiClient _productApiClient;

  Future<product> searchProduct(String search) async {
    final product = await _productApiClient.searchProduct(search);
    return product(items: List<Items>.from(product.items));
  }

  Future<product> searchProductId(String searchId) async {
    final product = await _productApiClient.searchProductId(searchId);
    return product(items: List<Items>.from(product.items));
  }
}

Packages/repository/src/models/product.dart

import 'package:equatable/equatable.dart';
import 'package:meta/meta.dart';
import 'package:json_annotation/json_annotation.dart';

part 'Product.g.dart';


@JsonSerializable()
class Product extends Equatable {
  const Product({@required this.items});

  final List<Items> items;

  factory Product.fromJson(Map<String, dynamic> json) =>
      _$ProductFromJson(json);

  Map<String, dynamic> toJson() => _$ProductToJson(this);

  @override
  List<Object> get props => [items];
}

@JsonSerializable()
class Items {
  final int id;
  final String name;
  final double price;

  Items(
    this.id,
    this.name,
    this.price,
  );

  factory Items.fromJson(Map<String, dynamic> json) => _$ItemsFromJson(json);
}
我从api中得到了正确的答案,但当我想在项目之间转换时,dart会抱怨我想把梨和苹果混合在一起。。 感谢您的帮助

type 'Items' is not a subtype of type 'Items' where
Items is from package:product_api/src/models/product.dart
Items is from package:product_repository/src/models/product.dart