Flutter使用第三方Dio库进行简单的网络请求封装;Flutter网络请求使用

// 新建一个以http_request.dart命名的dart文件
// 引入
import 'package:dio/dio.dart';
// 新建一个以config.dart命名的dart文件
import 'package:helloflutter/service/config.dart';
import 'dart:core';

class HttpRequest {
  /**
   * --使用Dio库进行网络请求的初始化设置
   * --BaseOptions是Dio库中的一个类,用于配置基本的请求选项
   */
  static final BaseOptions baseOptions = BaseOptions(
      baseUrl: HttpConfig.baseURL,
      connectTimeout: Duration(seconds: HttpConfig.timeout));
  static final Dio dio = Dio(baseOptions);

  /**
   * --params为命名可选参数,但是值却为null
   * --在声明params时指定了它的默认值为null,而Dart不允许将null赋给非可空的参数,这就导致了这个错误
   * --1:移除默认值 原:Map<String, dynamic> params   现:Map<String, dynamic>? params
   * --2:提供非空的默认值:Map<String, dynamic> params = const {}
   */
  static Future<T> request<T>(String url,
      {String method = "get", Map<String, dynamic>? params}) async {
    /**
     * 创建单独个性化配置
     */
    final options = Options(method: method);
    /**
     * 发送网路请求
     */
    try {
      Response response = await dio.request(url, queryParameters: params, options: options);
      return response.data;
    } on DioError catch (error) {
      /**
       * return 错误
       */
      return Future.error(error);
    }
  }
}
// 新建一个以config.dart命名的dart文件
class HttpConfig {
  static const String baseURL = "https://httpbin.org";
  static const int timeout = 5000;
}
// main.dart文件测试

import 'dart:io';

import 'package:flutter/material.dart';
import 'package:dio/dio.dart';
import 'package:helloflutter/sertvice/http_request.dart';

main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      debugShowCheckedModeBanner: false,
      home: HomePage(),
    );
  }
}

class HomePage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text("基础模板"),
      ),
      body: HomeContent(),
    );
  }
}

class HomeContent extends StatefulWidget {

  @override
  State<HomeContent> createState() => _HomeContentState();
}

class _HomeContentState extends State<HomeContent> {

  @override
  void initState() {
    // TODO: implement initState
    super.initState();

    // 原始请求
    // final dio = Dio();
    // dio.get('https://httpbin.org/get').then((value) => {
    //   print('value:${value}')
    // });
    // dio.post('https://httpbin.org/post').then((value) => {
    //   print('value:${value}')
    // });

    // 新封装请求
    HttpRequest.request("https://httpbin.org/get",params:{"name":"jack"}).then((res){
      print(res);
    });
  }


  @override
  Widget build(BuildContext context) {
    return Text("网络请求封装");
  }
}

最后面进行Restart 调用成功

学习记录20231016

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

陈柱全

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值