Flutter学习9 - http 中 get/post 请求示例

1、配置 http

pubspec.yaml

dependencies:http:  ^0.13.4flutter:sdk: flutter
  • http 库最新插件版本查看:https://pub.dev/packages/http
  • 不一定要用最新版本 http,要使用项目所能支持的版本

.dart

import 'package:http/http.dart' as http;

2、示例

(1)工具使用 - postman

  • 可以使用 postman 插件中的示例来测试 get/post 请求

在这里插入图片描述

(2)代码实现示例

  • 点击按钮,发起 Get/Post 请求,并将请求结果展示到界面上

在这里插入图片描述

http_page.dart

import 'dart:convert';
import 'dart:typed_data';import 'package:flutter/material.dart';
import 'package:http/http.dart' as http;class HttpDemo extends StatefulWidget {const HttpDemo({super.key});State<HttpDemo> createState() => _HttpDemoState();
}class _HttpDemoState extends State<HttpDemo> {//展示请求结果var resultShow = "";Widget build(BuildContext context) {return Scaffold(appBar: AppBar(title: const Text("Http 的 post 请求"),),body: Column(children: [Center(child: _httpGetButton(),),//post 请求按钮 - formCenter(child: _httpPostFormButton(),),//post 请求按钮 - jsonCenter(child: _httpPostJsonButton(),),Row(children: [Expanded(child: Text('请求结果:\n $resultShow',textAlign: TextAlign.left,)),],),],),);}//get 按钮_httpGetButton() {return ElevatedButton(onPressed: _doGet, child: const Text('发起 Get 请求'));}//post 按钮 - form_httpPostFormButton() {return ElevatedButton(onPressed: _doFormPost, child: const Text('发起 post 请求 - form'));}//post 按钮 - json_httpPostJsonButton() {return ElevatedButton(onPressed: _doJsonPost, child: const Text('发起 post 请求 - json'));}// utf8 解码_decodeUtf8(String responseBody) {var bytes = Uint8List.fromList(responseBody.codeUnits);String decodeString = utf8.decode(bytes);var decodeMap = json.decode(decodeString);return decodeMap;}//请求成功_success(http.Response response) {setState(() {//返回结果的汉字用了 utf8 编码,所以需要对结果进行 utf8 解码// resultShow = '请求成功:${_decodeUtf8(response.body)}';//返回结果的汉字未用 utf8 编码,所以无需解码resultShow = '请求成功:${response.body}';});}//请求失败_failed(http.Response response) {setState(() {resultShow ="请求失败:errorCode: ${response.statusCode}   errorMessage: ${response.body}";});}//发送 Get 请求_doGet() async {var url =Uri.parse('https://cx.shouji.360.cn/phonearea.php?number=17688888888');var response = await http.get(url);if (response.statusCode == 200) {//请求成功_success(response);} else {//请求失败_failed(response);}}//发送 Post 请求 - form_doFormPost() async {var url = Uri.parse('http://api.crap.cn/visitor/example/post.do');var params = {'param': '测试22','email': 'crap.cn@gmail.com','555': '我'}; //如果传 Map 类型,必须是 Map<String, String>,否则会解析报错var response =await http.post(url, body: params); //默认是 form 类型,所以无需设置 content - typeif (response.statusCode == 200) {//请求成功_success(response);} else {//请求失败_failed(response);}}//发送 Post 请求 - json_doJsonPost() async {var url = Uri.parse('http://api.crap.cn/visitor/example/json.do');var params = {"id": "8989-dddvdg","name": "文章标题-JSON格式参数演示","brief": "快速入门json参数","category": "分类"};var json = jsonEncode(params);var response = await http.post(url, body: json, headers: {'content-type': 'application/json'}); //设置content-type为application/jsonif (response.statusCode == 200) {//请求成功_success(response);} else {//请求失败_failed(response);}}
}

main.dart

import 'package:flutter/material.dart';import 'http_page.dart';void main() {runApp(const MyApp());
}class MyApp extends StatelessWidget {const MyApp({super.key});Widget build(BuildContext context) {return MaterialApp(title: 'Leon Demo',theme: ThemeData(primarySwatch: Colors.blue,),home: const HttpDemo(),);}
}

(3)get 请求补充

在这里插入图片描述

  • 通过以上示例可知,get 请求的 url 为:https://cx.shouji.360.cn/phonearea.php?number=17688888888
  • 因为返回结果的汉字用了 utf8 编码,所以需要对结果进行 utf8 解码

发起请求

  //发送 Get 请求_doGet() async {var url =Uri.parse('https://cx.shouji.360.cn/phonearea.php?number=17688888888');var response = await http.get(url);if (response.statusCode == 200) {//请求成功_success(response);} else {//请求失败_failed(response);}}

处理请求结果

  //请求成功_success(http.Response response) {setState(() {resultShow = '请求成功:${_decodeUtf8(response.body)}';});}//请求失败_failed(http.Response response) {setState(() {resultShow ="请求失败:errorCode: ${response.statusCode}   errorMessage: ${response.body}";});}

uf8 解码

  // utf8 解码_decodeUtf8(String responseBody) {var bytes = Uint8List.fromList(responseBody.codeUnits);String decodeString = utf8.decode(bytes);var decodeMap = json.decode(decodeString);return decodeMap;}

(4)post 请求补充 - form

在这里插入图片描述

  • url:http://api.crap.cn/visitor/example/post.do
  • form:{ ‘param’: ‘测试22’, ‘email’: ‘crap.cn@gmail.com’, ‘555’: ‘我’ }

发起请求

  //发送 Post 请求 - form_doFormPost() async {var url = Uri.parse('http://api.crap.cn/visitor/example/post.do');var params = {'param': '测试22','email': 'crap.cn@gmail.com','555': '我'}; //如果传 Map 类型,必须是 Map<String, String>,否则会解析报错var response =await http.post(url, body: params); //默认是 form 类型,所以无需设置 content - typeif (response.statusCode == 200) {//请求成功_success(response);} else {//请求失败_failed(response);}}

处理请求结果

  //请求成功_success(http.Response response) {setState(() {//返回结果的汉字用了 utf8 编码,所以需要对结果进行 utf8 解码// resultShow = '请求成功:${_decodeUtf8(response.body)}';//返回结果的汉字未用 utf8 编码,所以无需解码resultShow = '请求成功:${response.body}';});}//请求失败_failed(http.Response response) {setState(() {resultShow ="请求失败:errorCode: ${response.statusCode}   errorMessage: ${response.body}";});}
  • 返回结果的汉字未用 utf8 编码,所以无需解码

(5)post 请求补充 - json

在这里插入图片描述

  • url:http://api.crap.cn/visitor/example/json.do
  • json:{ “id”:“8989-dddvdg”, “name”:“文章标题-JSON格式参数演示”, “brief”:“快速入门json参数”, “category”:“分类” }

发起请求

  //发送 Post 请求 - json_doJsonPost() async {var url = Uri.parse('http://api.crap.cn/visitor/example/json.do');var params = {"id": "8989-dddvdg","name": "文章标题-JSON格式参数演示","brief": "快速入门json参数","category": "分类"};var json = jsonEncode(params);var response = await http.post(url, body: json, headers: {'content-type': 'application/json'}); //设置content-type为application/jsonif (response.statusCode == 200) {//请求成功_success(response);} else {//请求失败_failed(response);}}

处理请求结果

  //请求成功_success(http.Response response) {setState(() {//返回结果的汉字用了 utf8 编码,所以需要对结果进行 utf8 解码// resultShow = '请求成功:${_decodeUtf8(response.body)}';//返回结果的汉字未用 utf8 编码,所以无需解码resultShow = '请求成功:${response.body}';});}//请求失败_failed(http.Response response) {setState(() {resultShow ="请求失败:errorCode: ${response.statusCode}   errorMessage: ${response.body}";});}

3、补充

  • 快捷键 stf 创建有状态 widget
//输入字母 stf
class  extends StatefulWidget {const ({super.key});State<> createState() => _State();
}class _State extends State<> {Widget build(BuildContext context) {return const Placeholder();}
}
  • 给类命名,并导入包
import 'package:flutter/cupertino.dart';class HttpGetDemo  extends StatefulWidget {const HttpGetDemo({super.key});State<HttpGetDemo> createState() => _State();
}class _State extends State<HttpGetDemo> {Widget build(BuildContext context) {return const Placeholder();}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/272216.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【粉丝福利第四期】:《低代码平台开发实践:基于React》(文末送书)

文章目录 前言一、React与低代码平台的结合优势二、基于React的低代码平台开发挑战三、基于React的低代码平台开发实践四、未来展望《低代码平台开发实践&#xff1a;基于React》五、粉丝福利 前言 随着数字化转型的深入&#xff0c;企业对应用开发的效率和灵活性要求越来越高…

【C++】手撕string类(超实用!)

前言 一、标准库中的string类 1.1 string类介绍 1.2 string的常用接口 1.2.1 常用的构造函数 1.2.2 容量操作接口 &#xff08;1&#xff09;size &#xff08;2&#xff09;capacity &#xff08;3&#xff09;empty &#xff08;4&#xff09;clear &#xff08…

gRPC-第二代rpc服务

在如今云原生技术的大环境下&#xff0c;rpc服务作为最重要的互联网技术&#xff0c;蓬勃发展&#xff0c;诞生了许多知名基于rpc协议的框架&#xff0c;其中就有本文的主角gRPC技术。 一款高性能、开源的通用rpc框架 作者作为一名在JD实习的Cpper&#xff0c;经过一段时间的学…

(vue)适合后台管理系统开发的前端框架

(vue)适合后台管理系统开发的前端框架 1、D2admin 开源地址&#xff1a;https://github.com/d2-projects/d2-admin 文档地址&#xff1a;https://d2.pub/zh/doc/d2-admin/ 效果预览&#xff1a;https://d2.pub/d2-admin/preview/#/index 开源协议&#xff1a;MIT 2、vue-el…

计算机网络——概述

计算机网络——概述 计算机网络的定义互连网&#xff08;internet&#xff09;互联网&#xff08;Internet&#xff09;互联网基础结构发展的三个阶段第一个阶段——APPANET第二阶段——商业化和三级架构第三阶段——全球范围多层次的ISP结构 ISP的作用终端互联网的组成边缘部分…

嵌入式学习36-TCP要点及http协议

TCP发送文件的粘包问题 1. 例&#xff1a; 发端 1.flv-------->收端 1.flv csfga 2.解决 1. sleep&#xff08;1&#xff09; 延时发送 2.自…

服务器又被挖矿记录

写在前面 23年11月的时候我写过一篇记录服务器被挖矿的情况&#xff0c;点我查看。当时是在桌面看到了bash进程CPU占用异常发现了服务器被挖矿。 而过了几个月没想到又被攻击&#xff0c;这次比上次攻击手段要更高明点&#xff0c;在这记录下吧。 发现过程 服务器用的是4090…

【文档智能】再谈基于Transformer架构的文档智能理解方法论和相关数据集

前言 文档的智能解析与理解成为为知识管理的关键环节。特别是在处理扫描文档时&#xff0c;如何有效地理解和提取表单信息&#xff0c;成为了一个具有挑战性的问题。扫描文档的复杂性&#xff0c;包括其结构的多样性、非文本元素的融合以及手写与印刷内容的混合&#xff0c;都…

ai语音克隆:用AI大模型开发点亮你的创作天地!

在当今快速发展的科技时代&#xff0c;人工智能技术已经深入到我们生活的方方面面。AI语音克隆作为其中的一种应用&#xff0c;正在逐渐走进人们的视野&#xff0c;为人们的创作提供了全新的可能性。 人类创作的过程往往是一个灵感迸发、思绪飞扬的过程。但有时候&#xff0c;…

实现QT中qDebug()的日志重定向

背景&#xff1a; 在项目开发过程中&#xff0c;为了方便分析和排查问题&#xff0c;我们需要将原本输出到控制台的调试信息写入日志文件&#xff0c;进行持久化存储&#xff0c;还可以实现日志分级等。 日志输出格式&#xff1a; 我们需要的格式包括以下内容&#xff1a; 1.…

eclipse搭建java web项目

准备条件 eclipsejdk1.8 &#xff08;配置jdk环境&#xff09;apache-tomcat-8.5.97&#xff08;记住安装位置&#xff09; 一 点击完成 开始创建javaweb项目 import java.io.IOException; import java.io.PrintWriter;import javax.servlet.ServletException; import javax.s…

Neo4j安装 Linux:CentOS、openEuler 适配langchain应用RAG+知识图谱开发 适配昇腾910B

目录 Neo4j下载上传至服务器后进行解压运行安装JAVA再次运行在windows端打开网页导入数据 Neo4j下载 进入Neo4j官网下载页面 向下滑动找到 Graph Database Self-Managed 选择 社区版&#xff08;COMMUNITY&#xff09; 选择 Linux / Mac Executable Neo4j 5.17.0 (tar) 单机下…

Android Studio编译及调试知识

文章目录 Android Studio编译kotlin项目Android Studio编译Java和kotlin混合项目的过程gradle打印详细错误信息&#xff0c;类似这种工具的使用Android apk 从你的代码到APK打包的过程&#xff0c;APK安装到你的Android手机上的过程&#xff0c;最后安装好的形态&#xff0c;以…

【Kotlin】类和对象

1 前言 Kotlin 是面向对象编程语言&#xff0c;与 Java 语言类似&#xff0c;都有类、对象、属性、构造函数、成员函数&#xff0c;都有封装、继承、多态三大特性&#xff0c;不同点如下。 Java 有静态&#xff08;static&#xff09;代码块&#xff0c;Kotlin 没有&#xff1…

Python算法题集_搜索二维矩阵

Python算法题集_搜索二维矩阵 题74&#xff1a;搜索二维矩阵1. 示例说明2. 题目解析- 题意分解- 优化思路- 测量工具 3. 代码展开1) 标准求解【矩阵展开为列表二分法】2) 改进版一【行*列区间二分法】3) 改进版二【第三方模块】 4. 最优算法5. 相关资源 本文为Python算法题集之…

二分/树上第k短路,LeetCode2386. 找出数组的第 K 大和

一、题目 1、题目描述 给你一个整数数组 nums 和一个 正 整数 k 。你可以选择数组的任一 子序列 并且对其全部元素求和。 数组的 第 k 大和 定义为&#xff1a;可以获得的第 k 个 最大 子序列和&#xff08;子序列和允许出现重复&#xff09; 返回数组的 第 k 大和 。 子序列是…

OpenAI (ChatGPT)中国免费试用地址

GitHub - click33/chatgpt---mirror-station-summary: 汇总所有 chatgpt 镜像站&#xff0c;免费、付费、多模态、国内外大模型汇总等等 持续更新中…… 个人能力有限&#xff0c;搜集到的不多&#xff0c;求大家多多贡献啊&#xff01;众人拾柴火焰高&#xff01;汇总所有 cha…

如何转行成为产品经理?

转行NPDP也是很合适的一条发展路径&#xff0c;之后从事新产品开发相关工作~ 一、什么是NPDP&#xff1f; NPDP 是产品经理国际资格认证&#xff0c;美国产品开发与管理协会&#xff08;PDMA&#xff09;发起的&#xff0c;是目前国际公认的唯一的新产品开发专业认证&#xff…

arm架构服务器使用Virtual Machine Manager安装的kylin v10虚拟机

本文中使用Virtual Machine Manager安装kylin v10的虚拟机 新建虚拟机 新建虚拟机 选择镜像&#xff0c;下一步 设置内存和CPU&#xff0c;下一步 选择或创建自定义存储&#xff08;默认存储位置的磁盘空间可能不够用&#xff09; 点击管理&#xff0c;打开选择存储卷页…

15. C++泛型与符号重载

【泛型编程】 若多组类型不同的数据需要使用相同的代码处理&#xff0c;在C语言中需要编写多组代码分别处理&#xff0c;这样做显然太过繁琐&#xff0c;C增加了虚拟类型&#xff0c;使用虚拟类型可以实现一组代码处理多种类型的数据。 虚拟类型是暂时不确定的数据类型&#…