Flutter网络请求插件httper的使用

Flutter网络请求插件httper的使用

httper 是一个 Dart 包,可以帮助你轻松使用 http 库。它提供了泛型模型和回调函数,用于处理 HTTP 请求的不同状态码(如 200、400、401、404、500、Error 和 Others)。

特性

  • 支持的方法:GET、POST、PUT、DELETE、POST 文件
  • 泛型模型
  • 支持的回调函数:200、400、401、404、500、Error 和 Others

使用方法

以下是一个完整的示例,展示了如何使用 httper 插件进行网络请求。

import 'dart:convert';
import 'package:httper/httper.dart';

void main() async {
  // 发起网络请求并处理响应
  var result = await TestApi.get(
    callback200: (t) async => print('$t'), // 处理状态码为200的情况
    callbackOther: (t, str) async => print('t: $t, error: $str'), // 处理其他情况
  );
  print('$result'); // 打印最终结果
}

/*
服务器返回原始 JSON 数据:

{
    "code": 200,
    "data": {
        "id": 1000,
        "name": "your-name"
    }
}
*/

抽象类 TestApi

abstract class TestApi {
  static Future<Model<Test>> get({
    Callback200<Test>? callback200,
    Callback404<Test>? callback404,
    CallbackOther<Test>? callbackOther,
  }) async =>
      await Http.get(
        '/api/echo', // 请求的URL
        Test.fromMap, // 将 JSON 转换为模型对象的工厂方法
        callback200: callback200,
        callback404: callback404,
        callbackOther: callbackOther,
      );
}

模型类 Test

class Test {
  final int id;
  final String name;

  const Test(this.id, this.name);

  factory Test.instance() {
    return Test.fromMap({});
  }

  factory Test.fromMap(Map<String, dynamic> m) {
    return Test(
      m.containsKey("id") && m["id"] != null ? m["id"] : 0,
      m.containsKey("name") && m["name"] != null ? m["name"] : "",
    );
  }

  Map<String, dynamic> toMap() {
    return {
      "id": id,
      "name": name,
    };
  }

  Map<String, dynamic> toOriginalMap() {
    return {
      "id": id,
      "name": name,
    };
  }

  String toJson() {
    return jsonEncode(toMap());
  }

  String toOriginalJson() {
    return jsonEncode(toOriginalMap());
  }

  [@override](/user/override)
  String toString() {
    return '{id: $id, name: $name}';
  }
}

更多关于Flutter网络请求插件httper的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter网络请求插件httper的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是一个关于如何在Flutter中使用http插件进行网络请求的示例代码。虽然你提到的是httper,但我猜测你可能指的是http包,因为Flutter社区中广泛使用的是http包来进行网络请求。如果httper是一个特定的包,你可能需要查找其官方文档,但以下代码是基于http包的。

首先,你需要在你的pubspec.yaml文件中添加http依赖:

dependencies:
  flutter:
    sdk: flutter
  http: ^0.13.3  # 请检查最新版本号并替换

然后运行flutter pub get来安装依赖。

接下来是一个简单的示例,展示如何使用http包进行GET和POST请求:

import 'package:flutter/material.dart';
import 'package:http/http.dart' as http;
import 'dart:convert';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  String _responseData = '';

  void _makeGetRequest() async {
    var url = 'https://jsonplaceholder.typicode.com/posts/1';
    var response = await http.get(Uri.parse(url));

    if (response.statusCode == 200) {
      // 如果服务器返回状态码为200,表示请求成功
      setState(() {
        _responseData = jsonDecode(response.body)['title'];
      });
    } else {
      // 处理请求错误
      throw Exception('Failed to load post');
    }
  }

  void _makePostRequest() async {
    var url = 'https://jsonplaceholder.typicode.com/posts';
    var body = jsonEncode(<String, dynamic>{
      'title': 'foo',
      'body': 'bar',
      'userId': 1,
    });

    var response = await http.post(Uri.parse(url),
        headers: <String, String>{
          'Content-Type': 'application/json',
        },
        body: body);

    if (response.statusCode == 201) {
      // 如果服务器返回状态码为201,表示创建成功
      setState(() {
        _responseData = 'Post created successfully';
      });
    } else {
      // 处理请求错误
      throw Exception('Failed to create post');
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Flutter Network Request Demo'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text(
              'Response Data: $_responseData',
            ),
            SizedBox(height: 20),
            ElevatedButton(
              onPressed: _makeGetRequest,
              child: Text('Make GET Request'),
            ),
            SizedBox(height: 10),
            ElevatedButton(
              onPressed: _makePostRequest,
              child: Text('Make POST Request'),
            ),
          ],
        ),
      ),
    );
  }
}

在这个示例中:

  1. 我们首先导入了必要的包,包括flutter/material.dart用于UI构建和http/http.dart用于网络请求。
  2. MyApp类中,我们定义了应用的入口。
  3. MyHomePage类中,我们定义了两个方法_makeGetRequest_makePostRequest,分别用于发送GET和POST请求。
  4. GET请求使用http.get方法,POST请求使用http.post方法,并设置了请求头和请求体(对于POST请求)。
  5. 根据服务器的响应状态码,我们更新UI或抛出异常。

这个示例提供了一个基础框架,你可以根据需要进行扩展和修改。如果你确实是在寻找httper插件的具体用法,请确保你安装了正确的包,并查阅其官方文档或示例代码。

回到顶部