Flutter GitHub监控插件github_snitch的使用
Flutter GitHub监控插件github_snitch的使用
GitHub Snitch
GitHub Snitch 是一个 Flutter 包,它可以帮助你自动在 GitHub 上报告错误和问题。还可以用于提交现有问题的评论。 演示测试地址: https://gh-snitch.web.app
特性
- 在 GitHub 问题上报告错误,并指定标签、指派人和里程碑
- 当在
main
中调用listenToExceptions
方法时自动执行(如示例所示) - 使用
report
方法手动执行
- 当在
- 支持离线情况(本地保存并在连接后发送)
- 获取带有所有评论的已报告问题
- 提交用户评论和仓库所有者的 GitHub 问题回复
- 在报告中包含截图以更好地澄清问题。
- 通过添加评论 (+1) 来处理重复报告的问题
- 使用
onReport
方法处理 API 集成 - 创建包的跟进标签
- GhSnitch-external 用于未被 Flutter 框架捕获的错误
- GhSnitch-internal 用于被 Flutter 框架捕获的错误
- 由 GhSnitch 包报告,以便知道哪些问题是通过此包报告的
即将到来的功能
- 支持与用户和仓库所有者聊天的通知
技巧
小贴士
建议使用空仓库来报告问题和错误,然后将重要项目转移到主仓库。
小贴士
为了从问题评论中向用户发送屏幕截图,可以使用一些网站上传图像并添加链接到评论,不要使用 GitHub 仓库中的截图,因为这将不起作用。
小贴士
你可以通过调用 GhSnitch.openReportScreen(context);
来使用现成的屏幕,或者构建自己的屏幕并使用方法如 GhSnitch.report
和 GhSnitch.submitComment
来提交问题和评论。
小贴士
创建一个用于上传截图的分支,命名为 screenshots
或任何你想要的名字,但你需要将这个名称传递给 GhSnitch.report
方法中的 screenShotBranch
参数。如果你使用了 GhSnitch.openReportScreen(context);
,你应该使用 screenshots
名称。
开始使用
安装包后,你需要生成一个精细粒度个人访问令牌。选择精细粒度个人访问令牌并选择你的仓库,然后在仓库权限中检查问题。访问权限:读写。
我们还需要 owner username
和 repo name
。
我们将使用环境变量来保存这些敏感密钥。
使用
运行或构建应用时,只需为每个键传递 --dart-define
作为示例:
flutter build apk --split-per-abi --dart-define owner=owner --dart-define repo=repo --dart-define token=token
然后在 runApp
方法之前添加以下代码。正如你所看到的,我们使用了来自环境的键。
WidgetsFlutterBinding.ensureInitialized();
const String owner = String.fromEnvironment('owner');
String appFlavor = 'x';
String appVersion = '2.0.0';
GhSnitch.initialize(
owner: owner,
token: const String.fromEnvironment('token'),
repo: const String.fromEnvironment("repo"));
if (kReleaseMode) {
// 为自动报告异常和错误
GhSnitch.listenToExceptions(assignees: [owner], labels: [appFlavor, appVersion]);
}
runApp(const MyApp());
现在 GitHub Snitch 已初始化,你可以开始报告错误和问题。为此,你可以调用 report
方法:
GhSnitch.report(
title: '<issue-title>',
body: '<issue-body>',
screenShot: '<screenshot-url>',
screenShotBranch: '<screenshot-branch>',
labels: <List<String>?>,
assignees: <List<String>?>,
milestone: '<milestone>' if null will create new milestone with app version name,
userId: '<user-id if exist if not package will use deviceID>',
);
report
方法接受以下参数:
title
: 问题的标题。body
: 问题的正文。screenShot
: 截图的 URL。screenShotBranch
: 参数指定截图将保存在仓库的哪个分支。labels
: 问题的标签列表。assignees
: 分配问题的用户列表。milestone
: 关联问题的里程碑。
监听异常
GitHub Snitch 还可用于监听异常和错误。为此,可以调用 listenToExceptions
方法:
GhSnitch.listenToExceptions(
assignees: <List<String>?>,
milestone: <int?>,
);
listenToExceptions
方法接受以下参数:
assignees
: 分配问题的用户列表。milestone
: 关联问题的里程碑。
当检测到异常或错误时,GitHub Snitch 将自动在 GitHub 上创建一个问题。
提交评论
GitHub Snitch 还可用于提交现有问题的评论。为此,可以调用 submitComment
方法:
GhSnitch.submitComment(
reportId: '<issue-id>',
comment: '<comment-text>',
);
submitComment
方法接受以下参数:
reportId
: 问题的 ID。comment
: 评论文本。
结论
GitHub Snitch 是一个强大的工具,可以帮助你在 GitHub 上跟踪错误和问题。还可以用于提交现有问题的评论。如果你正在寻找一种改善 GitHub 工作流的方法,我强烈推荐查看 GitHub Snitch。
欢迎为这个包贡献,可以通过在 https://github.com/M97Chahboun/github_snitch 上打开问题或提交拉取请求。
完整示例代码
以下是完整的示例代码:
import 'dart:developer';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:github_snitch/github_snitch.dart';
Future<void> main() async {
WidgetsFlutterBinding.ensureInitialized();
const String owner = String.fromEnvironment('owner');
GhSnitch.initialize(
owner: owner,
maxDuplicatedReports: 2,
onReport: (title, body, labels, milestone, userId) {
log(title);
},
token: const String.fromEnvironment('token'),
repo: const String.fromEnvironment("repo"));
if (!kReleaseMode) {
// 为自动报告异常和错误
GhSnitch.listenToExceptions(assignees: [owner], labels: ['flavorX']);
}
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
// 此小部件是您的应用程序的根。
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
title: 'Report Issues on your repo',
debugShowCheckedModeBanner: false,
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: const MyHomePage(title: 'Github Snitch'),
);
}
}
class MyHomePage extends StatefulWidget {
const MyHomePage({super.key, required this.title});
final String title;
[@override](/user/override)
State<MyHomePage> createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
int _counter = 0;
void _incrementCounter() {
Navigator.of(context)
.push(MaterialPageRoute(builder: (BuildContext context) {
return const ScreenError(555);
}));
setState(() {
_counter++;
});
}
int h = 55;
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(widget.title),
actions: [
IconButton(
onPressed: () {
GhSnitch.openReportScreen(context);
},
icon: const Icon(Icons.report))
],
),
body: Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
const Text(
'You have pushed the button this many times:',
),
Text(
'$_counter',
style: Theme.of(context).textTheme.headlineMedium,
),
],
),
floatingActionButton: FloatingActionButton(
onPressed: _incrementCounter,
tooltip: 'Increment',
child: const Icon(Icons.add),
),
);
}
}
class ScreenError extends StatelessWidget {
const ScreenError(this.wrong, {super.key});
final dynamic wrong;
[@override](/user/override)
Widget build(BuildContext context) {
return Center(
child: Text("Hello" + wrong.toString()),
);
}
}
更多关于Flutter GitHub监控插件github_snitch的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter GitHub监控插件github_snitch的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是一个关于如何在Flutter项目中使用github_snitch
插件来监控GitHub仓库活动的代码案例。github_snitch
插件允许你监听GitHub上的特定事件,比如issues、pull requests等的更新。
首先,确保你已经在pubspec.yaml
文件中添加了github_snitch
依赖:
dependencies:
flutter:
sdk: flutter
github_snitch: ^最新版本号 # 请替换为实际的最新版本号
然后,运行flutter pub get
来获取依赖。
接下来,你可以按照以下步骤在Flutter应用中设置和使用github_snitch
插件:
-
设置GitHub OAuth Token:
你需要在GitHub上生成一个OAuth Token,并授予它适当的权限(如
repo
权限)来访问仓库的数据。确保将生成的Token安全存储,不要在代码中硬编码。 -
初始化
GithubSnitch
客户端:在你的Flutter应用中,初始化
GithubSnitch
客户端,并使用你的OAuth Token进行身份验证。
import 'package:flutter/material.dart';
import 'package:github_snitch/github_snitch.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatefulWidget {
@override
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
late GithubSnitch _githubSnitch;
@override
void initState() {
super.initState();
// 使用你的GitHub OAuth Token初始化GithubSnitch
String githubToken = 'YOUR_GITHUB_OAUTH_TOKEN'; // 请替换为你的实际Token
_githubSnitch = GithubSnitch(token: githubToken);
// 订阅仓库事件
_subscribeToRepositoryEvents();
}
void _subscribeToRepositoryEvents() {
// 替换为你的仓库所有者名称和仓库名称
String owner = 'owner-name';
String repo = 'repo-name';
_githubSnitch.subscribeToRepository(
owner: owner,
repo: repo,
onIssueEvent: (event) {
print('Issue event: $event');
},
onPullRequestEvent: (event) {
print('Pull request event: $event');
},
// 你可以根据需要添加更多事件监听器,如onCommitEvent, onPushEvent等
);
}
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('GitHub Snitch Demo'),
),
body: Center(
child: Text('Listening for GitHub events...'),
),
),
);
}
}
在这个示例中,我们创建了一个Flutter应用,并在initState
方法中初始化了GithubSnitch
客户端。然后,我们订阅了一个特定仓库的issues和pull requests事件,并在控制台中打印出接收到的事件。
注意:
- 请确保将
YOUR_GITHUB_OAUTH_TOKEN
替换为你实际的GitHub OAuth Token。 - 将
owner-name
和repo-name
替换为你想要监控的GitHub仓库的所有者名称和仓库名称。
这个示例仅展示了如何使用github_snitch
插件监听GitHub事件。你可以根据实际需求扩展这个示例,比如将事件显示在UI上,或者根据事件类型执行不同的操作。