Papercups.io Flutter chat widget

Overview

logo

pub package style: effective dart License GitHub issues

likes popularity pub points

Demo Chat

button button

Installing

To get started simply add papercups_flutter: and the latest version to your pubspec.yaml. Then run flutter pub get

🎉 Done, It's that simple.

Using the widget

Integration with your app requires just a few lines of code, add the following widget wherever you want your papercups chat window to be:

import 'package:papercups_flutter/papercups_flutter.dart';

PaperCupsWidget(
  props: Props(
    accountId: "xxxxxxxx-xxxxxxx-xxxx-xxxxxx", //Your account id goes here.
  ),
),
    

That should get you up and running in just a few seconds ⚡️ .

Configuration

Available PaperCupsWidget arguments

Parameter Type Value Default
dateLocale String Locale for the date, use the locales from the intl package. "en-US"
floatingSendMessage bool Wether to have the message box floating. false
props Props Required, here is where all of the config for the chat is contained. N/A
timeagoLocale dynamic Check timeago messages for the available classes. N/A

Available Props parameters

Prop Type Value Default
accountId String Required, your Papercups account token N/A
baseUrl String The base URL of your API if you're self-hosting Papercups. Ensure you do not include the protocol (https) of a trailing dash (/) app.papercups.io
customer CustomerMetadata Identifying information for the customer, including name, email, external_id, and metadata (for any custom fields) N/A
primaryColor Color The theme color of your chat widget Theme.of(context).primaryColor without alpha
primaryGradient Gradient Gradient to specify, should be used instead of primaryColor, DO NOT USE BOTH N/A
requireEmailUpfront boolean If you want to require unidentified customers to provide their email before they can message you false
translations PapercupsIntl If you want to override the default EN translations displayed by the widget PapercupsIntl()

Available CustomerMetaData parameters

Parameters Type Value Default
email String The customer's email N/A
externalId String The customer's external ID N/A
name String The customer's name N/A
otherMetadata Map<String, String> Extra metadata to pass such as OS info N/A

Available PapercupsIntl parameters

Parameters Type Value Default
attachmentNamePlaceholder String Text displayed when an attachment doesn't have a file name "No Name"
attachmentUploadErrorText String Error message displayed when an attachment could not be uploaded "Failed to upload attachment"
attachmentUploadedText String Text displayed when an attachment has been uploaded "Attachment uploaded"
attachmentUploadingText String Text displayed when an attachment is been uploaded "Uploading..."
companyName String Company name to show on greeting "Bot"
enterEmailPlaceholder String This is the placeholder text in the email input section "Enter your email"
fileText String Text displayed on the tile where the user decides to upload a file "File"
greeting String An optional initial message to greet your customers with N/A
historyFetchErrorText String Error message displayed when the customer history couldn't be fetched "There was an issue retrieving your details. Please try again!
imageText String Text displayed on the tile where the user decides to upload an image "Image
loadingText String Text displayed when the chat is loading "Loading..."
newMessagePlaceholder String The placeholder text in the new message input "Start typing..."
noConnectionText String The placeholder text in the new message input "No Connection"
retryButtonLabel String Label used in the retry button when the chat history couldn't be fetched "Retry"
sendingText String Text to show while message is sending "Sending..."
sentText String Text to show when the message is sent "Sent"
subtitle String The subtitle in the header of your chat widget "How can we help you?"
textCopiedText String Text displayed when a text has been copied after long press on a chat bubble "Text copied to clipboard"
title String The title in the header of your chat widget "Welcome!"
uploadedText String Text displayed after the percentage value of an attachment being uploaded "uploaded"

Supporters

Stargazers repo roster for @papercups-io/papercups_flutter Forkers repo roster for @papercups-io/papercups_flutter

Comments
  • Messages sent as Anonymous User even if CustomerMetadata is set

    Messages sent as Anonymous User even if CustomerMetadata is set

    Even is CustomerMetadata is set, messages are received as Anonymous User in the website given by Papercups to answer them.

    Attached is the piece of code that handles the screen where PaperCupsWidget is used (accountId is not present for security purposes):

    class ChatSupportScreen extends StatefulWidget {
      @override
      _ChatSupportScreenState createState() => _ChatSupportScreenState();
    }
    
    class _ChatSupportScreenState extends State<ChatSupportScreen> {
      FirebaseAuth _firebaseAuth;
      String _name;
      String _email;
      String _userId;
      CustomerMetadata _customerMetadata;
    
      @override
      void initState() {
        super.initState();
        _firebaseAuth = context.read(firebaseAuthProvider);
        if (_firebaseAuth != null) {
          _name = _firebaseAuth.currentUser.displayName.substring(11);
          _email = _firebaseAuth.currentUser.email;
          _userId = _firebaseAuth.currentUser.uid;
        }
        _customerMetadata = CustomerMetadata(
          name: _name,
          email: _email,
          externalId: _userId,
        );
      }
    
      @override
      Widget build(BuildContext context) {
        return Scaffold(
          appBar: AppBar(
            backgroundColor: greenColor,
            leading: IconButton(
              icon: Icon(
                Icons.chevron_left_rounded,
                color: Colors.white,
              ),
              onPressed: () => _endChat(context),
            ),
            title: Row(
              mainAxisAlignment: MainAxisAlignment.end,
              children: [
                Text(
                  "Atención al afiliado",
                  style: TextStyle(
                    fontFamily: "Roboto-Regular",
                    fontSize: getProportionateScreenWidth(18),
                    fontWeight: FontWeight.bold,
                    color: Colors.white,
                    letterSpacing: 1,
                  ),
                ),
              ],
            ),
            elevation: 0.0,
            centerTitle: false,
          ),
          body: SafeArea(
            child: PaperCupsWidget(
              props: Props(
                accountId: "",
                title: "Bienvenido a la atención al afiliado de S. P. G. y BIO.",
                subtitle: "¿Cómo podemos ayudarlo?",
                newMessagePlaceholder: "Escriba su consulta aquí...",
                primaryColor: greenColor,
                customer: this._customerMetadata,
                companyName: "S. P. G. y BIO.",
              ),
              dateLocale: "es-AR",
              timeagoLocale: EsMessages(),
              sendingText: "Enviando...",
              sentText: "Enviado",
              floatingSendMessage: true,
            ),
          ),
        );
      }
    
      void _endChat(BuildContext context) {
        showAlertDialog(
          context: context,
          title: "Cerrar soporte",
          content:
              "Recuerde que si cierra este chat y su conversación no ha finalizado, perderá todos los mensajes enviados y recibidos",
          defaultActionText: "Aceptar",
          cancelActionText: "Cancelar",
        ).then((value) {
          if (value) {
            Navigator.of(context).pop();
          }
        });
      }
    }
    
    bug 
    opened by augiavedoni 6
  • Implement internationalization `PapercupsIntl()` + some fixes

    Implement internationalization `PapercupsIntl()` + some fixes

    Hi @aguilaair!

    This PR implements a couple of things:

    1. The new PapercupsIntl() class that brings translations for all strings I was able to find in the source code. One can now use it as such:
    PaperCupsWidget(
      props: Props(
        accountId: "xxxxxxxx-xxxxxxx-xxxx-xxxxxx",
        translations: PapercupsIntl(
          title: "Welcome 👋"
          subtitle: "How can we help you today?",
          greeting: "We'll make sure to reply in an hour or less",
          // ...
        ),
      ),
    )
    

    ⚠️ BREAKING CHANGE

    This is a breaking change as I've removed the duplicated properties from both Props and PapercupsWidget. My rationale is that this could be valid enough for a major release if coupled with the Availability feature for instance. Let me know If you'd rather have it in a minor release so that I add deprecation notices a little bit everywhere.

    1. A fix for a bug I found when running apps in profile or release mode: event.event.toString() only returns "PhoenixChannelEvent" in those modes. So this case was never true https://github.com/papercups-io/papercups_flutter/blob/95252be186b383b0cbfad8c059e6dd3bf57793e9/lib/utils/socket/joinConversation.dart#L32-L33 which means that whenever a message was sent from the dashboard to an app, it wouldn't show up in real-time.

    2. Replacing the use of Papercups fullName for displayName as that seems more appropriate in this context.

    3. A couple of minor typos corrections here and there.

    bug enhancement 
    opened by CharlesMangwa 5
  • CustomerMetadata doesn't set the otherMetadata

    CustomerMetadata doesn't set the otherMetadata

    First things first, thanks for this library: it works wonders! 🎉

    I'm just facing an issue right now that could be coming either from this package or Papercups API itself, maybe you could shed some lights on what's going on. Long story short: I cannot set customers metadata.

    If I provide the following to the widget:

    customer: CustomerMetadata(
      name: 'userName',
      externalId: 'userId',
      otherMetadata: {
        'random_field': 'random field value',
      },
    ),
    

    Both name and externalId are saved and shown in the Papercups dashboard but the content of otherMetadata is not and metadata is still null.


    I dug a little bit in the source code and things seems to be happening over here:

    https://github.com/papercups-io/papercups_flutter/blob/1360acf5bfa4bfb589db1615d915532ead9458d2/lib/utils/apiInteraction/updateUserMetadata.dart#L22-L29

    If I use https://app.papercups.io/api/v1/customers as done in the API endpoint docs (instead of the https://app.papercups.io/api/customers used by the package here), then https://app.papercups.io/api/v1/customers/[id]/metadata returns a 404 with {"errors":{"detail":"Bad Request"}}%. Maybe there was a change over there?

    FWIW I also created an issue in the the main repo https://github.com/papercups-io/papercups/issues/995 as when I try to perform the same action via the call mentioned in the API endpoint docs, I get the same result: metadata is null.

    bug 
    opened by CharlesMangwa 5
  • Fixed

    Fixed "Last seen" variable

    Hello guys! I found I bug that my messages won't loading for first time and I found there is an error when loading the customer infos. I debugged and found a wrong variable name, maybe it changed between versions but not fixed in this lib.

    I'm making this PR to fix this variable, the main fix was change the variable name: lastSeen to lastSeenAt last_seen to last_seen_at

    opened by jonatascm 5
  • User unable to receive our messages

    User unable to receive our messages

    Hey! I have been using papercups with no issue in my web page using vue-papercups. I've had no issue. Recently, I have developed a mobile app using flutter. It seems like there is an issue with it. We are able to receive users' messages, but when we replied through slack/papercups dashboard, users aren't able to receive our messages. I have reached out to the papercups team through chat but haven't gotten further response regarding this.

    this is how I integrated it in our mobile app

      @override
        Widget build(BuildContext context) {
          return Scaffold(
            floatingActionButton: PaperCupsButton(
              onTap: onClickPapercups,
              show: _show,
              isNavAvailable: widget.isNavigationAvailable,
            ),
            body: Stack(
              children: [
                widget.body,
                PaperCupsChatBox(
                  onTap: onClickPapercups,
                  show: _show,
                  email: _email,
                  name: _name,
                  isNavAvailable: widget.isNavigationAvailable,
                ),
              ],
            ),
          );
        }
    

    Papercups button:

    @override
    Widget build(BuildContext context) {
      return Container(
        height: 55,
        width: 55,
        margin: EdgeInsets.only(bottom: isNavAvailable ? 50 : 0),
        decoration: const BoxDecoration(
          color: colorPapercups,
          shape: BoxShape.circle,
        ),
        child: InkWell(
          customBorder: const CircleBorder(),
          onTap: onTap,
          child: Icon(
            show ? Icons.close : Icons.chat_bubble_rounded,
            color: colorPapercups.computeLuminance() < 0.5
                ? Colors.white
                : Colors.black,
            size: 25,
          ),
        ),
      );
    }
    

    Papercups chatbox:

    @override
    Widget build(BuildContext context) {
      final AppLocalizations _local = AppLocalizations.of(context)!;
      MediaQueryData queryData = MediaQuery.of(context);
    
      double _marginBottom = queryData.size.width * 0.18;
    
      if (queryData.size.width > 400) {
        _marginBottom = queryData.size.width * 0.24;
      }
    
      return Container(
        width: double.infinity,
        alignment: Alignment.bottomRight,
        margin: EdgeInsets.only(bottom: _marginBottom, top: 10),
        child: Visibility(
          visible: show,
          child: Container(
            decoration: BoxDecoration(
              borderRadius: BorderRadius.circular(15),
              boxShadow: [
                BoxShadow(
                  blurRadius: 10,
                  color: Theme.of(context).shadowColor.withOpacity(0.2),
                ),
              ],
            ),
            constraints: BoxConstraints(
              minWidth: 100,
              maxWidth: 380,
              minHeight: 100,
              maxHeight: queryData.size.width * 1.3,
            ),
            margin: const EdgeInsets.all(20),
            child: ClipRRect(
              borderRadius: BorderRadius.circular(15),
              child: PaperCupsWidget(
                floatingSendMessage: false,
                closeAction: onTap,
                props: Props(
                  accountId: "x",
                  title: "Welcome to x",
                  primaryColor: colorPapercups,
                  greeting: _local.hiThere,
                  subtitle: _local.askAnything,
                  requireEmailUpfront: email != null ? false : true,
                  newMessagePlaceholder: _local.startTyping,
                  companyName: _local.x,
                  customer: CustomerMetadata(
                    email: email,
                    name: name,
                  ),
                ),
              ),
            ),
          ),
        ),
      );
    }
    
    bug 
    opened by ClarissaAudrey 4
  • Known Issues: closeAction is not supported on Web at this point in time

    Known Issues: closeAction is not supported on Web at this point in time

    Hello folks, seems like the issue has been resolved using https://pub.dev/packages/pointer_interceptor

    source: https://github.com/flutter/flutter/issues/54027#issuecomment-747132587

    wontfix 
    opened by no-1ne 4
  • 2.0.0 - Native Dart Widget

    2.0.0 - Native Dart Widget

    This is a complete rewrite of the library, with native chat support, meaning it is faster and with many more customization possibilities, including:

    • Dark mode
    • Gradient support
    • Immediate loading of chat widget
    • Exact time on click
    • Minimal libraries
    • Performant

    Additionally, This enables many more modifications tailored to apps that the web version can't (for future version, will not be included in 2.0.0):

    • Proactive messaging, in other words new messages will appear ovelayed on the user. The user must have initiated a conversation before, we can't do this without a conversation ID, that conversation ID can then be listened for if initialized on app boot.
    • Local, encrypted chat sessions -- We will be using Hive for this. Stops the few seconds of requesting data and loading it up. Will still be requested and updated, but should first load the local verision for speed
    • Multiple conversations -- Similar to what Intercom does
    • Image upload -- Should be relatively simple once the logic is ready on the Papercups backend
    • Even deeper theming -- Maybe multiple, completely different styles?
    • Replying to certain conversations by sliding like in Telegram/Whatsapp? we could just use the quote block feature from markdown for this.
    enhancement next 
    opened by aguilaair 4
  • Implement theming `PapercupStyle()`, Flutter 3.0 support and more

    Implement theming `PapercupStyle()`, Flutter 3.0 support and more

    Hi @aguilaair!

    This PR includes a couple of changes listed as follow:

    Flutter 3 support

    The change made in 1aa632234a7163095bacf502537427348fdfa93a fixes the redundant null-aware operators warning introduced in Flutter 3.0, while keeping backwards compatibility for previous Flutter versions.

    Full theming support via new PapercupsStyle

    Even with the work made for #18, I encountered some visual discrepancies after enabling dark mode in my app via:

    MaterialApp(
      theme: Themes.lightMode, // Light mode ThemeData
      darkTheme: Themes.darkMode, // Dark mode ThemeData
    )
    

    That's why I exposed most of the styling params via the new PapercupsStyle class. The new API has been detailed in the updated README. Please feel free to double-check I didn't make any mistake there 😅.

    ⚠️ BREAKING CHANGE

    This change also required a breaking change to PaperCupsWidget & Props in order to collocate all visual params.

    Prefix all user-facing classes with Papercups

    In order to add consistency and avoid potential naming conflicts, I add Papercups as a prefix to all the user-facing classes (PapercupsCustomerMetadata, PapercupsProps, PapercupsStyle & PapercupsIntl).

    ⚠️ BREAKING CHANGE

    In the same spirit, I made another breaking change which was renaming PaperCupsWidget to PapercupsWidget, so that it'd follow the official spelling.

    Update README with missing params

    On top of the new PapercupsStyle and moving some of the old PapercupsWidget & PapercupsProps params around, I also added some existing params that were not documented yet.


    I hope all these changes make sense to you and can fit in with what you had planned for the upcoming v3.

    Let me know if you'd like me to make some changes! 🙌

    enhancement 
    opened by CharlesMangwa 3
  • Chats are not persisted

    Chats are not persisted

    When I render the widget, write a message, then close and re-open, all messages are gone. It seems that the messages re-appear once the chat text input is focused. Also, another thing which is a bit weird: once re-opened, it seems that a new conversation is created instead of using the old one. It seems to be easily reproducible. I'm using 2.1.0+1.

    My code:

    PaperCupsWidget(
      closeAction: () {
        Navigator.of(context, rootNavigator: true).pop();
      },
      props: Props(
        accountId: "...",
        customer: CustomerMetadata(
          externalId: res.viewer.id,
          email: res.viewer.email,
          name: res.viewer.name,
        ),
      ),
    );
    

    It seems #68 is related

    bug 
    opened by steebchen 3
  • ✨ Add markdown support (next)

    ✨ Add markdown support (next)

    Currently markdown is not supported. I'd like to keep dependencies minimal to avoid dependency issues (e.g. not including provider, get, etc), so I am not a fan of adding more deps. However, markdown is pretty complex and I don't have the time to implement a custom renderer, especially having flutter_markdown, which we might be able to use https://pub.dev/packages/flutter_markdown

    enhancement next 
    opened by aguilaair 3
  • ✨ Give users more contol on the webview's status

    ✨ Give users more contol on the webview's status

    Investigate allowing functions being passed to onPageStarted, onPageFinished, onWebViewCreated, etc, This could be used for controlling the loading and show a loading spinner while it loads.

    enhancement 
    opened by aguilaair 3
  • Bump http from 0.13.4 to 0.13.5

    Bump http from 0.13.4 to 0.13.5

    Bumps http from 0.13.4 to 0.13.5.

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies 
    opened by dependabot[bot] 0
  • Add cache restoration

    Add cache restoration

    When re-opening the widget, it takes some time until the history is fetched. This is obviously not ideal as it takes a few seconds until the user can see the history, but it also introduces another problem, which is that it actually creates a new conversation for just that messages. Once it loads, the new conversion still appears in the admin conversations panel, but once loaded the old conversion is used.

    A simple workaround for this might be to just add a loading indicator and prevent the user from sending messages until fully loaded, which would automatically prevent this bug where it creates a new conversation. Ideally it would just load faster, and that could probably be achieved by caching the chat history. Maybe the user can provide an optional store to cache the data, like a hive box (which I for example use anyway).

    enhancement help wanted 
    opened by steebchen 2
  • Multiple conversations

    Multiple conversations

    Having the ability to have multiple, concurrent conversations. @phr34k started modularizing the package and adding the ability to do it but there is still a lot of work to be done

    enhancement good first issue 
    opened by aguilaair 0
  • ✅ Add basic unit testing (next)

    ✅ Add basic unit testing (next)

    Should cover the basics for the time being

    • [x] Classes
    • [x] Theming
    • [x] Get customer
    • [ ] Messages added
    • [ ] Get previous messages
    • [x] Update customer
    • [ ] Socket creation
    • [ ] Channel joining

    Any others?

    enhancement help wanted testing 
    opened by aguilaair 2
Releases(3.1.0)
  • 3.1.0(May 29, 2022)

  • 3.0.1+1(May 28, 2022)

  • 3.0.1(May 28, 2022)

  • 3.0.0(May 28, 2022)

    This new version brings full internationalization support along with file upload and unlimited chat appearance customization. This is a breaking release due to the introduction of the PapercupsIntl() and PapercupsStyle() classes.

    A HUGE thank you to all of the contributors in this release. It is great to see new people contributing features. To the rest, thank you for your patience, here's the new release!

    ✨ New Features

    • New file upload functionality by @ryg-git (w/ improvements by @aguilaair)
    • Performance improvements
    • Add title style and alignment by @marwenbk
    • Implement theming PapercupStyle() by @marwenbk

    🐛Bug Fixes

    • Fixed "Last seen" variable by @jonatascm
    • Fix CustomerMetadata otherMetadata not being saved by @CharlesMangwa

    💥 Breaking changes

    • New PapercupsIntl() and PapercupsStyle() classes for customizing the papercups, check README.md for migration guide. By @CharlesMangwa

    New Contributors

    Full Changelog: https://github.com/papercups-io/papercups_flutter/compare/2.1.4...3.0.0

    Source code(tar.gz)
    Source code(zip)
  • 3.0.0-beta.1(Jan 8, 2022)

    [3.0.0-beta.1] - 08/01/2022.

    This new version brings full internationalization support along with file upload. This is a breaking release due to the introduction of the PapercupsIntl() class.

    ✨ New Features

    • New file upload functionality by @ryg-git
    • Performance improvements
    • Add title style and alignment by @marwenbk

    🐛Bug Fixes

    • Fixed "Last seen" variable by @jonatascm

    💥 Breaking changes

    • New PapercupsIntl() class for customizing the papercups, check README.md for migration guide. By @CharlesMangwa

    New Contributors

    • @ryg-git made their first contribution in https://github.com/papercups-io/papercups_flutter/pull/66
    • @jonatascm made their first contribution in https://github.com/papercups-io/papercups_flutter/pull/68
    • @marwenbk made their first contribution in https://github.com/papercups-io/papercups_flutter/pull/74
    • @CharlesMangwa made their first contribution in https://github.com/papercups-io/papercups_flutter/pull/77

    Full Changelog: https://github.com/papercups-io/papercups_flutter/compare/2.1.4...3.0.0-beta.1

    Source code(tar.gz)
    Source code(zip)
  • 2.1.4(Sep 12, 2021)

    [2.1.4] - 12/09/2021.

    Yet another release fixing inter-conversation customer handovers. Hopefully it is all patched up now 🤞

    🐛 Fixed an issue where new customer conversations would create a new ID, stopping links between conversations.

    Source code(tar.gz)
    Source code(zip)
  • 2.1.3(Sep 11, 2021)

    [2.1.3] - 11/09/2021.

    🐛 Fixed an issue where chats appeared as Anonymous in specific cases even if externalId was provided. (covers more cases).

    Source code(tar.gz)
    Source code(zip)
  • 2.1.2r(Sep 11, 2021)

  • 2.1.1(Aug 21, 2021)

  • 2.1.0+1(Apr 18, 2021)

  • 2.1.0(Apr 7, 2021)

  • 2.0.5(Feb 27, 2021)

    ⬆️ Allows timeago to go up to version 3.x.x ♻️ Internal improvements to have the message list inside the conversation ⚡️ Stop passing the whole widget to getCustomerHistory

    Source code(tar.gz)
    Source code(zip)
  • 2.0.3(Feb 17, 2021)

  • 2.0.1(Feb 16, 2021)

    [2.0.1] - 16/02/2021.

    This release is a maintenance release, addressing some issues found on pub.dev to improve its score.

    Fixes

    • Bump intl to 0.17.0
    • Bump http to 0.13.0
    • Modify description to make it over 60 characters
    • Avoided using braces in interpolation when not needed.
    Source code(tar.gz)
    Source code(zip)
  • 2.0.0(Feb 16, 2021)

    🎉 2.0 has landed!

    This release brings major changes to how this package works. Most importantly, it is now completely native, ensuring speed and performance along with more combustibility. This will also enable new features such as chat message notifications, in-app overlays, local message retention and many others, make sure to leave suggestions here for what to build next.

    New Features

    • Native Dart implementation!
    • Full theming control w/gradients.
    • Full Internationalization control - every part can be set to any language.
    • Dark mode
    • Added elevation option to message box

    Enhancements

    • Fixes issue of fuzzy timestamps not updating, see https://github.com/papercups-io/chat-widget/issues/73.
    • Support for Flutter Desktop.
    • Much better loading times

    Breaking changes

    • Removed support for onStartLoading, onFinishLoading and onError.
    • Removed agent availability configuartion, see https://github.com/papercups-io/papercups_flutter/issues/16.
    • Removed iframeUrl.
    • baseUrl in props must not contain a prefix (no http,https,ws, etc).

    Contributors

    Thanks to @Fiyiin for helping me out building this version of the library!

    Source code(tar.gz)
    Source code(zip)
  • 1.0.1(Jan 5, 2021)

    Happy New Year!

    This release is to simply update the Papercups logo on Pub.dev, we are working hard to get the native Papercups implementation (2.0.0) done as soon as possible, we just need to do some more testing.

    Thanks!

    Source code(tar.gz)
    Source code(zip)
  • 1.0.0(Dec 1, 2020)

    Hey!

    This release puts the finishing touches for 1.0.0. I've reworked the example to be much nicer and ran a few tests to ensure everyting works correctly.

    Source code(tar.gz)
    Source code(zip)
  • 0.2.2(Nov 30, 2020)

    [0.2.2] - 30/11/2020.

    • ⚡️ Performance imporvements to genIframeUrl
    • ✨ Added toMap() and toJsonString() to the classes, better URI generation.
    Source code(tar.gz)
    Source code(zip)
  • 0.2.0(Nov 26, 2020)

    This package is now under the papercups-io organization, thanks!

    This release adds adds the ability to know when the widget is loading, done or has had an error, in addition to better docs. If you have any ideas and want to collaborate feel free to open an issue or create a pull request!

    New features

    • onStartLoading, onFinishLoading and onError functions. (#4)

    Enhancements

    • 📝 Improved docs with higher coverage and syntax highlighting (Thanks to @Immortalin).
    • ⚡️ Web widget is now constant. Better preformance.
    • ✨ Update example to show new features.
    Source code(tar.gz)
    Source code(zip)
  • 0.1.0(Nov 22, 2020)

    New features

    • ✨ Flutter Web support!

    Enhancements

    • 📝 Added Known Issues (#10)
    • 🎨 Internal restructuring to support Flutter Web.

    Fixes

    • ✏️ Fixed changelog typos
    Source code(tar.gz)
    Source code(zip)
  • 0.0.3(Nov 19, 2020)

    Enhancements

    • 📝 Improved Readme.md (#9)
    • 📝 Improved API documentation (#1)

    Bug Fixes

    • 🐛 Fixed external id not working correctly (#9)
    • 🐛 Fixed bools being sent incorrectly (#3)
    Source code(tar.gz)
    Source code(zip)
Owner
Papercups
Open source customer messaging
Papercups
Chat app flutter - A Simple Chat App UI With Flutter

Flutter Chat App UI. Flutter Chat App UI. This is a simple flutter application w

null 1 Mar 5, 2022
Simple Chat UI - This template is a simple chat ui build with flutter ui toolkit.

Simple Chat UI This template is a simple chat ui build with flutter ui toolkit. TODO dark mode support image support gif, video, ... web mode desktop

null 2 Apr 24, 2022
Tag chat is a simple and basic chat app created with flutter

TagChat What is TagChat? Tag chat is a simple and basic chat app created with flutter. Description TagChat use firestore as backend Currently it suppo

Mahesh Khatri 2 Jun 22, 2022
flutter chat app with firebase , provider and api with all chat app functions

Full Chat Flutter App In this app we use FireBase Services(firestore - storage - auth - cloud messageing ) Dio for api setiing such as sending remote

Ahmed EL Bagory 35 Dec 14, 2022
Actively maintained, community-driven Firebase BaaS for chat applications with an optional chat UI.

Flutter Firebase Chat Core Actively maintained, community-driven Firebase BaaS for chat applications with an optional chat UI. Flyer Chat is a platfor

Flyer Chat 173 Jan 2, 2023
Widget to count the amount of nested widget tree, useful in the dynamic construction of the interface when it is important to know the depth of widget.

widget_tree_depth_counter Widget Tree Depth Counter WidgetTreeDepthCounter is a simple widget to count the amount of nested widget tree, useful in the

Riccardo Cucia 4 Aug 1, 2022
MindInventory 15 Sep 5, 2022
Flutter course chatapp - A Flutter Course Chat App Starter

flutter_course_chat_app_starter Getting Started Firebase installations 1- Open F

Dhari 0 Jan 5, 2022
a chat app ui design made in flutter

Chat Application UI in Flutter a chat application ui created using flutter. this application consits of two pages Homepage view with tab bar and tab b

Antony David 65 Dec 17, 2022
Simple tool to open WhatsApp chat without saving the number, developed using Google's Flutter Framework. for Android/ IOS/ Desktop/ Web

OpenWp Simple tool to open WhatsApp chat without saving the number Explore the docs » View Demo · Report Bug · Request Feature Table of Contents About

Swarup Bhanja Chowdhury 15 Nov 1, 2022
Sticker chat is a messaging application built using Flutter, Stream, and Rive

Sticker Chat ?? Sticker chat is a messaging application built using Flutter, Stream, and Rive. It allows users to send and receive messages in real-ti

Neevash Ramdial (Nash) 47 Nov 23, 2022
Project demonstrates building a simple chat application using Flutter framework and Firebase cloud

Flutter Chat on Firebase Project demonstrates building a simple chat application using Flutter framework and Firebase cloud. App does not poll for new

Sukitha Udugamasooriya 8 Feb 2, 2022
Flutter chat-app UI with multiple themes & light + Dark mode.

Chat-App UI Only a PART of code available, for complete code ping here Features of the app - Light Mode + Dark Mode 4 different color themes - pink/te

Deepa Pandey 31 Oct 5, 2022
A chat app built on Flutter with firebase authentication and image sharing capability.

Flutter Chat App A one-to-one chat app built on Flutter with firebase authentication and image sharing capability. For help getting started with Flutt

Rohan Taneja 1.1k Dec 27, 2022
Be together, whenever. A simple way to text chat and plan things all in one place for flutter developers.

Flutterdevconnect Be together, whenever. A simple way to text chat and plan things all in one place for flutter developers. Android IOS Web PWA Androi

Sanskar Tiwari 69 Aug 27, 2022
This is the Zuri Chat Android app project repository handled by TEAM SOCRATES, written with pure Flutter.

Zuri Chat Overview This is the Zuri Chat Android app project repository handled by TEAM SOCRATES, written with pure Flutter. NB: Always contact Team l

Zuri Chat 32 Nov 22, 2022
projeto de flutter com Websocket para aplicações com atualização em tempo real, demonstração com chat.

chat_socket A new Flutter project. Getting Started This project is a starting point for a Flutter application. A few resources to get you started if t

Luanzera07 0 Jan 3, 2022
OX COI Messenger - a Flutter app for the COI (Chat Over IMAP) standard

Project on hold for now Please note that the OX COI Messenger project is currently not active. In the past this project was hindered by the lack of Ru

null 182 Dec 23, 2022
CampusChat - Campus Chat App made in Flutter and Firebase

CampusChat Get your doubts cleared the right way! About I just wanted to push my

Vedant Kulkarni 23 Nov 26, 2022