Flutter轻量级REST API请求插件minimal_rest的使用

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

Flutter轻量级REST API请求插件minimal_rest的使用

标题

Flutter轻量级REST API请求插件minimal_rest的使用

内容

如果你喜欢Either<L, R>数据类型来自dartz包,并且厌倦了在Either<L, R>中编写消费REST API的模板代码,那么这个包就是为你准备的。

MinRest充当一个REST客户端,并将数据返回为你的DataModelEntity,无论你想要哪种对象。

特性

  • 制作各种http请求
  • 它通过制作http请求返回你的DataModel,并返回Either<YourModel, Error>

开始使用

你需要初始化MinRest单例对象并设置基URL。让我们在main.dart文件中进行初始化。

void main() {
  WidgetsFlutterBinding.ensureInitialized();
  ...
  MinRest.init("https://jsonplaceholder.typicode.com/todos/1");
  ...
  runApp(Main());
}

发送GET请求

  1. 您自己的DataModel类 假设我们有一个名为UserModel的数据模型类。
class UserModel {
  final String name;
  final String email;

  UserModel({required this.name, required this.email});

  factory UserModel.fromJson(Map<String, dynamic> json) {
    return UserModel(
      name: json['name'],
      email: json['email'],
    );
  }

  Map<String, dynamic> toJson() {
    return {
      'name': name,
      'email': email,
    };
  }
}
  1. 发送API调用并获取Either&lt;MinRestError, UserModel&gt;
final userOrError = await MinRest().getErrorOr<UserModel>(
  "/path_to_user_data",
  (json) =&gt UserModel.fromJson(json),
);
  1. 折叠并使用数据 现在你可以像任何Either&lt;L, R&gt;对象一样使用userOrError。 让我们折叠userOrError并打印用户的名字和电子邮件(如果请求和响应成功)或者打印错误状态码和消息(如果请求失败)。
userOrError.fold(
  (error) =&gt; print("Error: ${error.code} - ${error.message}"),
  (user) =&gt; print("User: ${user.name} - ${user.email}"),
);

使用

如何使用MinRest

  1. GET请求
final userOrError = await MinRest().getErrorOr<UserModel>(
  "/path_to_user_data",
  (json) =&gt; UserModel.fromJson(json),
  token: token.accessToken,
);
  1. POST请求
final postData = await MinRest().postErrorOr<UserModel>(
  "/path_to_user_data",
  userModel.toJson(),
  (json) =&gt; UserModel.fromJson(json),
  token: token.accessToken,
);
  1. PATCH请求
final patchData = MinRest().patchErrorOr<UserModel>(
  uri: "/auth/update-profile",
  data: userModel.toJson(),
  deSerializer: (json) =&gt; UserModel.fromJson(json),
  errorDeserializer: (json) =&gt; AppError.fromJson(json),
  token: token.accessToken,
);
  1. DELETE请求
final deleteData = MinRest().deleteErrorOr(
  uri: "/auth/delete-account",
  deSerializer: (json) =&gt; RestResponseNoEntity.fromJson(json),
  errorDeserializer: (json) =&gt; AppError.fromJson(json),
  token: token.accessToken,
);

注意

AppError是您的自定义ErrorModel,稍后其他方法(如Get和Post方法)也将实现此功能,当前Get和Post方法只返回MinRestError

示例代码

import 'package:minimal_rest/minimal_rest.dart';

class UserModel {
  final String name;
  final String email;

  UserModel({required this.name, required this.email});

  factory UserModel.fromJson(Map<String, dynamic> json) {
    return UserModel(
      name: json['name'],
      email: json['email'],
    );
  }

  Map<String, dynamic> toJson() {
    return {
      'name': name,
      'email': email,
    };
  }
}

Future&lt;void&gt; main() async {
  // 初始化 MinRest
  MinRest.init("https://jsonplaceholder.typicode.com");

  // 发送 GET 请求
  final tokenOrError = await MinRest().getErrorOr&lt;UserModel&gt;(
    "/path_to_user_data",
    (json) =&gt; UserModel.fromJson(json),
  );

  // 处理结果
  tokenOrError.fold(
    (error) =&gt; print("Error: ${error.code} - ${error.message}"),
    (user) =&gt; print("User: ${user.name} - ${user.email}"),
  );

  // 发送 POST 请求
  final postData = await MinRest().postErrorOr&lt;UserModel&gt;(
    "/path_to_user_data",
    {
      "name": "John Doe",
      "email": "example@email.com",
    },
    (json) =&gt; UserModel.fromJson(json),
  );
}

更多关于Flutter轻量级REST API请求插件minimal_rest的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter轻量级REST API请求插件minimal_rest的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是如何在Flutter项目中使用minimal_rest插件进行轻量级REST API请求的示例代码。

首先,确保你已经在pubspec.yaml文件中添加了minimal_rest依赖:

dependencies:
  flutter:
    sdk: flutter
  minimal_rest: ^x.y.z  # 请将x.y.z替换为最新版本号

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

示例代码

以下是一个完整的Flutter应用程序示例,展示如何使用minimal_rest插件来发送GET和POST请求。

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

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

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

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

class _MyHomePageState extends State<MyHomePage> {
  String responseText = "";

  void fetchData() async {
    // 创建MinimalRestClient实例
    var client = MinimalRestClient();

    // 发送GET请求
    var getResponse = await client.get(
      url: 'https://jsonplaceholder.typicode.com/posts/1',
    );

    if (getResponse.success) {
      setState(() {
        responseText = getResponse.data.toString();
      });
      print("GET Response: $responseText");
    } else {
      print("GET Error: ${getResponse.error}");
    }

    // 发送POST请求
    var postData = {
      "title": "foo",
      "body": "bar",
      "userId": 1,
    };

    var postResponse = await client.post(
      url: 'https://jsonplaceholder.typicode.com/posts',
      body: postData,
    );

    if (postResponse.success) {
      setState(() {
        responseText = "${responseText}\n\nPOST Response: ${postResponse.data.toString()}";
      });
      print("POST Response: ${postResponse.data.toString()}");
    } else {
      print("POST Error: ${postResponse.error}");
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Minimal REST Example'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text('Response:'),
            Text(responseText, style: TextStyle(fontSize: 16)),
            SizedBox(height: 20),
            ElevatedButton(
              onPressed: fetchData,
              child: Text('Fetch Data'),
            ),
          ],
        ),
      ),
    );
  }
}

解释

  1. 依赖添加:在pubspec.yaml文件中添加minimal_rest依赖。
  2. 创建客户端:使用MinimalRestClient()创建一个客户端实例。
  3. 发送GET请求:使用client.get(url: 'your-api-endpoint')发送GET请求。
  4. 发送POST请求:使用client.post(url: 'your-api-endpoint', body: yourData)发送POST请求。
  5. 处理响应:通过检查response.success来判断请求是否成功,并相应地更新UI或处理错误。

这个示例展示了如何使用minimal_rest插件来发送基本的REST API请求,并处理响应数据。你可以根据需要进一步扩展和修改这个示例以适应你的具体需求。

回到顶部