Flutter API客户端插件tth_api_client的使用

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

Flutter API客户端插件tth_api_client的使用

tth_api_client

基于 OpenAPI 3.1 规范生成。

此 Dart 包由 OpenAPI Generator 项目自动生成:

  • API 版本: 0.0.61
  • 生成器版本: 7.6.0
  • 构建包: org.openapitools.codegen.languages.DartClientCodegen
    更多相关信息,请访问 https://tutorhouse.co.uk

Requirements

Dart 2.12 或更高版本

Installation & 使用

GitHub

如果此 Dart 包发布在 GitHub 上,将以下依赖项添加到您的 pubspec.yaml 文件中:

dependencies:
  tth_api_client:
    git: https://github.com/GIT_USER_ID/GIT_REPO_ID.git

Local

若要在本地使用该包,请将其路径添加到您的 pubspec.yaml 文件中:

dependencies:
  tth_api_client:
    path: /path/to/tth_api_client

Tests

待完成。

Getting Started

请按照上述安装步骤操作后,运行以下代码示例:

import 'package:tth_api_client/api.dart';

// 配置 HTTP 基本身份验证: basicAuth
// defaultApiClient.getAuthentication<HttpBasicAuth>('basicAuth').username = 'YOUR_USERNAME';
// defaultApiClient.getAuthentication<HttpBasicAuth>('basicAuth').password = 'YOUR_PASSWORD';

// 配置 API 密钥身份验证: tutorhouse_token_authentication
// defaultApiClient.getAuthentication<ApiKeyAuth>('tutorhouse_token_authentication').apiKey = 'YOUR_API_KEY';
// 如果需要设置前缀(例如 Bearer),取消注释以下行
// defaultApiClient.getAuthentication<ApiKeyAuth>('tutorhouse_token_authentication').apiKeyPrefix = 'Bearer';

final api_instance = ApiApi();

try {
  // 调用 GET 请求获取 Alevel 课程列表
  final result = await api_instance.apiV1AlevelCoursesList();
  print(result);
} catch (e) {
  print('Exception when calling ApiApi->apiV1AlevelCoursesList: $e\n');
}

Documentation for API Endpoints

所有 URI 相对于 http://localhost

ApiApi 类方法示例

以下为部分 API 方法的示例代码:

final api_instance = ApiApi();

try {
  // 获取 Alevel 科目列表
  final subjectResult = await api_instance.apiV1AlevelSubjectsList();
  print(subjectResult);

  // 创建 Alevel 下载请求
  final downloadRequest = new DownloadRequest();
  final downloadResult = await api_instance.apiV1AlevelDownloadsCreate(downloadRequest);
  print(downloadResult);

  // 获取通知列表
  final notificationResult = await api_instance.apiV1NotificationsList();
  print(notificationResult);

  // 标记通知为已读
  final markReadRequest = new MarkReadRequest();
  final markReadResult = await api_instance.apiV1NotificationsMarkReadCreate(markReadRequest);
  print(markReadResult);

  // 获取未读通知数量
  final unreadCountResult = await api_instance.apiV1NotificationsUnreadCountRetrieve();
  print(unreadCountResult);

  // 获取可用性信息
  final availabilityResult = await api_instance.apiV2AvailabilityRetrieve();
  print(availabilityResult);

  // 获取客户预订信息
  final bookingResult = await api_instance.apiV2CustomerBookingsList();
  print(bookingResult);

  // 获取推送通知列表
  final pushNotificationResult = await api_instance.apiV2PushNotificationList();
  print(pushNotificationResult);

  // 获取教师预订时间表
  final tutorBookingResult = await api_instance.apiV2TutorBookingTimeList(tutorId);
  print(tutorBookingResult);

  // 获取教师卡片信息
  final tutorCardResult = await api_instance.apiV2TutorCardList();
  print(tutorCardResult);

  // 获取教师详细信息
  final tutorDetailResult = await api_instance.apiV2TutorRetrieve(userId);
  print(tutorDetailResult);
} catch (e) {
  print('Exception when calling API methods: $e\n');
}

Documentation for Models

以下是部分模型的定义示例:

class ACourse {
  String name;
  List<ACourseSubject> subjects;

  ACourse({required this.name, required this.subjects});
}

class Booking {
  int id;
  String status;
  DateTime startTime;
  DateTime endTime;

  Booking({
    required this.id,
    required this.status,
    required this.startTime,
    required this.endTime,
  });
}

Documentation for Authorization

定义了两种认证方式:

basicAuth

  • 类型: HTTP 基本身份验证

tutorhouse_token_authentication

  • 类型: API 密钥
  • 密钥参数名称: Authorization
  • 位置: HTTP 头部

Author

发送邮件至 aaron.yongdong@oktopi.ai


完整示例 Demo

以下是一个完整的 Flutter 应用程序示例,展示如何使用 tth_api_client 插件调用 API 并处理返回数据:

import 'package:flutter/material.dart';
import 'package:tth_api_client/api.dart';

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

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'tth_api_client Demo',
      home: HomePage(),
    );
  }
}

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

class _HomePageState extends State<HomePage> {
  late final ApiApi _apiInstance;
  List<Booking>? _bookings;
  bool _isLoading = true;

  [@override](/user/override)
  void initState() {
    super.initState();
    _apiInstance = ApiApi();
    fetchBookings();
  }

  Future<void> fetchBookings() async {
    try {
      final bookingsResult = await _apiInstance.apiV2CustomerBookingsList();
      setState(() {
        _bookings = bookingsResult;
        _isLoading = false;
      });
    } catch (e) {
      setState(() {
        _isLoading = false;
      });
      print('Error fetching bookings: $e');
    }
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('tth_api_client Demo'),
      ),
      body: _isLoading
          ? Center(child: CircularProgressIndicator())
          : ListView.builder(
              itemCount: _bookings?.length ?? 0,
              itemBuilder: (context, index) {
                final booking = _bookings![index];
                return ListTile(
                  title: Text(booking.status!),
                  subtitle: Text('${booking.startTime} - ${booking.endTime}'),
                  onTap: () {
                    Navigator.push(
                      context,
                      MaterialPageRoute(
                        builder: (context) => BookingDetailsPage(booking: booking),
                      ),
                    );
                  },
                );
              },
            ),
    );
  }
}

class BookingDetailsPage extends StatelessWidget {
  final Booking booking;

  const BookingDetailsPage({Key? key, required this.booking}) : super(key: key);

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Booking Details'),
      ),
      body: Padding(
        padding: const EdgeInsets.all(16.0),
        child: Column(
          crossAxisAlignment: CrossAxisAlignment.start,
          children: [
            Text('ID: ${booking.id}'),
            Text('Status: ${booking.status}'),
            Text('Start Time: ${booking.startTime}'),
            Text('End Time: ${booking.endTime}'),
          ],
        ),
      ),
    );
  }
}

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

1 回复

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


tth_api_client 是一个用于 Flutter 的 API 客户端插件,旨在简化与 RESTful API 的交互。它提供了一些便捷的功能,如自动处理请求、响应、错误处理以及 JSON 解析等。以下是如何使用 tth_api_client 插件的详细步骤。

1. 添加依赖

首先,你需要在 pubspec.yaml 文件中添加 tth_api_client 插件的依赖。

dependencies:
  flutter:
    sdk: flutter
  tth_api_client: ^0.1.0  # 请使用最新版本

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

2. 导入插件

在你的 Dart 文件中导入 tth_api_client 插件。

import 'package:tth_api_client/tth_api_client.dart';

3. 初始化 API 客户端

创建一个 ApiClient 实例,并配置基础 URL 和其他可选参数。

final apiClient = ApiClient(
  baseUrl: 'https://api.example.com',  // 你的 API 基础 URL
  defaultHeaders: {
    'Content-Type': 'application/json',
    'Authorization': 'Bearer your_token',
  },
);

4. 发送请求

使用 ApiClient 实例来发送 GET、POST、PUT、DELETE 等请求。

GET 请求

final response = await apiClient.get('/endpoint');
print(response.data);

POST 请求

final response = await apiClient.post(
  '/endpoint',
  data: {
    'key1': 'value1',
    'key2': 'value2',
  },
);
print(response.data);

PUT 请求

final response = await apiClient.put(
  '/endpoint',
  data: {
    'key1': 'value1',
    'key2': 'value2',
  },
);
print(response.data);

DELETE 请求

final response = await apiClient.delete('/endpoint');
print(response.data);

5. 处理响应

ApiClient 返回的响应是一个 ApiResponse 对象,包含 statusCodedataheaders 等信息。

if (response.statusCode == 200) {
  print('Request successful');
  print('Response data: ${response.data}');
} else {
  print('Request failed with status code: ${response.statusCode}');
}

6. 错误处理

ApiClient 会自动处理一些常见的错误,如网络错误、超时等。你可以通过 try-catch 来捕获异常。

try {
  final response = await apiClient.get('/endpoint');
  print(response.data);
} on ApiException catch (e) {
  print('API Error: ${e.message}');
} catch (e) {
  print('Unexpected Error: $e');
}

7. 自定义配置

你可以在初始化 ApiClient 时自定义配置,如超时时间、拦截器等。

final apiClient = ApiClient(
  baseUrl: 'https://api.example.com',
  timeout: Duration(seconds: 10),
  interceptors: [
    (RequestOptions options) async {
      // 在请求发送前做一些处理
      return options;
    },
  ],
);

8. 使用拦截器

拦截器可以在请求发送前或响应返回后进行一些处理。

apiClient.interceptors.add(
  InterceptorsWrapper(
    onRequest: (RequestOptions options) async {
      // 在请求发送前做一些处理
      return options;
    },
    onResponse: (Response response) async {
      // 在响应返回后做一些处理
      return response;
    },
    onError: (ApiException error) async {
      // 在发生错误时做一些处理
      return error;
    },
  ),
);

9. 取消请求

你可以使用 CancelToken 来取消请求。

final cancelToken = CancelToken();

apiClient.get('/endpoint', cancelToken: cancelToken);

// 取消请求
cancelToken.cancel('Request cancelled by user');
回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!