Code Monkey home page Code Monkey logo

feedback's Introduction

feedback's People

Contributors

ajnaf avatar apomalyn avatar ardakalayci avatar bgetsug avatar calcitem avatar caseycrogers avatar diegoveloper avatar filiponesco avatar jamescullum avatar jesushdez960717 avatar jrc2139 avatar koheikanagu avatar leptopoda avatar marioskoni avatar mduruisseau avatar mohammadhosseinnrz avatar niclasvaneyk avatar ploth avatar quoc-huynh-cosee avatar rbustillosdev avatar reju1021 avatar renovate-bot avatar renovate[bot] avatar rohitbhoite avatar s-ecki avatar sils avatar ueman avatar viniciusamelio avatar vinzent03 avatar zazo032 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

feedback's Issues

Improve readme

The Readme contains a few old/dead links and flutter plugins should now link to plus plugins.

Also there should be a discussion about use cases which should be linked in the readme.

Tell users to vote for issues by thumbs up.

Problems with dialogs and navigation

Hello,

First of all, thank you for this package, it will be very useful to the beta of my app !

However, I found and issue integrating it in my app. The dialog stays visible even after I navigated to an other screen.

To reproduce it, you have to :

  1. Show a dialog
  2. Navigate to an other screen by clicking on a button in this dialog for example
  3. The new route is displayed but the dialog is still visible

This is an example code to reproduce it :

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

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return BetterFeedback(
      child: MaterialApp(
        title: 'Flutter Demo',
        theme: ThemeData(
          primarySwatch: Colors.blue,
        ),
        // home: HomePage(),
        routes: {
          HomePage.routeName: (context) => HomePage(),
          Page1.routeName: (context) => Page1(),
        },
        builder: (originalContext, child) {
          return Scaffold(body: SafeArea(child: child));
        },
      ),
      onFeedback: (
        BuildContext context,
        String feedbackText, // the feedback from the user
        Uint8List feedbackScreenshot, // raw png encoded image data
      ) {
        BetterFeedback.of(context).hide();
      },
    );
  }
}

class HomePage extends StatelessWidget {
  static const String routeName = "/";
  @override
  Widget build(BuildContext context) {
    return Container(
        color: Colors.lime,
        child:
            Column(mainAxisAlignment: MainAxisAlignment.spaceAround, children: [
          Text("Home Page"),
          RaisedButton(
            child: Text("Open Feedback"),
            onPressed: () {
              BetterFeedback.of(context).show();
            },
          ),
          RaisedButton(
            child: Text("Dialog to go to Page 1"),
            onPressed: () {
              _dialog(context, "Go to Page 1 ?", Page1.routeName);
            },
          ),
        ]));
  }

  _dialog(BuildContext context, String title, String routeName) {
    showDialog(
        context: context,
        barrierDismissible: true,
        builder: (_) => AlertDialog(
            shape: RoundedRectangleBorder(
              borderRadius: BorderRadius.circular(32.0),
            ),
            backgroundColor: Colors.white,
            title: Text(
              title,
              textAlign: TextAlign.center,
            ),
            content: Column(
              mainAxisSize: MainAxisSize.min,
              children: [
                RaisedButton(
                  child: Text("OK"),
                  onPressed: () {
                    Navigator.of(context).pushNamed(routeName);
                  },
                )
              ],
            )));
  }
}

class Page1 extends StatelessWidget {
  static const String routeName = "/pages/page1";
  @override
  Widget build(BuildContext context) {
    return Container(
        color: Colors.red,
        child:
            Column(mainAxisAlignment: MainAxisAlignment.spaceAround, children: [
          RaisedButton(
            child: Text("BACK"),
            onPressed: () {
              Navigator.of(context).pop();
            },
          ),
          Text("Page 1")
        ]));
  }
}

I have tried to pop the dialog before opening in case it was not related to the library itself, and I found out that I may have problems with that too.
The only way to pop() correctly is in this case to set the rootNavigator argument to true in the Navigator.of(context) method.

Here is my _dialog() method updated :

_dialog(BuildContext context, String title, String routeName) {
    showDialog(
        context: context,
        barrierDismissible: true,
        builder: (_) => AlertDialog(
            shape: RoundedRectangleBorder(
              borderRadius: BorderRadius.circular(32.0),
            ),
            backgroundColor: Colors.white,
            title: Text(
              title,
              textAlign: TextAlign.center,
            ),
            content: Column(
              mainAxisSize: MainAxisSize.min,
              children: [
                RaisedButton(
                  child: Text("OK"),
                  onPressed: () {
                    // pop() doesn't pop()
                    // Navigator.of(context).pop();

                    // pop() is now working
                    Navigator.of(context, rootNavigator: true).pop();

                    // push to new route
                    Navigator.of(context).pushNamed(routeName);
                  },
                )
              ],
            )));
  }

I think it's related to the fact that the BetterFeedback widget uses a MaterialApp as well, then it introduces an other Navigator and it gets a bit complicated...

What to do with feedback

Hi,
This looks like a cool plugin!
I couldn't figure out how the user should actually send the feedback.
Thanks.

Unable to delete text in MacOS desktop app

Describe the bug
After typing some feedback, the delete key cannot be used to delete on MacOS desktop.

Version of the library
This is an issue in latest stable 1.2.2 as well as 2.0.0-beta

Expected behavior
Delete key should delete text.

void main() {
  runApp(
    BetterFeedback(
      mode: FeedbackMode.draw,
      theme: FeedbackThemeData(
        background: Color(0xFF747474),
        feedbackSheetColor: Colors.grey[50]!,
        drawColors: [
          Colors.red,
          Colors.green,
          Colors.blue,
          Colors.yellow,
        ],
      ),
      child: const ProviderScope(
        child: Shell(),
      ),
    ),
  );
}
[✓] Flutter (Channel master, 2.3.0-17.0.pre.98, on macOS 11.2.3 20D91 darwin-x64, locale en-US)
    • Flutter version 2.3.0-17.0.pre.98 at /Users/tyler/development/flutter
    • Upstream repository https://github.com/flutter/flutter.git
    • Framework revision 5c92c5f2c8 (10 days ago), 2021-05-27 16:44:03 -0400
    • Engine revision cd4ce935c4
    • Dart version 2.14.0 (build 2.14.0-153.0.dev)

[!] Android toolchain - develop for Android devices (Android SDK version 29.0.2)
    ✗ cmdline-tools component is missing
      Run `path/to/sdkmanager --install "cmdline-tools;latest"`
      See https://developer.android.com/studio/command-line for more details.
    ✗ Android license status unknown.
      Run `flutter doctor --android-licenses` to accept the SDK licenses.
      See https://flutter.dev/docs/get-started/install/macos#android-setup for more details.

[✓] Xcode - develop for iOS and macOS
    • Xcode at /Applications/Xcode.app/Contents/Developer
    • Xcode 12.4, Build version 12D4e
    • CocoaPods version 1.10.0

[✓] Chrome - develop for the web
    • Chrome at /Applications/Google Chrome.app/Contents/MacOS/Google Chrome

[✓] Android Studio (version 3.5)
    • Android Studio at /Applications/Android Studio.app/Contents
    • Flutter plugin version 42.1.1
    • Dart plugin version 191.8593
    • Java version OpenJDK Runtime Environment (build 1.8.0_202-release-1483-b49-5587405)

[✓] VS Code (version 1.56.2)
    • VS Code at /Applications/Visual Studio Code.app/Contents
    • Flutter extension version 3.23.0

[✓] Connected device (2 available)
    • macOS (desktop) • macos  • darwin-x64     • macOS 11.2.3 20D91 darwin-x64
    • Chrome (web)    • chrome • web-javascript • Google Chrome 91.0.4472.77

Better usability

After a first round of feedback the following issues arised:

  • It is not immediately clear that you can navigate inside the smaller feedback view.
  • The icons are not optimal

If you're using this library add your app here

I always try to improve this. For that I'll need to better understand how this library is used. So I would really appreciate it if you could comment a link to your app or website here.

Thanks!

Improve description in example

The example should be improved in the following ways:

  • It should contain some text which describe the library
  • It should guide the user and explain how to use the library

Make theme more powerful

Currently the theme does not support to customize the whole design of the feedback view.
However it would be nice if the theme would add support for more customization.

Feature request: Flexibility on question(s) presented to user?

Hi @ueman - thank you for this package, it is certainly interesting and could be helpful to my project in the near future.

For me to justify using it, I would need some flexibility around the questions presented to the user. Instead of a fixed "What's wrong?", potentially something like a supplied list of question strings that then create a new header/text entry section within a scroller (as of course space will be an issue) for each, and the output then being a list of string answers rather than a single string.

Is this something easily achievable? Would you need PR contributions?

Page layout problem

If the screen is small
Bottom sheetis too high and Block the upper part,Textfield is too high

Version of the library
1.0.1

Hide keyboard after using the controls column

This should simplify the correct way of using this package. If the keyboard is shown, the Scaffold may change its content because it takes the keyboard insets into consideration. If the user draws while the keyboard is shown his drawings may not correspond to the resulting screenshot.

Write API docs and Readme

Currently the code is not very well documented. There should be a simple example in the readme and at least a proper documentation for the public facing API.

Split examples into their own packages

Split the examples into their own packages.
This way it's easier for users to use the existing code from the example.

The advantage over having them all in this repo is the reduced amount of dependencies.

This repo could then serve as a mono repo for all various kinds of feedback publishing.

v2 breaking changes

This is a list of potential breaking changes.
Not all of them are already set in stone and i appreciate feedback on them.

Visual or behavioral changes

  • Feedback mode is highlighted
  • Change default feedback mode to draw (relates to #69)

Code changes

  • make screenshot image non nullable
  • change BetterFeedback.of(ctx)?.show(...) to BetterFeedback.of(ctx).show(...)

Action Required: Fix Renovate Configuration

There is an error with this repository's Renovate configuration that needs to be fixed. As a precaution, Renovate will stop PRs until it is resolved.

Error type: Cannot find preset's package (github>whitesource/merge-confidence:beta)

Improve docs

  • Do a better job of explaining the feedback callback
    • it should state that it is a raw png
  • State that the default text can be changed with a custom localization

Improve how to take the screenshot

Currently we wait a little bit to avoid a dirty frame which can't be captured. It probably is cleaner and better to use SchedulerBinding.addPostFrameCallback(). The time to wait is 20 milliseconds or a little bit more than a frame. I don't think this matters much. However by using the post frame callback we can guarantee to capture the next frame.

The package description is too short

Add more detail to the description field of pubspec.yaml. Use 60 to 180 characters to describe the package, what it does, and its target use case.

Expand the Bottom Feedback Sheet When Active

Is your feature request related to a problem? Please describe.
The bottom feedback sheet takes up very little space so that it doesn't cover the screenshot UI. This is non-ideal when the user is trying to write their feedback-especially for custom multi-part FeedbackBuilder's the user can see very little of the feedback form at a time and has to scroll a lot.

Describe the solution you'd like
When the bottom feedback sheet is active (eg if any of it's children currently have focus) it will slide upwards to cover up 90-100% of the screen. The user can slide on a visual nodule at the top to slide it back down, or use their system back button. They can also slide the nodule to expand the feedback sheet if it is currently not active.
See: sliding up panel.

Depending on preference, we could use the above package or #rollOurOwn. I lean lightly towards the latter as this should be pretty simple to implement.

Describe alternatives you've considered

  • Have a "next" button that transition to a new screen where the user provides input. I think this has slightly less preferable UX as it's not as fluid transitioning between taking a screenshot and writing feedback.

Add example

Create a short demo in the example/ directory to show how to use this package.

Common filename patterns include main.dart, example.dart, and feedback.dart. Packages with multiple examples should provide example/README.md.

For more information see the pub package layout conventions.

See https://dart.dev/tools/pub/package-layout#examples

RenderFlex overflowed by 232 pixels on the bottom.

Describe the bug
Capture from onError A RenderFlex overflowed by 232 pixels on the bottom. Android phone.

Version of the library
^1.2.1

To Reproduce
Steps to reproduce the behavior:

  1. trigger the feedback UI
  2. tap above the feedback line to bring focus to the text input area which raises the keyboard on Android
  3. See error

Expected behavior
No errors should be reported

Screenshots
Nothing is wrong with the screen rendering--I don't see any evidence of overflowing--all okay. Not sure why Flutter is complaining.

**Logs **

I/flutter (28317): show feedback UI
W/IInputConnectionWrapper(28317): beginBatchEdit on inactive InputConnection
W/IInputConnectionWrapper(28317): getTextBeforeCursor on inactive InputConnection
W/IInputConnectionWrapper(28317): getTextAfterCursor on inactive InputConnection
W/IInputConnectionWrapper(28317): getSelectedText on inactive InputConnection
W/IInputConnectionWrapper(28317): endBatchEdit on inactive InputConnection
W/IInputConnectionWrapper(28317): beginBatchEdit on inactive InputConnection
W/IInputConnectionWrapper(28317): getTextBeforeCursor on inactive InputConnection
W/IInputConnectionWrapper(28317): endBatchEdit on inactive InputConnection
I/flutter (28317): [debug] Capture from onError A RenderFlex overflowed by 232 pixels on the bottom.
I/flutter (28317): ══╡ EXCEPTION CAUGHT BY RENDERING LIBRARY ╞═════════════════════════════════════════════════════════
I/flutter (28317): The following assertion was thrown during layout:
I/flutter (28317): A RenderFlex overflowed by 232 pixels on the bottom.
I/flutter (28317): 
I/flutter (28317): The relevant error-causing widget was:
I/flutter (28317):   Column file:///E:/gitlab/rs/lib/main.dart:357:18
I/flutter (28317): 
I/flutter (28317): To inspect this widget in Flutter DevTools, visit:
I/flutter (28317): http://127.0.0.1:9100/#/inspector?uri=http%3A%2F%2F127.0.0.1%3A56539%2FyxRKFSLoEUA%3D%2F&inspectorRef=inspector-0
I/flutter (28317): 
I/flutter (28317): The overflowing RenderFlex has an orientation of Axis.vertical.
I/flutter (28317): The edge of the RenderFlex that is overflowing has been marked in the rendering with a yellow and
I/flutter (28317): black striped pattern. This is usually caused by the contents being too big for the RenderFlex.
I/flutter (28317): Consider applying a flex factor (e.g. using an Expanded widget) to force the children of the
I/flutter (28317): RenderFlex to fit within the available space instead of being sized to their natural size.
I/flutter (28317): This is considered an error condition because it indicates that there is content that cannot be
I/flutter (28317): seen. If the content is legitimately bigger than the available space, consider clipping it with a
I/flutter (28317): ClipRect widget before putting it in the flex, or using a scrollable container rather than a Flex,
I/flutter (28317): like a ListView.
I/flutter (28317): The specific RenderFlex in question is: RenderFlex#2643d relayoutBoundary=up2 OVERFLOWING:
I/flutter (28317):   needs compositing
I/flutter (28317):   creator: Column ← Center ← _BodyBuilder ← MediaQuery ← LayoutId-[<_ScaffoldSlot.body>] ←
I/flutter (28317):     CustomMultiChildLayout ← AnimatedBuilder ← DefaultTextStyle ← AnimatedDefaultTextStyle ←
D/Sentry  (28317): Captured Envelope is already cached
I/flutter (28317):     _InkFeatures-[GlobalKey#c7c1b ink renderer] ← NotificationListener<LayoutChangedNotification> ←
I/flutter (28317):     PhysicalModel ← ⋯
I/flutter (28317):   parentData: offset=Offset(0.0, 0.0) (can use size)
I/flutter (28317):   constraints: BoxConstraints(0.0<=w<=392.7, 0.0<=h<=554.5)
I/flutter (28317):   size: Size(392.7, 554.5)
I/flutter (28317):   direction: vertical
I/flutter (28317):   mainAxisAlignment: center
I/flutter (28317):   mainAxisSize: min
I/flutter (28317):   crossAxisAlignment: center
I/flutter (28317):   verticalDirection: down
I/flutter (28317): ◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤

Run flutter analyze and attach any output of that command below.

win 530 12:59 /e/gitlab/rs # flutter analyze
Analyzing rs...
No issues found! (ran in 25.2s)



[√] Flutter (Channel stable, 2.0.5, on Microsoft Windows [Version 6.1.7601], locale en-US)
    • Flutter version 2.0.5 at E:\src\flutter
    • Framework revision adc687823a (6 days ago), 2021-04-16 09:40:20 -0700
    • Engine revision b09f014e96
    • Dart version 2.12.3

[√] Android toolchain - develop for Android devices (Android SDK version 30.0.1)
    • Android SDK at C:\Users\pete\AppData\Local\Android\sdk
    • Platform android-30, build-tools 30.0.1
    • Java binary at: C:\Program Files\Android\Android Studio\jre\bin\java
    • Java version OpenJDK Runtime Environment (build 1.8.0_242-release-1644-b01)
    • All Android licenses accepted.

[√] Chrome - develop for the web
    • Chrome at C:\Program Files (x86)\Google\Chrome\Application\chrome.exe

[√] Android Studio (version 4.1.0)
    • Android Studio at C:\Program Files\Android\Android Studio
    • Flutter plugin can be installed from:
       https://plugins.jetbrains.com/plugin/9212-flutter
    • Dart plugin can be installed from:
       https://plugins.jetbrains.com/plugin/6351-dart
    • Java version OpenJDK Runtime Environment (build 1.8.0_242-release-1644-b01)

[√] Connected device (3 available)
    • Mi 9T (mobile) • 844fb80a • android-arm64  • Android 10 (API 29)
    • Chrome (web)   • chrome   • web-javascript • Google Chrome 90.0.4430.85
    • Edge (web)     • edge     • web-javascript • Microsoft Edge 88.0.705.56

• No issues found!

Additional context
THANK you for such as AMAZING package!!! I didn't even know it was technically possible.

Context Issue?

Getting this error: You need to add a BetterFeedback widget above this context!

I have the BetterFeddback wrapped about my MyApp main call like in the example. But when i push navigate to another page, and try to use it from my drawer, i get this error. Any solution?

Demonstrate different feedback sharing ideas

The readme and example app should contain different examples or strategies on how the author can enable the user to share feedback.

A couple ideas:

  • as interface for Sentrys User Feedback ( getsentry/sentry-dart#215 )
  • sharing via share dialog
  • sharing via http upload
  • create GitHub/GitLab issue
  • upload to imgur or similar
  • create Jira-Tickets or similar

How to clear feedback

Hello,

How do I clear the feedback, so that the next time .show() is invoked, it doesn't show the old text and drawing? I saw no method at all to do this. It could perhaps be added as an optional argument to '.hide(mustClear: true)'.

PS. This is great, thank you!

Enter-Button should dismiss keyboard

Enhancement/Feature Request

Hi there,

first of all: Thank you very much for this amazing package! It's really easy and convenient to implement and looks great. However, I think it would improve the user experience if the keyboard dismisses on pressing 'Enter'. Otherwise the next thing I'd try to dismiss it would be tapping on the screen (which does not dismiss it either) and it took me a moment to realise that only pressing "Paint" would dismiss it. I think changing the pressing on 'Enter' behaviour would be a positive change for the user experience. I already changed it locally -> 'feedback_bottom_sheet.dart' line 75, add the one-liner: textInputAction: TextInputAction.done.

It might be also cool for people not wanting this behaviour, to just pass a value in the initial constructor (like dismissOnEnter property).

Best regards,

Julian

Make `show` callback accept futures

It the show callback accepts future, this lib could also present a "Thank you screen". It's also probably a better ergonomic because most user are doing async work in it anyway.

Create a default darkmode theme

This library currently needs the user to implement a darkmode theme himself.
The library should handle it itself and also change it depending on the OS

UX is confusing. What does 'Navigate' do? Users don't know they can draw.

Is your feature request related to a problem? Please describe.
No

Describe the solution you'd like
parameter to remove the Navigate mode. I have no idea what this means and I bet my users will just be confused by it, also.

Describe alternatives you've considered
Not using the package??

Additional context
I also think that having trash can icon is not needed. Just hit undo a few times. You want simplest possible UI.
Also there is no message that says you can draw to point out what the problem is. Users will be confused.

Can't build and run on web

Describe the bug
Plugin seems like it is not compatible with web. Build and run on web fail with the provided error message even when null-safety disabled.

Version of the library
feedback-1.0.2

To Reproduce
Add feedback plugin to your flutter project and you will get the null error regarding the Locale parameter in the localization file.

Expected behavior
Should not throw error. Currently we can't even build the project.

**Logs **

ERROR MESSAGE:
../../.pub-cache/hosted/pub.dartlang.org/feedback-1.0.2/lib/src/l18n/localization.dart:34:30: Error: The argument type 'Locale?' can't be assigned to the parameter type 'Locale' because 'Locale?' is nullable and 'Locale' isn't.

  • 'Locale' is from 'dart:ui'.
    locale: localeOverride ?? window.locale,

FLUTTER DOCTOR -V:

[✓] Flutter (Channel stable, 2.0.3, on Mac OS X 10.15.7 19H114 darwin-x64, locale en-US)
• Flutter version 2.0.3 at /Users/user/development/flutter
• Framework revision 4d7946a68d (6 days ago), 2021-03-18 17:24:33 -0700
• Engine revision 3459eb2436
• Dart version 2.12.2

[✓] Android toolchain - develop for Android devices (Android SDK version 30.0.3)
• Android SDK at /Users/user/Library/Android/sdk
• Platform android-30, build-tools 30.0.3
• Java binary at: /Applications/Android Studio.app/Contents/jre/jdk/Contents/Home/bin/java
• Java version OpenJDK Runtime Environment (build 1.8.0_242-release-1644-b3-6915495)
• All Android licenses accepted.

[✓] Xcode - develop for iOS and macOS
• Xcode at /Applications/Xcode.app/Contents/Developer
• Xcode 12.3, Build version 12C33
• CocoaPods version 1.10.1

[✓] Chrome - develop for the web
• Chrome at /Applications/Google Chrome.app/Contents/MacOS/Google Chrome

[✓] Android Studio (version 4.1)
• Android Studio at /Applications/Android Studio.app/Contents
• Flutter plugin can be installed from:
🔨 https://plugins.jetbrains.com/plugin/9212-flutter
• Dart plugin can be installed from:
🔨 https://plugins.jetbrains.com/plugin/6351-dart
• Java version OpenJDK Runtime Environment (build 1.8.0_242-release-1644-b3-6915495)

[✓] VS Code (version 1.54.3)
• VS Code at /Applications/Visual Studio Code.app/Contents
• Flutter extension version 3.20.0

[✓] Connected device (1 available)
• Chrome (web) • chrome • web-javascript • Google Chrome 89.0.4389.90

• No issues found!

Additional context
Sadly, we can't even build the app with null safety enabled. Any response/reply is greatly appreciated!

Thank you very much in advance!

Dependency Dashboard

This issue lists Renovate updates and detected dependencies. Read the Dependency Dashboard docs to learn more.

Open

These updates have all been created already. Click a checkbox below to force a retry/rebase of any.

Ignored or Blocked

These are blocked by an existing closed PR and will not be recreated unless you click a checkbox below.

Detected dependencies

cocoapods
feedback/example/ios/Podfile
feedback/example/macos/Podfile
github-actions
.github/workflows/feedback.yml
  • actions/checkout v4
  • actions/setup-java v4
  • subosito/flutter-action v2
  • codecov/codecov-action v4.3.0
  • actions/checkout v4
  • subosito/flutter-action v2
.github/workflows/gitlab.yml
  • actions/checkout v4
  • actions/setup-java v4
  • subosito/flutter-action v2
.github/workflows/sentry.yml
  • actions/checkout v4
  • actions/setup-java v4
  • subosito/flutter-action v2
.github/workflows/web-example.yml
  • actions/checkout v4
  • subosito/flutter-action v2
  • bluefireteam/flutter-gh-pages v8
gradle
feedback/example/android/gradle.properties
feedback/example/android/settings.gradle
feedback/example/android/build.gradle
  • com.android.tools.build:gradle 7.4.2
  • org.jetbrains.kotlin:kotlin-gradle-plugin 1.9.23
  • org.jetbrains.kotlin:kotlin-stdlib-jdk7 1.9.23
feedback/example/android/app/build.gradle
  • junit:junit 4.13.2
  • androidx.test:runner 1.4.0
  • androidx.test.espresso:espresso-core 3.4.0
gradle-wrapper
feedback/example/android/gradle/wrapper/gradle-wrapper.properties
  • gradle 7.6.4
pub
feedback/example/pubspec.yaml
  • cupertino_icons ^1.0.3
  • flutter
  • flutter_email_sender ^6.0.2
  • flutter_markdown ^0.6.18
  • http ^1.0.0
  • path_provider ^2.1.1
  • share_plus ^7.2.1
  • url_launcher ^6.1.14
  • flutter_lints ^3.0.0
  • dart >=3.0.0 <4.0.0
  • flutter >=3.10.0
feedback/pubspec.yaml
  • flutter
  • flutter_lints ^3.0.0
  • dart >=3.0.0 <4.0.0
  • flutter >=3.10.0
feedback_gitlab/pubspec.yaml
  • flutter
  • feedback ^3.0.0
  • http ^1.0.0
  • http_parser ^4.0.0
  • flutter_lints ^3.0.0
  • dart >=3.0.0 <4.0.0
  • flutter >=3.10.0
feedback_sentry/pubspec.yaml
  • flutter
  • feedback ^3.0.0
  • sentry >=7.0.0 <9.0.0
  • dart >=3.0.0 <4.0.0
  • flutter >=3.10.0

  • Check this box to trigger a request for Renovate to run again on this repository

Drawing not included with screenshot

Describe the bug

When I use BetterFeedback.of(context).show((feedback, feedbackScreenshot) { ... });, the feedbackScreenshot does not contain the drawing.

Version of the library

1.0.0

To Reproduce
Steps to reproduce the behavior:

  1. Add to pubspec.yaml:
feedback: ^1.0.0
flutter_email_sender: ^4.0.0
  1. Invoke BetterFeedback:
BetterFeedback.of(context).show((feedback, feedbackScreenshot) async {
  final Directory output = await getTemporaryDirectory();
  final String screenshotFilePath = '${output.path}/feedback.png';
  final File screenshotFile = File(screenshotFilePath);
  await screenshotFile.writeAsBytes(feedbackScreenshot);
  final Email email = Email(
    body: 'Feedback: $feedback',
    subject: 'Feedback',
    recipients: ['[email protected]'],
    attachmentPaths: [screenshotFilePath],
    isHTML: false,
  );
  await FlutterEmailSender.send(email);
  1. See that the screenshot does not have the drawings painted on top.

Expected behavior

Expected to see the drawings painted on top of the screenshot.

Screenshots

If applicable, add screenshots to help explain your problem.

Logs

Run flutter analyze and attach any output of that command below.

PS C:\Users\me\Projects\project> flutter analyze
Analyzing project...                                                   
No issues found! (ran in 3.2s)

If there are any analysis errors, try resolving them before filing this issue.

Paste the output of running flutter doctor -v here.

PS C:\Users\me\Projects\project> flutter doctor -v
[√] Flutter (Channel stable, 2.0.1, on Microsoft Windows [Version 10.0.19042.804], locale en-US)
    • Flutter version 2.0.1 at C:\Users\me\.flutter-sdk
    • Framework revision c5a4b4029c (32 hours ago), 2021-03-04 09:47:48 -0800
    • Engine revision 40441def69
    • Dart version 2.12.0

[√] Android toolchain - develop for Android devices (Android SDK version 30.0.3)
    • Android SDK at C:\Users\me\AppData\Local\Android\sdk
    • Platform android-30, build-tools 30.0.3
    • Java binary at: C:\Program Files\Android\Android Studio\jre\bin\java
    • Java version OpenJDK Runtime Environment (build 1.8.0_242-release-1644-b01)
    • All Android licenses accepted.

[X] Chrome - develop for the web (Cannot find Chrome executable at .\Google\Chrome\Application\chrome.exe)
    ! Cannot find Chrome. Try setting CHROME_EXECUTABLE to a Chrome executable.

[√] Android Studio (version 4.1.0)
    • Android Studio at C:\Program Files\Android\Android Studio
    • Flutter plugin can be installed from:
       https://plugins.jetbrains.com/plugin/9212-flutter
    • Dart plugin can be installed from:
       https://plugins.jetbrains.com/plugin/6351-dart
    • Java version OpenJDK Runtime Environment (build 1.8.0_242-release-1644-b01)

[√] Connected device (2 available)
    • sdk gphone x86 (mobile) • emulator-5554 • android-x86    • Android 11 (API 30) (emulator)
    • Edge (web)              • edge          • web-javascript • Microsoft Edge 87.0.664.66

! Doctor found issues in 1 category.

Additional context

Also tried with the alertFeedbackFunction(context, feedback, feedbackScreenshot) and it produces the same result.

Theme change

Hi,

Firstly, thank you for this package.

My existing theme changed when I added this package to my project.

How can i disable the theme of package?

Thanks

Drawing not cleared after submitting the feedback

Hey @ueman! 👋

After submitting new feedback (message+drawing) and opening the form again through BetterFeedback.of(context).show the message is indeed cleared, but the drawing shows the one from previous feedback.

I would expect it got cleared as well as the message.

Give Option to change Feedback Sheet Text Color.

Is your feature request related to a problem? Please describe.
I have implemented dark theme type of colors in my app. I have also changed the feedback material design but the text was not visible properly so I have to use different colors in that.

Solution
Give the developer option to choose text colors according to the theme or manually.

Allow Custom FeedbackBottomSheet

Is your feature request related to a problem? Please describe.
I want to include a feedback form with things like a drop down where users specify what kind of feedback it is (bug report, feature suggestion, etc.).

Describe the solution you'd like
Note that I plan to make this as a PR in my fork of BetterFeedback, the following is my implementation plan. Let me know if you have any feedback!

  1. Update OnSubmit to take in a type parameter T.
  2. Add an optional Widget Function(OnSubmit<T>)? getFeedback argument to BetterFeedback.
  3. Update OnFeedBackCallBack to take feedback of type T instead of String.

If getFeedback is null, Type T will be String and BetterFeedback will behave as it does now. If the user specifies a non-null getFeedback function, FeedbackBottomSheet will be built with their widget and type T will be determined by getFeedback.

This way, users can prompt for and return arbitrary data types/models using BetterFeedback.

The Color Theme For the Navigate/Draw Selector Is Confusing

Is your feature request related to a problem? Please describe.
The "Navigate" and "Draw" selectors are confusing. When an option is selected, it is greyed out to indicate that that button is currently not active. This is confusing because many users might think greyed out means "not currently selected".

Describe the solution you'd like
I believe the convention in Material Design is to use Theme.of(context).accentColor to indicate that one option out of several is currently selected. As such, I suggest we make the selected text use the accent color and the currently selected text use the default dark color.

Describe alternatives you've considered
Expand FeedbackTheme to allow users to customize their active and inactive selection text styles.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.