json - 如何在 Flutter 中使用改造
问题描述
我正在尝试使用 Flutter 中的改造进行 API 调用我已经在 pubspec.yaml 中包含以下库
dependencies:
retrofit: ^1.3.4+1
json_annotation: ^3.1.1
dio: ^3.0.10
logger: ^0.9.4
built_value: ^7.1.0
dev_dependencies:
retrofit_generator: ^1.4.1
build_runner: ^1.10.0
json_serializable: ^3.5.0
built_value_generator: ^7.1.0
并创建了以下类 api_client.dart
@RestApi(baseUrl: "https://gorest.co.in/public-api/")
abstract class ApiClient {
factory ApiClient(Dio dio, {String baseUrl}) = _ApiClient;
}
我还生成了 api_client.g.dart
part of 'api_client.dart';
// **************************************************************************
// RetrofitGenerator
// **************************************************************************
class _ApiClient implements ApiClient {
_ApiClient(this._dio, {this.baseUrl}) {
ArgumentError.checkNotNull(_dio, '_dio');
baseUrl ??= 'https://gorest.co.in/public-api/';
}
final Dio _dio;
String baseUrl;
}
就是这样,我被卡住了。现在我不知道如何进行 Get 和 Post 调用,有人可以帮我解决这个问题
- 如何发出 Get 请求?
- 如何发出 Post 请求以及如何为 body 提供值?
- 如何处理来自 API 的响应?
- 如何使用基本身份验证?
解决方案
在颤振中进行改造:
项目依赖:
dependencies:
flutter:
sdk: flutter
cupertino_icons: ^1.0.2
dio: ^4.0.0
json_serializable: ^4.1.4
retrofit: ^2.0.0
logger: ^1.0.0
json_annotation: ^4.0.1
retrofit_generator: ^2.0.0+3
build_runner: ^2.0.5
ApiRequest.dart 文件
@RestApi(baseUrl: "https://gorest.co.in/public-api/")
abstract class ApiRequest{
factory ApiRequest(Dio dio,{required String baseUrl}) =_ApiRequest;
@GET("/users")
Future<ResponseData> getUsers();
}
apirequest.g.dart 文件代码:
part of 'apirequest.dart';
class _ApiRequest implements ApiRequest {
_ApiRequest(this._dio, {required this.baseUrl}) {
ArgumentError.checkNotNull(_dio, '_dio');
this.baseUrl = 'https://gorest.co.in/public-api/';
}
final Dio _dio;
String baseUrl;
@override
getUsers() async {
const _extra = <String, dynamic>{};
final queryParameters = <String, dynamic>{};
final _data = <String, dynamic>{};
var options=Options(
receiveTimeout: 1000,sendTimeout: 1000,
method: 'GET',
headers: <String, dynamic>{},
extra: _extra,
);
final _result = await _dio.request('$baseUrl/users',
queryParameters: queryParameters,
options: options,
data: _data);
final value = ResponseData.fromJson(_result.data);
return value;
}
}
我有一个解决方案,在 Github 上更新了完整的源代码。您可以通过我的 Github 帐户链接获取代码,请点击此处。
推荐阅读
- android - 如何使 Jetpack compose 元素出现在 android 的键盘顶部?
- javascript - 如何仅从左侧减小此 SVG 的宽度 其他应保持静态
- youtube - 我们可以在 YouTube 频道上上传网络系列并更改音频吗?是“OK”还是会有任何冒犯?
- php - 为什么我在 Laravel 5.4 中启用路由组时收到“NotFoundHttpException”?
- sql - 从 Visual Studio 本地服务器创建 DSN 文件
- sqlalchemy - 使用 Apscheduler 的 sqlalchemy QueuePool 行为
- reactjs - 如何在 React 中制作一个快速可靠的图库页面?
- javascript - 从 p 标签中获取点击的字母
- shell - Unix在子目录中使用SED而不修改子目录的时间戳
- reactjs - 导入路径不能以“.ts”扩展名结尾。考虑导入'src/theme.js'