当前位置: 首页 > news >正文

网站空间怎么更换莱芜在线论坛最新消息

网站空间怎么更换,莱芜在线论坛最新消息,环球资源平台的优势,wordpress搭建it博客Flutter网络请求:Retrofit使用指南 Retrofit是Android平台上广受欢迎的HTTP客户端库,在Flutter中可以通过retrofit包实现类似的网络请求功能。下面是完整的使用指南: 1. 添加依赖 首先在pubspec.yaml中添加所需依赖: dependencies…

Flutter网络请求:Retrofit使用指南

Retrofit是Android平台上广受欢迎的HTTP客户端库,在Flutter中可以通过retrofit包实现类似的网络请求功能。下面是完整的使用指南:

1. 添加依赖

首先在pubspec.yaml中添加所需依赖:

dependencies:retrofit: ^4.0.1dio: ^5.3.2json_annotation: ^4.8.1dev_dependencies:retrofit_generator: ^4.0.1build_runner: ^2.4.4

2. 创建API接口

定义一个抽象类来描述你的API接口:

import 'package:retrofit/retrofit.dart';
import 'package:dio/dio.dart';
import 'package:json_annotation/json_annotation.dart';part 'api_service.g.dart';(baseUrl: "https://jsonplaceholder.typicode.com/")
abstract class ApiService {factory ApiService(Dio dio, {String baseUrl}) = _ApiService;("/posts")Future<List<Post>> getPosts();("/posts/{id}")Future<Post> getPost(("id") int id);("/posts")Future<Post> createPost(() Post post);
}()
class Post {final int id;final String title;final String body;final int userId;Post({required this.id,required this.title,required this.body,required this.userId,});factory Post.fromJson(Map<String, dynamic> json) => _$PostFromJson(json);Map<String, dynamic> toJson() => _$PostToJson(this);
}

3. 生成代码

运行以下命令生成实现代码:

flutter pub run build_runner build

这会生成api_service.g.dart文件。

4. 使用API服务

void main() async {final dio = Dio();final apiService = ApiService(dio);try {// 获取所有帖子final posts = await apiService.getPosts();print(posts);// 获取单个帖子final post = await apiService.getPost(1);print(post);// 创建新帖子final newPost = await apiService.createPost(Post(id: 101, title: 'New Post', body: 'Content', userId: 1),);print(newPost);} catch (e) {print(e);}
}

5. 高级功能

添加请求头

("/posts")
({'Content-Type': 'application/json'})
Future<List<Post>> getPosts();

查询参数

("/posts")
Future<List<Post>> getPostsByUser(("userId") int userId);

表单数据

("/login")
()
Future<User> login(("username") String username,("password") String password,
);

拦截器

final dio = Dio()..interceptors.add(InterceptorsWrapper(onRequest: (options, handler) {// 添加认证tokenoptions.headers['Authorization'] = 'Bearer token';return handler.next(options);},onError: (DioError e, handler) {// 错误处理return handler.next(e);},),);

6. 完整配置示例

import 'package:dio/dio.dart';
import 'package:retrofit/retrofit.dart';part 'api_service.g.dart';(baseUrl: "https://api.example.com/v1/")
abstract class ApiService {factory ApiService(Dio dio, {String baseUrl}) {dio.options = BaseOptions(receiveTimeout: const Duration(seconds: 30),connectTimeout: const Duration(seconds: 30),);return _ApiService(dio, baseUrl: baseUrl);}("users")Future<List<User>> getUsers();("users/{id}")Future<User> getUser(("id") String id);("users")Future<User> createUser(() User user);("users/{id}")Future<User> updateUser(("id") String id, () User user);("users/{id}")Future<void> deleteUser(("id") String id);
}

7. 错误处理

try {final response = await apiService.getUser('123');
} on DioError catch (e) {if (e.response != null) {print(e.response?.statusCode);print(e.response?.data);} else {print(e.message);}
}

8. 测试API服务

test('getPosts returns List<Post>', () async {final dio = DioAdapterMock();final apiService = ApiService(dio);when(dio.get('/posts')).thenAnswer((_) async => Response(data: [{'id': 1, 'title': 'Test', 'body': 'Content', 'userId': 1}],statusCode: 200,requestOptions: RequestOptions(path: '/posts'),));final posts = await apiService.getPosts();expect(posts, isA<List<Post>>());expect(posts.first.title, 'Test');
});

Retrofit为Flutter提供了类型安全的HTTP客户端实现,通过代码生成简化了网络请求的编写,同时保持了Dio的强大功能。

http://www.dtcms.com/a/490750.html

相关文章:

  • 龙岩做网站哪家好如何绑定网站域名
  • [Linux系统编程——Lesson14.基础IO:系统文件IO]
  • golang的一些技巧
  • 高性能 Go 语言带 TTL 的内存缓存实现:精确过期、自动刷新、并发安全
  • ML.NET机器学习框架基本流程介绍
  • Day32_【 NLP _2.RNN及其变体 _(2) LSTM】
  • 重庆建站模板代理怎么做p2p网站
  • iis配置网站是什么网站建设方案书阿里云模板
  • 【计算机视觉】SAM 3 技术深潜:从“分割万物”到“理解概念”的范式转移
  • 「深度学习笔记3」概率论深度解析:从不确定性到人工智能的桥梁
  • 齐河专业企业网站建设做网站引流到天猫
  • 技术贴!【谷歌浏览器】实用工具推荐之谷歌浏览器(Google Chrome)离线纯净版完全安装指南:告别广告与捆绑骚扰
  • Centos7 自建Umami-开源免费的网站访问流量统计分析平台
  • 申威架构安装Java 11 RPM包教程:java-11.0.7-swjdk-11u-8.ky10.sw_64.rpm详细安装步骤
  • 【STM32项目开源】基于STM32的人体健康监测系统
  • 一个做礼品的网站国外网站用什么dns
  • 东莞 网站建设网站定制制作公司
  • Python 线程 类比c++【python】
  • 舆情监测的底层逻辑与技术方法探析
  • 谈谈redis的持久化
  • 网站建设进度深圳网站建设制作营销
  • SSM高校学生社团管理系统n4pcu(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
  • 强化学习_Paper_2000_Eligibility Traces for Off-Policy Policy Evaluation
  • Kubernetes秘钥与配置管理全解析
  • Python 匿名函数、map、filter、sort 用法详解
  • wordpress 4.0 伪静态seo优化一般优化哪些方面
  • 上海自助模板建站wordpress被黑
  • 数据可视化延迟实时大屏优化:WebSocket增量传输+Canvas渲染数据延迟压缩至300ms
  • TimerFd Epoll
  • 百度网盘怎么实现不限速的高速下载?