flutter_jira_issue_collector
Jira Issue Collector for Flutter -- fetch collector fields dynamically, show customizable forms, or submit issues programmatically in the background.
Features
- Fetches issue collector form fields dynamically from Jira (Data Center / Server)
- Shows a customizable form UI using builder pattern (bring your own widgets)
- Submits issues programmatically in the background without any UI
- Prefill and hide specific fields (e.g. email, reporter name)
- Includes default Material field renderers as opt-in fallback
- Full-screen dialog and bottom sheet presentation modes
Getting Started
Add the package to your pubspec.yaml:
dependencies:
flutter_jira_issue_collector: ^0.1.0
Usage
Setup
import 'package:flutter_jira_issue_collector/flutter_jira_issue_collector.dart';
final collector = JiraIssueCollector(
config: JiraCollectorConfig(
baseUrl: 'https://jira.example.com',
collectorId: '3e3ffaf3',
),
);
Background Mode (silent submission)
Submit issues programmatically without showing any UI:
final result = await collector.submitInBackground(
fieldValues: {
'summary': 'Crash on login screen',
'description': 'App crashes when tapping the login button on Android 14.',
'email': 'user@example.com',
},
);
if (result.success) {
print('Issue created: ${result.issueKey}');
}
UI Mode (dynamic form)
Open a full-screen dialog with fields fetched from the collector:
final result = await collector.showCollector(context);
UI Mode with Prefill + Hidden Fields
Prefill fields like email and hide them from the user:
final result = await collector.showCollector(
context,
prefillValues: {
'email': 'user@example.com',
'fullname': 'John Doe',
},
hiddenFieldIds: {'email', 'fullname'},
);
Bottom Sheet
final result = await collector.showCollectorBottomSheet(context);
Custom Field Rendering
Use builders to fully control the form UI:
final result = await collector.showCollector(
context,
fieldBuilder: (context, field, controller, onChanged, defaultWidget) {
if (field.id == 'description') {
return MyCustomDescriptionField(controller: controller);
}
return defaultWidget; // fallback to Material widget
},
layoutBuilder: (context, fieldWidgets, onSubmit, isSubmitting) {
return MyCustomFormLayout(
fields: fieldWidgets,
onSubmit: onSubmit,
isSubmitting: isSubmitting,
);
},
);
Inspect Available Fields
Fetch fields without showing UI -- useful for discovering field IDs:
final fields = await collector.fetchFields();
for (final field in fields) {
print('${field.id}: ${field.label} (${field.type}, required: ${field.required})');
}
Jira Setup
- In Jira, go to Administration > Issue Collectors
- Create or edit a collector
- Copy the collector ID from the embed script URL:
.../issueCollectorBootstrap.js?collectorId=3e3ffaf3 - Use your Jira base URL and collector ID in
JiraCollectorConfig
Cleanup
collector.dispose();
License
MIT
Libraries
- flutter_jira_issue_collector
- A Flutter package to connect to Jira Issue Collector — fetch fields dynamically, show customizable forms, or submit issues programmatically in the background.