⚠️ WORK IN PROGRESS ⚠️

This project is being actively developed and therefore might rapidly change.

Flutter Request Kit

A Flutter package for your user base to participate in the development of your application. It allows the user to suggest new features, upvote, and chat about them directly in the app.

Demo

https://flutter-request-kit.web.app

Motivation

Starting a SaaS is hard, getting good feedback is harder. We wanted some sort of "mini forum" where our user base could express their frustrations, suggest changes or new features. We also needed a way to communicate with them and develop ideas further.

Our Rules:

  • No external dependencies: It should not interfere with any other packages.
  • Adaptive Theme: The UI should be able to adapt to the theme of the parent application.
  • I18n: It must support localization and adapt to different dialects.

Our Needs:

  • It must be easy to set up.
  • It must be performant and reliable.

Getting Started

Setup:

Add flutter_request_kit to your pubspec.yaml

flutter pub add flutter_request_kit

Usage:

Basic Setup

class RequestHomePage extends StatefulWidget {
  const RequestHomePage({super.key});

  @override
  State<RequestHomePage> createState() => _RequestHomePageState();
}

class _RequestHomePageState extends State<RequestHomePage> {
  // Mocked current user as the creator of the requests
  final Creator currentUser = const Creator(
    userId: 'user123',
    username: 'johndoe',
    isAdmin: true,
  );

  late final store = RequestStore(
    requests: <RequestItem>[],
    onAddRequest: print,
    onAddComment: print,
    onDeleteRequest: print,
    onUpdateRequest: print,
    onVoteChange: print,
  );

  @override
  Widget build(BuildContext context) {
    return GestureDetector(
      onTap: () => FocusScope.of(context).unfocus(),
      child: Scaffold(
        appBar: AppBar(
          title: const Text('Flutter Request Kit Demo'),
        ),
        body: RequestPage(
          currentUser: currentUser,
          store: store,
          locale: RequestKitLocales.enUS.locale,
          theme: Theme.of(context).copyWith(
             extensions: const [
               RequestStatusPillTheme(),
               RequestVotingBoxTheme(),
               RequestItemCardTheme(),
             ],
          ),
        ),
      ),
    );
  }
}

Contributing

We welcome contributions! Please see CONTRIBUTING.md for more details.

License

This project is licensed under the MIT License - see the LICENSE file for details.