Flutter数据获取插件fetchx的使用

发布于 1周前 作者 ionicwang 来自 Flutter

Flutter数据获取插件fetchx的使用

Fetchx 是一个简单、快速且安全的 Dart HTTP 客户端。它通过扩展允许使用类似 URL 的字符串来发起 HTTP 请求。

目录

特点

  • GET 请求
  • POST 请求
  • PUT 请求
  • DELETE 请求
  • PATCH 请求

用法

添加依赖

首先,在 pubspec.yaml 文件中添加 fetchx 依赖:

dependencies:
  fetchx: ^0.0.5

然后导入包:

import 'package:fetchx/fetchx.dart';

GET 请求

final response = await "https://jsonplaceholder.typicode.com/posts/1".get();
print(response.json);

POST 请求

final response = await "https://jsonplaceholder.typicode.com/posts".post({
  "title": "foo",
  "body": "bar",
  "userId": 1
});
print(response.json);

PUT 请求

final response = await "https://jsonplaceholder.typicode.com/posts/1".put({
  "title": "foo",
  "body": "bar",
  "userId": 1
});
print(response.json);

DELETE 请求

final response = await "https://jsonplaceholder.typicode.com/posts/1".delete();
print(response.statusCode);

PATCH 请求

final response = await "https://jsonplaceholder.typicode.com/posts/1".patch({
  "title": "foo"
});
print(response.json);

实验性功能

这些功能仍在试验阶段,未来可能会有所变化。欢迎提供反馈以改进该包。

模型转换

class User extends BaseModel {
  final int? id;
  final String? name;

  User({this.id, this.name});

  [@override](/user/override)
  User fromJson(Map<String, dynamic> json) => User(
        id: json["id"],
        name: json["name"],
      );
}

final response = await "https://jsonplaceholder.typicode.com/users/1".get().to<User>(() => User());
print(response.name);

缓存

final response = await "https://jsonplaceholder.typicode.com/posts/1".get().cache();
print(response.json);

示例代码

以下是一个完整的示例 demo,展示了如何使用 Fetchx 进行各种 HTTP 请求:

import 'package:fetchx/fetchx.dart';

const String _baseUrl = "https://jsonplaceholder.typicode.com/";

void main() async {
  // 简单的 GET 请求
  final response = await _baseUrl.get(path: "users/1");
  print(response.json);

  // 简单的 POST 请求
  final response2 = await _baseUrl.post(
    {"name": "John Doe"},
    path: "users",
  );
  print(response2.json);

  // 简单的 PUT 请求
  final response3 = await _baseUrl.put(
    {"name": "John Doe"},
    path: "users/1",
  );
  print(response3.json);

  // 简单的 PATCH 请求
  final response4 = await _baseUrl.patch(
    {"name": "John Doe"},
    path: "users/1",
  );
  print(response4.json);

  // 简单的 DELETE 请求
  final response5 = await _baseUrl.delete(path: "users/1");
  print(response5.statusCode);

  // 实验性功能

  // 带缓存的简单 GET 请求 - {将响应存储在本地数据库中 - URI 是键}
  final response6 = await _baseUrl.get(path: "users/1").cache();
  print(response6.json);

  // 带模型对象转换的简单 GET 请求
  final response7 = await "https://jsonplaceholder.typicode.com/users/1"
      .get()
      .to<User>(() => User());
  print(response7.name);
}

class User extends BaseModel {
  final int? id;
  final String? name;

  User({this.id, this.name});

  [@override](/user/override)
  User fromJson(Map<String, dynamic> json) {
    return User(id: json['id'], name: json['name']);
  }
}

更多关于Flutter数据获取插件fetchx的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter数据获取插件fetchx的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是一个关于如何在Flutter中使用fetchx插件进行数据获取的示例代码。fetchx是一个用于简化HTTP请求的Flutter插件,支持GET、POST等多种请求方式,并且具有请求和响应拦截器等功能。

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

dependencies:
  flutter:
    sdk: flutter
  fetchx: ^latest_version  # 请替换为实际的最新版本号

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

接下来是一个完整的示例,展示了如何使用fetchx进行GET请求和POST请求。

1. 初始化fetchx

在你的应用程序的入口文件(通常是main.dart)中,初始化fetchx

import 'package:flutter/material.dart';
import 'package:fetchx/fetchx.dart';

void main() {
  // 初始化fetchx
  FetchX.init(
    baseUrl: 'https://api.example.com',  // 替换为你的API基础URL
    headers: {
      'Content-Type': 'application/json',
      'Authorization': 'Bearer your_token_here',  // 如果需要身份验证,请添加令牌
    },
  );

  runApp(MyApp());
}

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

2. GET 请求示例

import 'package:flutter/material.dart';
import 'package:fetchx/fetchx.dart';

class HomeScreen extends StatefulWidget {
  @override
  _HomeScreenState createState() => _HomeScreenState();
}

class _HomeScreenState extends State<HomeScreen> {
  String data;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('FetchX Example'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            TextButton(
              onPressed: fetchData,
              child: Text('Fetch Data'),
            ),
            if (data != null)
              Text(
                data,
                style: TextStyle(fontSize: 20),
              ),
          ],
        ),
      ),
    );
  }

  void fetchData() async {
    try {
      var response = await FetchX.get('/your-endpoint');  // 替换为你的API端点
      if (response.isSuccessful) {
        setState(() {
          data = response.data.toString();
        });
      } else {
        print('Error: ${response.message}');
      }
    } catch (e) {
      print('Exception: $e');
    }
  }
}

3. POST 请求示例

import 'dart:convert';
import 'package:flutter/material.dart';
import 'package:fetchx/fetchx.dart';

class HomeScreen extends StatefulWidget {
  @override
  _HomeScreenState createState() => _HomeScreenState();
}

class _HomeScreenState extends State<HomeScreen> {
  String responseData;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('FetchX POST Example'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            TextButton(
              onPressed: postData,
              child: Text('Post Data'),
            ),
            if (responseData != null)
              Text(
                responseData,
                style: TextStyle(fontSize: 20),
              ),
          ],
        ),
      ),
    );
  }

  void postData() async {
    try {
      var body = jsonEncode({
        'key1': 'value1',
        'key2': 'value2',
      });

      var response = await FetchX.post('/your-endpoint', body: body);  // 替换为你的API端点
      if (response.isSuccessful) {
        setState(() {
          responseData = response.data.toString();
        });
      } else {
        print('Error: ${response.message}');
      }
    } catch (e) {
      print('Exception: $e');
    }
  }
}

注意事项

  1. 错误处理:在示例中,我们简单地打印了错误和异常信息。在实际应用中,你可能需要更复杂的错误处理逻辑。
  2. 拦截器fetchx支持请求和响应拦截器,可以在发送请求和接收响应之前对它们进行处理。
  3. 依赖注入:如果你的应用比较复杂,你可能需要使用依赖注入来管理FetchX实例。

这个示例展示了如何使用fetchx进行基本的HTTP请求。根据你的需求,你可以进一步自定义和扩展这些功能。

回到顶部