Flutter通用API集成插件nex_common_api的使用

Flutter通用API集成插件nex_common_api的使用

nexever logo

开始使用

一个用于发送HTTP GET和POST请求的Dart类,支持可选的基于令牌的身份验证和API密钥。

特性

  • 支持发送带有可选头部信息的HTTP GET和POST请求。
  • 支持基于令牌的身份验证。
  • 可以选择在请求中包含API密钥。

安装

在你的pubspec.yaml文件中添加以下依赖:

dependencies:
  nex_common_api: <latest-version>

运行flutter pub get来安装依赖。

使用方法

导入类

首先,导入必要的包:

import 'dart:convert';
import 'package:http/http.dart' as http;
import 'path_to_api_methods/api_methods.dart';

示例代码

发送GET请求

发送基本的GET请求:

void main() async {
  try {
    var response = await ApiMethods().getMethod(url: "https://api.example.com/data");
    print(response);
  } catch (e) {
    print("Error: $e");
  }
}
带有令牌的GET请求

发送带有身份验证令牌的GET请求:

void main() async {
  try {
    var response = await ApiMethods().getMethodWithToken(
        url: "https://api.example.com/data",
        token: "your_token_here"
    );
    print(response);
  } catch (e) {
    print("Error: $e");
  }
}
发送POST请求

发送基本的POST请求:

void main() async {
  try {
    var response = await ApiMethods().postMethod(
        url: "https://api.example.com/data",
        body: jsonEncode({"key": "value"})
    );
    print(response);
  } catch (e) {
    print("Error: $e");
  }
}
带有令牌的POST请求

发送带有身份验证令牌的POST请求:

void main() async {
  try {
    var response = await ApiMethods().postMethodWithToken(
        url: "https://api.example.com/data",
        token: "your_token_here",
        body: jsonEncode({"key": "value"})
    );
    print(response);
  } catch (e) {
    print("Error: $e");
  }
}

完整示例代码

以下是一个完整的示例代码,展示了如何在Flutter应用中使用ApiMethods类:

import 'dart:convert';

import 'package:flutter/material.dart';
import 'package:nex_common_api/api_core/api_methods.dart';

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

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

class MyHomePage extends StatefulWidget {
  [@override](/user/override)
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  ApiMethods apiMethods = ApiMethods();

  String _displayText = '';

  void _getData() async {
    try {
      var response = await apiMethods.getMethod(
        url: 'https://jsonplaceholder.typicode.com/posts/1',
      );

      setState(() {
        _displayText = jsonEncode(response);
      });
    } catch (e) {
      setState(() {
        _displayText = 'Error: $e';
      });
    }
  }

  void _postData() async {
    try {
      var response = await apiMethods.postMethod(
        url: 'https://jsonplaceholder.typicode.com/posts',
        body: jsonEncode({'title': 'foo', 'body': 'bar', 'userId': 1}),
      );

      setState(() {
        _displayText = jsonEncode(response);
      });
    } catch (e) {
      setState(() {
        _displayText = 'Error: $e';
      });
    }
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('ApiMethods Example'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            ElevatedButton(
              onPressed: _getData,
              child: Text('GET Data'),
            ),
            ElevatedButton(
              onPressed: _postData,
              child: Text('POST Data'),
            ),
            SizedBox(height: 20),
            Text(
              'Response:',
              style: TextStyle(fontSize: 18, fontWeight: FontWeight.bold),
            ),
            SizedBox(height: 10),
            Expanded(
              child: SingleChildScrollView(
                child: Padding(
                  padding: EdgeInsets.all(10),
                  child: Text(
                    _displayText,
                    style: TextStyle(fontSize: 16),
                  ),
                ),
              ),
            ),
          ],
        ),
      ),
    );
  }
}

更多关于Flutter通用API集成插件nex_common_api的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter通用API集成插件nex_common_api的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


nex_common_api 是一个用于 Flutter 应用的通用 API 集成插件,旨在简化与后端服务的通信。它提供了统一的接口来处理 API 请求、响应、错误处理等,使得开发者可以更高效地集成和管理 API 调用。

主要功能

  1. 统一的 API 请求管理:简化 HTTP 请求的发送与接收。
  2. 错误处理:自动处理常见的网络错误和 API 错误。
  3. 缓存支持:支持对 API 响应进行缓存,提升应用性能。
  4. 请求拦截器:允许在请求发送前或响应接收后进行自定义处理。
  5. 多环境支持:支持配置不同的 API 环境(如开发、测试、生产)。

安装

pubspec.yaml 文件中添加 nex_common_api 依赖:

dependencies:
  flutter:
    sdk: flutter
  nex_common_api: ^1.0.0  # 请根据实际情况替换为最新版本

然后运行 flutter pub get 来安装插件。

基本使用

1. 初始化

在使用 nex_common_api 之前,通常需要先进行初始化配置。例如,设置基 URL 和默认的请求头。

import 'package:nex_common_api/nex_common_api.dart';

void main() {
  NexCommonApi.init(
    baseUrl: 'https://api.example.com',
    defaultHeaders: {
      'Content-Type': 'application/json',
      'Authorization': 'Bearer your_token_here',
    },
  );

  runApp(MyApp());
}

2. 发送 GET 请求

使用 NexCommonApi 发送 GET 请求非常简单:

void fetchData() async {
  try {
    final response = await NexCommonApi.get('/endpoint');
    print('Response: ${response.data}');
  } catch (e) {
    print('Error: $e');
  }
}

3. 发送 POST 请求

发送 POST 请求时,可以传递请求体数据:

void postData() async {
  try {
    final response = await NexCommonApi.post(
      '/endpoint',
      data: {
        'key': 'value',
      },
    );
    print('Response: ${response.data}');
  } catch (e) {
    print('Error: $e');
  }
}

4. 处理错误

nex_common_api 会自动处理常见的网络错误和 API 错误。你可以通过 try-catch 块来捕获和处理这些错误。

void fetchData() async {
  try {
    final response = await NexCommonApi.get('/endpoint');
    print('Response: ${response.data}');
  } on NexApiException catch (e) {
    print('API Error: ${e.message}');
  } catch (e) {
    print('Unexpected Error: $e');
  }
}

5. 使用拦截器

你可以添加请求和响应拦截器来进行自定义处理,例如添加认证信息或记录日志。

NexCommonApi.addRequestInterceptor((request) {
  // 在请求发送前添加自定义逻辑
  request.headers['Custom-Header'] = 'value';
  return request;
});

NexCommonApi.addResponseInterceptor((response) {
  // 在响应接收后添加自定义逻辑
  print('Response received: ${response.data}');
  return response;
});

6. 多环境配置

nex_common_api 支持多环境配置,你可以根据不同的环境设置不同的基 URL。

void configureApiEnvironment(Environment environment) {
  switch (environment) {
    case Environment.development:
      NexCommonApi.init(baseUrl: 'https://dev.api.example.com');
      break;
    case Environment.production:
      NexCommonApi.init(baseUrl: 'https://api.example.com');
      break;
  }
}
回到顶部