Flutter开发 网络请求

HttpClient(dart自有)

1.get

点击请求按钮获取数据,解析数据获取单词展示到屏幕上。

dart 复制代码
class MyState extends State {
  String info = "暂无数据";

  List<Widget> texts = [];

  @override
  void initState() {
    super.initState();
  }

  @override
  Widget build(BuildContext context) {

    void parseJson(var body) {

      List<Widget> wList = [];
      List data = jsonDecode(body)["data"];
      for (int i = 0; i < data.length; i++) {
        print(data[i]["word"]);
        Text text = Text(data[i]["word"]);
        wList.add(text);
      }
      setState(() {
        texts = wList;
      });
    }

    void getData() async {

      String url =
          "https://7a6396f8-09a1-4ade-b42a-f6db7776fb31.mock.pstmn.io/flutter";
      var httpClient = HttpClient();
      var request = await httpClient.getUrl(Uri.parse(url));
      var response = await request.close();

      var body = await response.transform(utf8.decoder).join();
      if (response.statusCode == 200) {
        setState(() {
          info = body;
        });
        parseJson(body);
      }
    }

    return Scaffold(
      appBar: AppBar(
        title: Text("登录"),
        centerTitle: true,
        backgroundColor: Colors.blue,
        foregroundColor: Colors.white,
      ),
      body: ListView(children: texts),
      floatingActionButton: FloatingActionButton(
        onPressed: () {
          getData();
        },
        child: Text("请求"),
      ),
    );
  }
}

2.post

dart 复制代码
  void postData() async {
    String url = "https://7a6396f8-09a1-4ade-b42a-f6db7776fb31.mock.pstmn.io/q";
    HttpClient httpClient = HttpClient();
    HttpClientRequest request = await httpClient.postUrl(Uri.parse(url));
    // 设置请求头
    request.headers.set('Content-Type', 'application/json; charset=UTF-8');
    Map<String, dynamic> pMap = {"random:": "q"};
    request.write(jsonEncode(pMap));
    HttpClientResponse response = await request.close();
    // 检查响应状态码
    if (response.statusCode == HttpStatus.ok) {
      // 读取响应内容
      final String responseBody = await response.transform(utf8.decoder).join();
      print('POST 响应数据: $responseBody');
    } else {
      print('请求失败,状态码: ${response.statusCode}');
    }
  }

原生http请求库(插件)

导入依赖

yaml 复制代码
dependencies:
  http: ^1.4.0

代码

dart 复制代码
import 'package:http/http.dart' as http;

  void httpGet() async {
    String url =
        "https://7a6396f8-09a1-4ade-b42a-f6db7776fb31.mock.pstmn.io/flutter";
    var result = await http.get(Uri.parse(url));
    if (result.statusCode == HttpStatus.ok) {
      print(result.body.toString());
    }
  }

  //post
  void httpPost(var body) async {
    String url = "https://7a6396f8-09a1-4ade-b42a-f6db7776fb31.mock.pstmn.io/q";
    var result = await http.post(Uri.parse(url), body: body);
    if (result.statusCode == HttpStatus.ok) {
      print(result.body.toString());
    }else{
      print(result.statusCode);
    }
  }

解析xml

xml 复制代码
<books>
    <book id="101">
        <title>XML入门指南</title>
        <author>李四</author>
        <price>39.90</price>
        <publisher>科技出版社</publisher>
    </book>
    <book id="102">
        <title>Web开发实战</title>
        <author>王五</author>
        <price>59.00</price>
        <publisher>电子工业出版社</publisher>
    </book>
</books>
dart 复制代码
      xml.XmlDocument xmlDocument = xml.XmlDocument.parse(result.body);
      Iterable<xml.XmlElement> xmlElement = xmlDocument.findElements("books");

      Iterable<xml.XmlElement> books = xmlElement.single.findAllElements("book");
      books.forEach((element) {

        print(element.findElements("id").single.innerText);
        print(element.findElements("title").single.innerText);
      },);

I/flutter ( 3477): 101
I/flutter ( 3477): XML入门指南
I/flutter ( 3477): 102
I/flutter ( 3477): Web开发实战
相关推荐
猫林老师3 小时前
Flutter for HarmonyOS 开发指南(一):环境搭建与项目创建
flutter·华为·harmonyos
TDengine (老段)6 小时前
TDengine 字符串函数 CONCAT_WS 用户手册
android·大数据·数据库·时序数据库·tdengine·涛思数据
会跑的兔子6 小时前
Android 16 Kotlin协程 第一部分
android·开发语言·kotlin
Meteors.7 小时前
安卓进阶——OpenGL ES
android
椰羊sqrt9 小时前
CVE-2025-4334 深度分析:WordPress wp-registration 插件权限提升漏洞
android·开发语言·okhttp·网络安全
2501_916008899 小时前
金融类 App 加密加固方法,多工具组合的工程化实践(金融级别/IPA 加固/无源码落地/Ipa Guard + 流水线)
android·ios·金融·小程序·uni-app·iphone·webview
sun0077009 小时前
Android设备推送traceroute命令
android
来来走走9 小时前
Android开发(Kotlin) 高阶函数、内联函数
android·开发语言·kotlin
2501_915921439 小时前
Fastlane 结合 开心上架(Appuploader)命令行版本实现跨平台上传发布 iOS App 免 Mac 自动化上架实战全解析
android·macos·ios·小程序·uni-app·自动化·iphone
雨白10 小时前
重识 Java IO、NIO 与 OkIO
android·java