{"id":48844218,"url":"https://github.com/swiftly-developed/swiftlyfeedbackkit-flutter-sdk","last_synced_at":"2026-04-24T02:10:01.610Z","repository":{"id":337558246,"uuid":"1152836098","full_name":"Swiftly-Developed/SwiftlyFeedbackKit-Flutter-SDK","owner":"Swiftly-Developed","description":"Flutter SDK for FeedbackKit","archived":false,"fork":false,"pushed_at":"2026-04-15T02:28:51.000Z","size":63,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-04-15T03:22:07.343Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://feedbackkit.swiftly-workspace.com","language":"Dart","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Swiftly-Developed.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-02-08T14:10:37.000Z","updated_at":"2026-04-15T01:29:52.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/Swiftly-Developed/SwiftlyFeedbackKit-Flutter-SDK","commit_stats":null,"previous_names":["swiftly-developed/swiftlyfeedbackkit-flutter-sdk"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/Swiftly-Developed/SwiftlyFeedbackKit-Flutter-SDK","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Swiftly-Developed%2FSwiftlyFeedbackKit-Flutter-SDK","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Swiftly-Developed%2FSwiftlyFeedbackKit-Flutter-SDK/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Swiftly-Developed%2FSwiftlyFeedbackKit-Flutter-SDK/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Swiftly-Developed%2FSwiftlyFeedbackKit-Flutter-SDK/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Swiftly-Developed","download_url":"https://codeload.github.com/Swiftly-Developed/SwiftlyFeedbackKit-Flutter-SDK/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Swiftly-Developed%2FSwiftlyFeedbackKit-Flutter-SDK/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31825515,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-14T18:05:02.291Z","status":"online","status_checked_at":"2026-04-15T02:00:06.175Z","response_time":63,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-04-15T04:02:25.524Z","updated_at":"2026-04-15T04:02:27.504Z","avatar_url":"https://github.com/Swiftly-Developed.png","language":"Dart","funding_links":[],"categories":[],"sub_categories":[],"readme":"# FeedbackKit Flutter SDK\n\nFlutter SDK for [FeedbackKit](https://feedbackkit.app) - A feedback collection platform for your apps.\n\n## Features\n\n- **Easy Integration**: Simple provider-based setup with `FeedbackKitProvider`\n- **Pre-built Widgets**: Ready-to-use `FeedbackList`, `FeedbackCard`, `SubmitFeedbackView`, and more\n- **Theming**: Fully customizable themes with light and dark mode support\n- **Optimistic Updates**: Vote buttons update instantly for great UX\n- **Type-Safe**: Full type safety with Dart's strong typing\n\n## Installation\n\nAdd to your `pubspec.yaml`:\n\n```yaml\ndependencies:\n  feedbackkit_flutter: ^1.0.0\n```\n\nThen run:\n\n```bash\nflutter pub get\n```\n\n## Quick Start\n\n### 1. Wrap your app with FeedbackKitProvider\n\n```dart\nimport 'package:feedbackkit_flutter/feedbackkit_flutter.dart';\n\nvoid main() {\n  runApp(\n    FeedbackKitProvider(\n      apiKey: 'your-api-key',\n      child: MyApp(),\n    ),\n  );\n}\n```\n\n### 2. Display the feedback list\n\n```dart\nclass FeedbackPage extends StatelessWidget {\n  @override\n  Widget build(BuildContext context) {\n    return Scaffold(\n      appBar: AppBar(title: Text('Feedback')),\n      body: FeedbackList(\n        onFeedbackTap: (feedback) {\n          // Navigate to detail view\n        },\n      ),\n    );\n  }\n}\n```\n\n### 3. Add a submit feedback form\n\n```dart\nSubmitFeedbackView(\n  onSubmitted: (feedback) {\n    // Handle submission\n    Navigator.pop(context);\n  },\n  onCancel: () {\n    Navigator.pop(context);\n  },\n)\n```\n\n## Configuration\n\n### FeedbackKitProvider Options\n\n| Option | Type | Required | Description |\n|--------|------|----------|-------------|\n| `apiKey` | `String` | Yes | Your FeedbackKit API key |\n| `userId` | `String` | No | Initial user ID for the session |\n| `theme` | `FeedbackKitTheme` | No | Custom theme configuration |\n\n### Theming\n\n```dart\nFeedbackKitProvider(\n  apiKey: 'your-api-key',\n  theme: FeedbackKitTheme(\n    primaryColor: Color(0xFF6366F1),\n    backgroundColor: Color(0xFFF9FAFB),\n    cardBackgroundColor: Color(0xFFFFFFFF),\n    textColor: Color(0xFF111827),\n    secondaryTextColor: Color(0xFF6B7280),\n    borderRadius: 12.0,\n    spacing: 8.0,\n    statusColors: StatusColors(\n      pending: Color(0xFF6B7280),\n      approved: Color(0xFF3B82F6),\n      inProgress: Color(0xFFF97316),\n      testflight: Color(0xFF06B6D4),\n      completed: Color(0xFF22C55E),\n      rejected: Color(0xFFEF4444),\n    ),\n    categoryColors: CategoryColors(\n      featureRequest: Color(0xFF8B5CF6),\n      bugReport: Color(0xFFEF4444),\n      improvement: Color(0xFF3B82F6),\n      other: Color(0xFF6B7280),\n    ),\n  ),\n  child: MyApp(),\n)\n```\n\nUse the dark theme preset:\n\n```dart\ntheme: FeedbackKitTheme.dark,\n```\n\n## Widgets\n\n### FeedbackList\n\nDisplays a scrollable list of feedback items with pull-to-refresh.\n\n```dart\nFeedbackList(\n  autoLoad: true,\n  onFeedbackTap: (feedback) {},\n  onVoteChange: (feedback, response) {},\n  emptyBuilder: (context) =\u003e Text('No feedback yet'),\n  errorBuilder: (context, error) =\u003e Text('Error: $error'),\n  loadingBuilder: (context) =\u003e CircularProgressIndicator(),\n)\n```\n\n### FeedbackCard\n\nA card displaying a single feedback item.\n\n```dart\nFeedbackCard(\n  feedback: feedback,\n  onTap: () {},\n  onVoteChange: (response) {},\n)\n```\n\n### FeedbackDetailView\n\nFull detail view with comments.\n\n```dart\nFeedbackDetailView(\n  feedback: feedback,\n  onVoteChange: (response) {},\n)\n```\n\n### SubmitFeedbackView\n\nForm for submitting new feedback.\n\n```dart\nSubmitFeedbackView(\n  initialCategory: FeedbackCategory.featureRequest,\n  onSubmitted: (feedback) {},\n  onCancel: () {},\n)\n```\n\n### StatusBadge / CategoryBadge\n\nBadges for displaying status and category.\n\n```dart\nStatusBadge(status: FeedbackStatus.approved)\nCategoryBadge(category: FeedbackCategory.bugReport)\n```\n\n### VoteButton\n\nButton for voting with optimistic updates.\n\n```dart\nVoteButton(\n  feedback: feedback,\n  size: VoteButtonSize.medium,\n  showCount: true,\n  onVoteChange: (response) {},\n)\n```\n\n## Direct API Access\n\nAccess the API client directly for custom implementations:\n\n```dart\nfinal context = FeedbackKitProvider.of(context);\n\n// List feedback\nfinal feedbackItems = await context.client.feedback.list(\n  ListFeedbackOptions(\n    status: FeedbackStatus.approved,\n    category: FeedbackCategory.featureRequest,\n  ),\n);\n\n// Create feedback\nfinal feedback = await context.client.feedback.create(\n  CreateFeedbackRequest(\n    title: 'New feature',\n    description: 'Description here',\n    category: FeedbackCategory.featureRequest,\n  ),\n);\n\n// Vote\nfinal response = await context.client.votes.vote(feedbackId);\n\n// Unvote\nfinal response = await context.client.votes.unvote(feedbackId);\n\n// List comments\nfinal comments = await context.client.comments.list(feedbackId);\n\n// Add comment\nfinal comment = await context.client.comments.create(\n  feedbackId,\n  CreateCommentRequest(content: 'Great idea!'),\n);\n\n// Track events\nawait context.client.events.trackEvent(\n  'feedback_viewed',\n  properties: {'feedbackId': feedbackId},\n);\n```\n\n## User Management\n\nSet a user ID to associate feedback and votes with a user:\n\n```dart\n// Via provider\nFeedbackKitProvider(\n  apiKey: 'your-api-key',\n  userId: 'user-123',\n  child: MyApp(),\n)\n\n// Or programmatically\nfinal context = FeedbackKitProvider.of(context);\nawait context.setUserId('user-123');\n```\n\nRegister user details:\n\n```dart\nawait context.client.users.register(\n  RegisterUserRequest(\n    id: 'user-123',\n    email: 'user@example.com',\n    name: 'John Doe',\n  ),\n);\n```\n\n## Error Handling\n\nThe SDK throws specific exceptions for different error cases:\n\n```dart\ntry {\n  await context.client.feedback.create(request);\n} on AuthenticationError catch (e) {\n  // Invalid API key (401)\n} on PaymentRequiredError catch (e) {\n  // Upgrade required (402)\n} on ForbiddenError catch (e) {\n  // Access denied (403)\n} on NotFoundError catch (e) {\n  // Resource not found (404)\n} on ValidationError catch (e) {\n  // Invalid input (400)\n} on NetworkError catch (e) {\n  // Connection issues\n} on FeedbackKitError catch (e) {\n  // Other errors\n}\n```\n\n## Running the Example\n\n```bash\ncd example\nflutter pub get\nflutter run\n```\n\nMake sure to replace `'your-api-key-here'` with your actual API key from [feedbackkit.app](https://feedbackkit.app).\n\n## Requirements\n\n- Flutter 3.10.0 or higher\n- Dart 3.0.0 or higher\n\n## License\n\nMIT License - see [LICENSE](LICENSE) for details.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fswiftly-developed%2Fswiftlyfeedbackkit-flutter-sdk","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fswiftly-developed%2Fswiftlyfeedbackkit-flutter-sdk","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fswiftly-developed%2Fswiftlyfeedbackkit-flutter-sdk/lists"}