Flutter 用于集团模式和列表的存储库模型<;对象>;
我在flatter中实现bloc模式时遇到问题,我得到一个json,其结构如下: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_客
{
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