Flutter GitHub集成插件github_kit的使用
Flutter GitHub集成插件github_kit的使用
GitHubKit 是一个全面的 Dart 包,用于与 GitHub API 交互。它提供了易于使用的接口来执行常见的 GitHub 操作,并支持高级功能,如 GitHub Actions、代码扫描和秘密扫描。
目录
特性
- 完整覆盖 GitHub REST API v3
- 支持 GitHub GraphQL API v4
- 仓库管理
- 问题和拉取请求处理
- GitHub Actions 工作流管理
- 代码扫描和秘密扫描 API
- 自动分页处理
- 内置速率限制处理和自动重试
- 全面的日志系统
- 带有自定义异常的简单错误处理
- 完整的认证支持(个人访问令牌)
- 丰富的文档和示例
安装
在你的包的 pubspec.yaml
文件中添加以下依赖项:
dependencies:
github_kit: ^1.0.0
然后运行:
$ dart pub get
使用
初始化
首先,导入包并创建 GitHubKit
的实例:
import 'package:github_kit/github_kit.dart';
final gitHubKit = GitHubKit(token: 'your_personal_access_token');
仓库管理
获取仓库:
// 获取仓库
final repo = await gitHubKit.repositories.getRepository('octocat', 'Hello-World');
print('Repository: ${repo.fullName}');
创建仓库:
// 创建仓库
final newRepo = await gitHubKit.repositories.createRepository('New-Repo', private: true);
print('Created new repository: ${newRepo.fullName}');
列出仓库:
// 列出仓库
final repos = await gitHubKit.repositories.listRepositories('octocat');
for (var repo in repos) {
print('Repo: ${repo.name}');
}
问题处理
创建问题:
// 创建问题
final issue = await gitHubKit.issues.createIssue('octocat', 'Hello-World', 'Bug report', body: 'This is a bug report');
print('Created issue #${issue.number}');
获取问题:
// 获取问题
final fetchedIssue = await gitHubKit.issues.getIssue('octocat', 'Hello-World', 1);
print('Issue title: ${fetchedIssue.title}');
列出问题:
// 列出问题
final issues = await gitHubKit.issues.listIssues('octocat', 'Hello-World', state: 'open');
for (var issue in issues) {
print('Issue #${issue.number}: ${issue.title}');
}
拉取请求
创建拉取请求:
// 创建拉取请求
final pr = await gitHubKit.pullRequests.createPullRequest('octocat', 'Hello-World', 'New feature', 'feature-branch', 'main');
print('Created PR #${pr.number}');
获取拉取请求:
// 获取拉取请求
final fetchedPR = await gitHubKit.pullRequests.getPullRequest('octocat', 'Hello-World', 1);
print('PR title: ${fetchedPR.title}');
列出拉取请求:
// 列出拉取请求
final prs = await gitHubKit.pullRequests.listPullRequests('octocat', 'Hello-World', state: 'open');
for (var pr in prs) {
print('PR #${pr.number}: ${pr.title}');
}
GitHub Actions
列出工作流:
// 列出工作流
final workflows = await gitHubKit.actions.listWorkflows('octocat', 'Hello-World');
for (var workflow in workflows) {
print('Workflow: ${workflow.name}');
}
创建工作流调度事件:
// 创建工作流调度事件
await gitHubKit.actions.createWorkflowDispatch('octocat', 'Hello-World', 'main.yml', 'main');
print('Workflow dispatch created');
代码扫描
列出代码扫描警报:
// 列出代码扫描警报
final alerts = await gitHubKit.codeScanning.listCodeScanningAlerts('octocat', 'Hello-World');
for (var alert in alerts) {
print('Alert #${alert.number}: ${alert.state}');
}
秘密扫描
列出秘密扫描警报:
// 列出秘密扫描警报
final secretAlerts = await gitHubKit.secretScanning.listSecretScanningAlerts('octocat', 'Hello-World');
for (var alert in secretAlerts) {
print('Secret Alert #${alert.number}: ${alert.state}');
}
GraphQL API
使用 GraphQL 查询:
// 使用 GraphQL 查询
final result = await gitHubKit.graphql('''
query {
viewer {
login
repositories(first: 10) {
nodes {
name
stargazerCount
}
}
}
}
''');
print('Logged in as: ${result['viewer']['login']}');
错误处理
GitHubKit 使用自定义异常进行错误处理。始终用 try-catch
块包裹 API 调用:
try {
final repo = await gitHubKit.repositories.getRepository('octocat', 'Hello-World');
print('Repository: ${repo.fullName}');
} catch (e) {
if (e is GitHubException) {
print('GitHub API Error: ${e.message} (Status: ${e.statusCode})');
} else {
print('Error: $e');
}
}
分页
大多数列表方法在 GitHubKit 中自动处理分页。可以使用 perPage
和 page
参数控制分页:
// 控制分页
final repos = await gitHubKit.repositories.listRepositories('octocat', perPage: 100, page: 2);
速率限制
GitHubKit 通过在达到限制时重试请求来自动处理速率限制。可以在创建 GitHubKit 实例时配置重试行为:
// 配置重试行为
final gitHubKit = GitHubKit(
token: 'your_token',
maxRetries: 5,
retryDelay: Duration(seconds: 10),
);
日志记录
GitHubKit 包含内置的日志系统。可以在创建 GitHubKit 实例时配置日志级别:
// 配置日志级别
final gitHubKit = GitHubKit(token: 'your_token');
gitHubKit.setLogLevel(LogLevel.debug);
测试
要运行 GitHubKit 的测试:
$ dart test
更多关于Flutter GitHub集成插件github_kit的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter GitHub集成插件github_kit的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是一个关于如何在Flutter项目中使用github_kit
插件的示例代码。github_kit
是一个用于与GitHub API进行交互的Flutter插件,它提供了一系列功能来访问GitHub数据。
首先,确保你已经在pubspec.yaml
文件中添加了github_kit
依赖:
dependencies:
flutter:
sdk: flutter
github_kit: ^最新版本号 # 请替换为实际最新版本号
然后运行flutter pub get
来获取依赖。
接下来,是一个基本的示例代码,展示了如何使用github_kit
插件来获取用户的仓库列表:
import 'package:flutter/material.dart';
import 'package:github_kit/github_kit.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'GitHub Kit Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: MyHomePage(),
);
}
}
class MyHomePage extends StatefulWidget {
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
List<Repository> repositories = [];
bool isLoading = false;
String errorMessage;
@override
void initState() {
super.initState();
fetchRepositories();
}
void fetchRepositories() async {
setState(() {
isLoading = true;
errorMessage = null;
repositories = [];
});
try {
// 请替换为您的GitHub个人访问令牌
final github = GitHub(accessToken: 'YOUR_GITHUB_ACCESS_TOKEN');
// 获取当前用户的仓库列表
final response = await github.repositories.listForUser('your-username');
setState(() {
repositories = response.items;
isLoading = false;
});
} catch (e) {
setState(() {
errorMessage = e.toString();
isLoading = false;
});
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('GitHub Repositories'),
),
body: isLoading
? Center(child: CircularProgressIndicator())
: Column(
children: <Widget>[
if (errorMessage != null)
Text(
'Error: $errorMessage',
style: TextStyle(color: Colors.red),
),
Expanded(
child: ListView.builder(
itemCount: repositories.length,
itemBuilder: (context, index) {
final repo = repositories[index];
return ListTile(
title: Text(repo.name),
subtitle: Text(repo.description ?? 'No description'),
);
},
),
),
],
),
);
}
}
class Repository {
String name;
String description;
Repository({required this.name, this.description});
// 根据github_kit插件返回的数据结构,你可能需要添加更多的字段和方法来解析数据
factory Repository.fromJson(Map<String, dynamic> json) {
return Repository(
name: json['name'] as String,
description: json['description'] as String?,
);
}
}
在这个示例中,我们做了以下几步:
- 在
pubspec.yaml
文件中添加github_kit
依赖。 - 创建一个Flutter应用,并在主页(
MyHomePage
)中初始化并调用fetchRepositories
方法来获取GitHub用户的仓库列表。 - 在
fetchRepositories
方法中,使用GitHub
类(来自github_kit
插件)并传入个人访问令牌(请确保替换为您自己的令牌)。 - 调用
listForUser
方法来获取指定用户的仓库列表,并将结果存储到状态中。 - 在UI中显示加载指示器、错误信息或仓库列表。
请注意,为了使用GitHub API,你需要一个有效的个人访问令牌,并且该令牌需要有访问用户仓库的权限。在实际应用中,请确保安全地存储和处理令牌,避免在客户端代码中硬编码。