Flutter JIRA集成插件ispect_jira的使用
Flutter JIRA集成插件ispect_jira的使用
Logo 与 标题
一个用于移动应用调试的手动工具箱 🚀
ISpect 是一个灵感来自网页检查器的简单但多功能库,专门为移动应用开发设计。
此插件允许通过反馈立即使用 Jira Atlassian Api 创建问题工单。
点个赞并给项目加星以支持我们的项目!
徽章
其他包
包 #
ISpect 可以通过以下部分扩展
包 | 版本 | 描述 |
---|---|---|
ispect | 主 包 | |
ispect_ai | 一个附加包,使用Gemini AI Api生成报告和日志问题。 | |
ispect_jira | 一个附加包,使用Jira Atlassian Api通过反馈立即创建问题工单。 | |
ispect_device | 一个额外的包,用于查看平台和设备信息。 | |
ispectify | 一个额外的包,用于记录和处理。基于 Talker 。 |
|
ispectify_bloc | 一个额外的包,用于记录和处理 BLoC 。 |
|
ispectify_dio | 一个额外的包,用于记录和处理 Dio 。 |
|
ispectify_http | 一个额外的包,用于记录和处理 http 。 |
功能
📌 特性 #
- ✅ 可拖拽面板,用于跳转到 ISpect 页面并管理检查工具。
你也可以单独使用它:[draggable_panel](https://pub.dev/packages/draggable_panel) - ✅ 支持本地化:ru, en, kk。(未来我会添加更多翻译。)
- ✅
ISpectify
日志实现:BLoC, Dio, http, 路由, Provider - ✅ 初始化 ISpect 时可以自定义更多选项,如 BLoC, 错误处理器等。
- ✅ 更新了 ISpect 页面:增加了更多选项。
- 详细的
HTTP
日志:请求
,响应
,错误
- 调试工具
- 缓存管理器
- 设备和应用信息 (ispect_device)
- 详细的
- ✅ 来自 pub.dev/feedback 的反馈构建器。
- ✅ 性能跟踪器。
- ✅ AI助手。
展示图
📜 展示 #
![](https://github.com/yelmuratoff/packages_assets/blob/main/assets/ispect/panel.png?raw=true)
![](https://github.com/yelmuratoff/packages_assets/blob/main/assets/ispect/draggable.png?raw=true)
![](https://github.com/yelmuratoff/packages_assets/blob/main/assets/ispect/feedback.png?raw=true)
![](https://github.com/yelmuratoff/packages_assets/blob/main/assets/ispect/logs.png?raw=true)
![](https://github.com/yelmuratoff/packages_assets/blob/main/assets/ispect/jira_auth.png?raw=true)
使用前准备
📌 在开始使用 Inspect Jira 前 #
为了进入 Jira 的授权页面,你需要打开 ISpect,点击“汉堡菜单”(动作),然后打开“Jira”。第一次会带你到授权页面,之后会带你到 Jira 工单创建页面。
- 接下来你会看到授权页面。如指示所示,你需要登录 Jira,点击你的头像并进入“账户管理”。
- 转到“设置”。
- 滚动到底部的“API 令牌”,点击“创建和管理 API 令牌”。
- 然后点击“创建 API 令牌”,复制并粘贴令牌到应用程序中。
你应该得到类似的东西。 在“项目域”字段中输入域名,例如 “anydevkz”,然后是你用来登录 Jira 的邮箱。它可以在设置中找到。 当你点击“授权”时,系统会验证你的数据,如果一切符合要求,你将需要选择你的活跃项目。这可以随时更改。
然后返回并当你再次进入 Jira 页面时,你将被带到任务创建页面。
在这里你可以选择一个项目,如前所述,这是一个中间的强制步骤。你选择一个项目并继续。但如果你需要,你可以切换到另一个项目。
另外,在 Jira 授权后,你将在描述问题时有一个“创建 Jira 工单”按钮。 它会立即带你到带有问题描述和截图附件的问题创建页面。
开始使用
📌 开始使用 #
遵循这些步骤来使用这个包:
简易使用
ISpect 的简单示例用法
你可以使用 ISpect.read(context)
来管理 ISpect。
将这段代码放在你的项目中的一个屏幕,并了解它是如何工作的。😊
使用说明:
-
将
runApp
包裹在ISpect.run
方法中,并传递一个ISpectify
实例。 -
在
MaterialApp
中初始化ISpectJiraClient
并传递必要的参数。 例如,从本地存储中获取。
ISpectJiraClient.initialize(
projectDomain: 'domain',
userEmail: 'example@example.com',
apiToken: 'token',
projectId: '10007',
projectKey: 'GTMS4',
);
- 在
ISpectOptions
的actionItems
中添加 Jira 动作按钮。
actionItems: [
ISpectifyActionItem(
title: 'ISpect',
icon: Icons.bug_report_outlined,
onTap: (context) {
if (ISpectJiraClient.isInitialized) {
Navigator.push(
context,
MaterialPageRoute<dynamic>(
builder: (_) => const JiraSendIssueScreen(),
settings: const RouteSettings(
name: 'Jira Send Issue Page',
),
),
);
} else {
Navigator.push(
context,
MaterialPageRoute<dynamic>(
builder: (_) => JiraAuthScreen(
onAuthorized: (domain, email, apiToken, projectId, projectKey) {
/// 保存到本地存储,例如 `shared_preferences`
},
),
settings: const RouteSettings(
name: 'Jira Auth Page',
),
),
);
}
},
),
],
- 在
MaterialApp
的localizationsDelegates
中添加ISpectJiraLocalization
。
localizationsDelegates: ISpectLocalizations.localizationDelegates([
ExampleGeneratedLocalization.delegate,
ISpectJiraLocalization.delegate,
]),
-
用
ISpectScopeWrapper
包装你的根小部件以启用ISpect
,你可以传递主题和选项。 -
在你的 Material App 的 builder 中添加
ISpectBuilder
小部件,并传递NavigatorObserver
,JiraFeedbackBuilder
。
child = ISpectBuilder(
observer: observer,
feedbackBuilder: (context, onSubmit, controller) => JiraFeedbackBuilder(
onSubmit: onSubmit,
theme: theme,
scrollController: controller,
),
initialPosition: (x: 0, y: 200),
onPositionChanged: (x, y) {
/// 保存到本地存储,例如 `shared_preferences`
},
child: child,
);
请检查 示例 获取更多详细信息。
注意
- 要添加
ISpect AI helper
,请遵循此处提供的说明 [ispect_ai](https://github.com/yelmuratoff/ispect/tree/main/packages/ispect_ai)。
你还可以直接在 [ispect_ai/example](https://github.com/yelmuratoff/ispect/tree/main/packages/ispect_ai/example) 查看使用示例。
- 要使用
平台 & 设备
工具,请遵循此处提供的说明 [ispect_device](https://github.com/yelmuratoff/ispect/tree/main/packages/ispect_device)。
你还可以直接在 [ispect_device/example](https://github.com/yelmuratoff/ispect/tree/main/packages/ispect_device/example) 查看使用示例。
参考包
示例代码
import 'package:flutter/material.dart';
import 'package:ispect/ispect.dart';
import 'package:ispect_jira/ispect_jira.dart';
import 'package:ispect_jira_example/src/core/localization/generated/app_localizations.dart';
import 'package:ispect_jira_example/theme_manager.dart';
void main() {
final iSpectify = ISpectifyFlutter.init();
ISpect.run(
() => runApp(
ThemeProvider(
child: App(iSpectify: iSpectify),
),
),
iSpectify: iSpectify,
isPrintLoggingEnabled: true,
);
}
class App extends StatefulWidget {
final ISpectify iSpectify;
const App({super.key, required this.iSpectify});
[@override](/user/override)
State<App> createState() => _AppState();
}
class _AppState extends State<App> {
[@override](/user/override)
void initState() {
super.initState();
ISpectJiraClient.initialize(
projectDomain: 'domain',
userEmail: 'example@example.com',
apiToken: 'token',
projectId: '10007',
projectKey: 'GTMS4',
);
}
[@override](/user/override)
Widget build(BuildContext context) {
const locale = Locale('en');
final observer = ISpectNavigatorObserver();
final themeMode = ThemeProvider.themeMode(context);
return ISpectScopeWrapper(
options: ISpectOptions(
locale: locale,
panelButtons: [
(
icon: Icons.copy_rounded,
label: 'Token',
onTap: (context) {
debugPrint('Token copied');
},
),
],
panelItems: [
(
icon: Icons.home,
enableBadge: false,
onTap: (context) {
debugPrint('Home');
},
),
],
actionItems: [
ISpectifyActionItem(
title: 'ISpect',
icon: Icons.bug_report_outlined,
onTap: (context) {
if (ISpectJiraClient.isInitialized) {
Navigator.push(
context,
MaterialPageRoute<dynamic>(
builder: (_) => const JiraSendIssueScreen(),
settings: const RouteSettings(
name: 'Jira Send Issue Page',
),
),
);
} else {
Navigator.push(
context,
MaterialPageRoute<dynamic>(
builder: (_) => JiraAuthScreen(
onAuthorized: (domain, email, apiToken, projectId, projectKey) {
ISpect.good(
'''✅ Jira authorized:
Project domain: $domain
User email: $email
Project id: $projectId
API token: $apiToken
Project key: $projectKey''',
);
},
),
settings: const RouteSettings(
name: 'Jira Auth Page',
),
),
);
}
},
),
],
),
isISpectEnabled: true,
child: MaterialApp(
navigatorObservers: [observer],
locale: locale,
supportedLocales: ExampleGeneratedLocalization.supportedLocales,
localizationsDelegates: ISpectLocalizations.localizationDelegates([
ExampleGeneratedLocalization.delegate,
ISpectJiraLocalization.delegate,
]),
theme: ThemeData.from(
colorScheme: ColorScheme.fromSeed(
seedColor: Colors.blue,
brightness: Brightness.light,
),
),
darkTheme: ThemeData.from(
colorScheme: ColorScheme.fromSeed(
seedColor: Colors.blue,
brightness: Brightness.dark,
),
),
themeMode: themeMode,
builder: (context, child) {
child = ISpectBuilder(
observer: observer,
feedbackBuilder: (context, onSubmit, controller) => JiraFeedbackBuilder(
onSubmit: onSubmit,
theme: Theme.of(context),
scrollController: controller,
),
initialPosition: (x: 0, y: 200),
onPositionChanged: (x, y) {
debugPrint('x: $x, y: $y');
},
child: child,
);
return child;
},
home: const _Home(),
),
);
}
}
class _Home extends StatelessWidget {
const _Home();
[@override](/user/override)
Widget build(BuildContext context) {
final themeMode = ThemeProvider.themeMode(context);
return Scaffold(
appBar: AppBar(
title: Text(ExampleGeneratedLocalization.of(context)!.app_title),
actions: [
IconButton(
icon: Icon(
themeMode == ThemeMode.dark ? Icons.dark_mode : Icons.light_mode,
),
onPressed: () {
ThemeProvider.toggleTheme(context);
},
),
],
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
ElevatedButton(
onPressed: () {
ISpect.good('Good log');
ISpect.info('Info log');
ISpect.warning('Warning log');
},
child: const Text('Print some logs'),
),
],
),
),
);
}
}
更多关于Flutter JIRA集成插件ispect_jira的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter JIRA集成插件ispect_jira的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是如何在Flutter项目中集成并使用ispect_jira
插件的一个基本示例。这个插件可以帮助你与JIRA进行集成,以便执行一些常见的操作,比如获取项目、问题等。
首先,确保你已经在Flutter项目的根目录下。
第一步:添加依赖
在pubspec.yaml
文件中添加ispect_jira
依赖:
dependencies:
flutter:
sdk: flutter
ispect_jira: ^最新版本号 # 请检查pub.dev以获取最新版本号
然后运行以下命令来安装依赖:
flutter pub get
第二步:配置JIRA API
你需要获取JIRA API的访问令牌(API Token)和JIRA实例的URL。
第三步:使用ispect_jira
插件
以下是一个基本的示例,展示了如何使用ispect_jira
插件来获取JIRA项目列表。
main.dart
import 'package:flutter/material.dart';
import 'package:ispect_jira/ispect_jira.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter JIRA Integration',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: MyHomePage(),
);
}
}
class MyHomePage extends StatefulWidget {
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
final JiraClient jiraClient = JiraClient(
baseUrl: 'https://your-jira-instance.atlassian.net', // 替换为你的JIRA实例URL
apiToken: 'your-api-token', // 替换为你的API Token
);
List<Project> projects = [];
@override
void initState() {
super.initState();
fetchProjects();
}
Future<void> fetchProjects() async {
try {
final result = await jiraClient.getProjects();
setState(() {
projects = result;
});
} catch (error) {
print('Error fetching projects: $error');
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Flutter JIRA Integration'),
),
body: Padding(
padding: const EdgeInsets.all(8.0),
child: projects.isEmpty
? Center(child: Text('Loading projects...'))
: ListView.builder(
itemCount: projects.length,
itemBuilder: (context, index) {
final project = projects[index];
return ListTile(
title: Text(project.name),
subtitle: Text(project.key),
);
}),
),
);
}
}
JiraClient.dart (假设插件提供了这样的类,实际可能有所不同)
请注意,以下JiraClient
类是一个假设的实现,因为ispect_jira
插件的具体API可能会有所不同。你需要参考插件的官方文档或源代码来获取正确的类和方法。
class JiraClient {
final String baseUrl;
final String apiToken;
JiraClient({required this.baseUrl, required this.apiToken});
Future<List<Project>> getProjects() async {
// 这是一个假设的实现,实际API调用可能有所不同
final response = await http.get(Uri.parse('$baseUrl/rest/api/3/project'), headers: {
'Authorization': 'Bearer $apiToken',
'Content-Type': 'application/json',
});
if (response.statusCode == 200) {
final data = await response.json();
return data['values'].map((projectData) => Project.fromJson(projectData)).toList();
} else {
throw Exception('Failed to fetch projects');
}
}
}
class Project {
String self;
String id;
String key;
String name;
String projectTypeKey;
bool simplified;
String avatarUrls;
Project.fromJson(Map<String, dynamic> json) {
self = json['self'];
id = json['id'];
key = json['key'];
name = json['name'];
projectTypeKey = json['projectTypeKey'];
simplified = json['simplified'];
avatarUrls = json['avatarUrls'];
}
}
注意事项
- API版本:确保你使用的JIRA REST API版本与插件兼容。
- 权限:确保你的API Token具有足够的权限来执行所需的操作。
- 错误处理:在生产代码中,添加更多的错误处理和用户反馈。
- 依赖版本:总是检查
pub.dev
上的最新版本,并更新你的pubspec.yaml
文件。
这个示例应该能帮助你开始在Flutter项目中集成ispect_jira
插件。如果你遇到任何问题,请参考插件的官方文档或源代码以获取更多详细信息。