tp_feedback version: 3.2.3

Published 2026-08-29

n/a

sdk | dart flutter
repository | svn
platform | n/a
status | n/a
  • Readme
  • Changelog
  • Versions

taken from version: 3.2.0

copied due to outdated dependencies.

Feedback

pub.dev feedback workflow code coverage Sponsoring likes popularity pub points

Flutter Favorite

A Flutter package for obtaining better feedback. It allows the user to provide interactive feedback directly in the app, by annotating a screenshot of the current page, as well as by adding text.

Example Image

Package of the week video

Demo

An interactive web example is available here: Online demo. It also contains a small tutorial on how to use this library.

Motivation

It is often quite hard to achieve a very good user experience. The most important aspect of creating a good user experience is to obtain and to listen to feedback of your user. Focus groups are one solution to this problem but it is quite expensive. Another solution is to use this library to obtain direct feedback of your users. This library is lightweight and easy to integrate and makes it really easy for your users to send valuable feedback to you.

By obtaining the feedback with an annotated image it is much easier for you get a good understanding of your users problem with a certain feature or screen of your app. It is like the saying "A picture is worth a thousand words" because a textual description can be interpreted in many ways which makes it harder to understand.

🚀 Getting Started

Setup

First, you will need to add feedback to your pubspec.yaml. The latest version is pub.dev.

dependencies:
  flutter:
    sdk: flutter
  feedback: x.y.z # use the latest version found on pub.dev

Then, run flutter pub get in your terminal.

If you're using Flutter for Web, you have to build the project with flutter build web --web-renderer canvaskit. For more information on the CanvasKit renderer please look into Flutters documentation.

Use it

Just wrap your app in a BetterFeedback widget. To show the feedback view just call BetterFeedback.of(context).show(...);. The callback gets called when the user submits his feedback.

import 'package:feedback/feedback.dart';
import 'package:flutter/material.dart';

void main() {
  runApp(
    BetterFeedback(
      child: const MyApp(),
    ),
  );
}

Provide a way to show the feedback panel by calling

BetterFeedback.of(context).show((UserFeedback feedback) {
  // Do something with the feedback
});

Provide a way to hide the feedback panel by calling BetterFeedback.of(context).hide();

Use the feedback

Depending on your use case there are wide variety of solutions. These are a couple suggestions:

GitLab plugin

The feedback_gitlab plugin creates an issue on GitLab for each feedback submitted by the users.

Just use it as shown in the following example. It openes the feedback ui and after the user has submitted his feedback, it gets automatically uploaded to GitLab.

import 'package:feedback_gitlab/feedback_gitlab.dart';

BetterFeedback.of(context).showAndUploadToGitLab(
    projectId: 'project-Id', // Required, use your GitLab project id
    apiToken: 'api-token', // Required, use your GitLab API token
    gitlabUrl: 'gitlab.org', // Optional, defaults to 'gitlab.com'
);

The API token needs access to read_api and write_repository. See GitLabs docs for more information on API tokens.

Sentry plugin

The feedback_sentry submits the feedback to Sentry as Sentry User Feedback. It works with sentry and sentry_flutter.

Just use it as shown in the following example. It openes the feedback ui and after the user has submitted his feedback, it gets automatically uploaded to Sentry.

import 'package:feedback_sentry/feedback_sentry.dart';

BetterFeedback.of(context).showAndUploadToSentry(
    name: 'Foo Bar', // optional
    email: 'foo_bar@example.com', // optional
);

Other use cases

Target Notes
Upload to a server To upload the feedback to a server you should use for example a MultipartRequest.
Share via platform share dialog share_plus on pub.dev. Also shown in the example.
Firebase Firestore, Cloud Storage, Database
Jira Jira has a REST API to create issues and upload files
Trello Trello has a REST API to create issues and upload files
E-Mail You can use the users email client like in the sample app to send feedback to yourself using the flutter_email_sender plugin.

If you have sample code on how to upload it to a platform, I would appreciate a pull request to the example app.

🎨 Configuration & customization

import 'package:feedback/feedback.dart';
import 'package:flutter/material.dart';
import 'package:flutter_localizations/flutter_localizations.dart';

void main() {
  runApp(
    BetterFeedback(
      child: const MyApp(),
      theme: FeedbackThemeData(
        background: Colors.grey,
        feedbackSheetColor: Colors.grey[50]!,
        drawColors: [
          Colors.red,
          Colors.green,
          Colors.blue,
          Colors.yellow,
        ],
      ),
      localizationsDelegates: [
        GlobalMaterialLocalizations.delegate,
        GlobalCupertinoLocalizations.delegate,
        GlobalWidgetsLocalizations.delegate,
        GlobalFeedbackLocalizationsDelegate(),
      ],
      localeOverride: const Locale('en'),
    ),
  );
}

How the properties of FeedbackThemeData correspond to the view can be seen in the following image. Theme Usages

Changing the localizations texts

You can customize the localizations as follows. Create your own implementation of FeedbackLocalizations or subclass one of the existing translations, if you just want to change one or two texts. Then create your own GlobalFeedbackLocalizationsDelegate and pass it to BetterFeedback.

class CustomFeedbackLocalizations implements FeedbackLocalizations {
  // ...
}

class CustomFeedbackLocalizationsDelegate
    extends GlobalFeedbackLocalizationsDelegate {
  static final supportedLocales = <Locale, FeedbackLocalizations>{
    // remember to change the locale identifier
    // as well as that defaultLocale (defaults to en) should ALWAYS be
    // present here or overridden
    const Locale('en'): const CustomFeedbackLocalizations(),
  };
}

void main() {
  runApp(
    BetterFeedback(
      child: const MyApp(),
      localizationsDelegates: [
        GlobalMaterialLocalizations.delegate,
        GlobalCupertinoLocalizations.delegate,
        GlobalWidgetsLocalizations.delegate,
        CustomFeedbackLocalizationsDelegate(),
      ],
    ),
  );
}

💡 Tips, tricks and usage scenarios

  • You can combine this with device_info_plus and package_info_plus to get additional information about the users environment to better understand his feedback and debug his issues.
  • You can record the users navigation with a NavigatorObserver and send it as an addition to the feedback of the user. This way you know how the user got to the location shown in the screenshot.
  • Use it as an internal quality control tool

⚠️ Known Issues and limitations

  • Platform views are invisible in screenshots (like webview or Google Maps). For further details, see this Flutter issue.
  • Web only works with Flutter's CanvasKit Renderer. For more information on how to use it, see Flutter Web Renderer docs.
  • If you are using showDialog, you will notice that the Dialog is rendered above the BetterFeedback. To prevent this you have to set useRootNavigator in showDialog to false.

📣 Maintainer

Hey, I'm Jonas Uekötter. I created this awesome software. Visit my GitHub profile and follow me on Twitter. If you like this, please leave a like or star it on GitHub.

Issues, questions and contributing

You can raise issues here. If you've got a question do not hesitate to ask it here. Contributions are also welcome. You can do a pull request on GitHub here. Please take a look at up for grabs issues first.

[3.2.0]

3.2.3 - 2026-08-29

Changed

  • Version bump from 3.2.2 to 3.2.3 (flutter 3.47.2, dart 3.13.2, serverpod 3.4.13).

3.2.2 - 2026-08-25

Changed

  • Version bump from 3.2.1 to 3.2.2 (cupertino_ui -> 1.0.1 (was 1.0.0)).

3.2.1 - 2026-08-25

Changed

  • Version bump from 3.2.0 to 3.2.1 (material_ui -> 1.1.0 (was 1.0.1)).

  • Hebrew translations

  • Bangla translations

  • Fixed an issue with focus on web (https://github.com/ueman/feedback/pull/359)

  • Bump to Flutter 3.24 and Dart 3.5

[3.1.0]

  • Fix dialog pop issue #293. This may break custom feedback builder. Make sure to test those before updating.

[3.0.1]

  • Theme is now able to configure more UI elements

[3.0.0]

  • Require Flutter 3.10.0
  • Require Dart 3.0.0
  • Add dark mode
  • Improve feedback controller

[2.6.0]

  • Require Flutter 3.0.0

[2.5.0]

  • Added polish language
  • Requires at least Flutter 2.10.0
  • Compatibility with Flutter 3
  • Reuses MediaQuery if available

[2.4.1]

  • Fix backspace not working in some cases (#120, #177)

[2.4.0]

  • Improve overriding of localization texts

[2.3.1]

  • Removed meta dependency

[2.3.0]

  • bottom sheet gets closed on back press
  • Added support for the following languages: russian (ru), ukrainian (uk), turkish (tr), simimplified chinese (zh)
  • Breaking if you're using a custom feedbackBuilder
  • Fixes 152, 138, 88

[2.2.1]

  • The feedback ui always opens in the configured mode #137
  • Added support for arabic language #140

[2.2.0+4]

  • Improve documentation

[2.2.0+3]

  • Use correct license text

[2.2.0]

  • BetterFeedback.of() now returns a FeebdackController instead of FeedbackData. This should be non-breaking change for most users.
  • Improve documentation

[2.1.0]

  • The back button now intelligently reverses drawings and closes the drawing mode
  • OnFeedbackCallback accepts a FutureOr. Previously it just accepted void callbacks.

[2.0.0]

THIS IS A BREAKING CHANGE

  • Current feedback mode is highlighted
  • Add ability to add custom feedback forms
  • BetterFeedback.of() returns an instance or throws
  • BetterFeedback.of().show() gives an instance of UserFeedback
  • Removed consoleFeedbackFunction and alertFeedbackFunction
  • Default feedback mode changed to draw

[1.2.2]

  • Documentation update

[1.2.1]

  • Enter-Button on the keyboard dismisses the keyboard
  • Improved example app

[1.2.0]

  • Add option for changing the quality and size of the screenshot (BetterFeedback.pixelRatio)

[1.1.0]

  • Fix Flutter Web (#13, #50)
  • Add option for changing the default feedback mode

[1.0.2]

  • Fix: Color Icon buttons are bigger to improve accessibility
  • Fix: Clear drawing after sending feedback (#46)

[1.0.1]

  • Fix an issue where the drawing would't make it onto the feedback image

[1.0.0]

  • stable null safe release

[1.0.0-nullsafety.2]

  • Update meta to ^1.3.0

[1.0.0-nullsafety.1]

  • Fix deprecation warnings

[1.0.0-nullsafety.0+1]

  • Improve Readme

[1.0.0-nullsafety]

  • Migrated to nullsafety

[1.0.0-beta]

  • Removed dependency on MaterialApp
  • Use Flutter mechanism for localization
  • Theming is now done through FeedbackTheme

[0.2.1+1] - 06. April 2020

  • better readme

[0.2.1] - 08. March 2020

Changed

  • Text instead of Icons for drawing and navigating
  • round stroke caps for drawn paths

[0.2.0] - 22. February 2020

This is the first non-beta version.

Added

  • Colors are now more customizable

Changed

  • Usage of the ControlsColumn hides the keyboard, which should result in better usability

[0.1.0-beta] - 15. February 2020

Fixed

  • Screenshots are taken correctly without any transparent border
  • The bottom insets are taken into consideration while the feedback view is active

Changed

  • Hopefully the new icons in the ControlsColumn are more intuitive

[0.0.1] - 8. February 2020

  • initial release

3.2.3

2026-08-29 download