ApptiveGrid Heinzelmen

These are little helper heinzelmen to help with the ApptiveGrid Flutter Packages

Attachment Image

Display an Attachment Image from ApptiveGrid. This includes loading logic for thumbnails. It also allows to only load thumbnails when the full size image is not needed.

  attachment: attachment,
  loadingWidget: WidgetToShowWhileLoading(),
  // Only load small and large thumbnail
  loadUntil: LoadUntil.large,

Configuration Change Notifier

Useful to provide different Options based on differen ApptiveGridEnviornments.

_configurationNotifier = ConfigurationChangeNotifier<dynamic>(
    environment: widget.initialEnvironment,
    configurations: {
        ApptiveGridEnvironment.alpha: ApptiveGridEnvironment.alpha,
        ApptiveGridEnvironment.beta: ApptiveGridEnvironment.beta,
        ApptiveGridEnvironment.production: ApptiveGridEnvironment.production,


return ChangeNotifierProvider.value(
  value: _configurationNotifier,
  child: child,

Environment Switcher

A widget which takes Info from a ConfigurationChangeNotifier and displays a dropdown menu button to switch between available Environments.

  title: Text('Environment'),
  trailing: EnvironmentSwitcher(
    onChangeEnvironment: (environment) async {
      await _logout();

Stage Banner

A combination of a ChangeNotifier to keep track of the setting and a Banner Widget to show the current Environment as a Banner. Note this will never show a banner on production only on beta and alpha.

  create: (_) => EnableBannerNotifier.create(() async {
    final prefs = await SharedPreferences.getInstance();
    return prefs.getBool(PreferencesKeys.enableBanner) ?? true;
  child: child,


/// Further down the widget tree
return StageBanner(
  child: child,


Formal German Translations for ApptiveGridUserManagementTranslations to use this instead of the default Strings that address the user with 'DU' add this to the ApptiveGridUserManagement Widget like this

    customTranslations: {
        const Locale.fromSubtags(languageCode: 'de'):


Show a DataEntity in a format closer to the ApptiveGrid Web UI.

const DataWidget(
  data: dataEntity,


Show a ProfilePicture for an ApptiveGrid User and show the initials if no image is available.

const ProfilePicture({
    userId: 'userId',
    name: 'Christian Denker',


Show a Dialog to invite someone to a Space

showSpaceInvitationDialog(context: context, space: space);

The available Roles and Invitation Method (Invitation, Direct Add) can be configured as well as all Strings. For more Details check the code Documentation

An extension method to skip having to write custom response parsers when performing ApptiveLink if the result is an ApptiveGrid Object or a list of those.

final client = ApptiveGridClient();

final grids = await client.performApptiveLinkForApptiveGridObject<List<Grid>>(link: gridLink);

can be used instead of

final client = ApptiveGridClient();

final grids = await client.performApptiveLink<List<Grid>>(
  link: gridLink,
  parseResponse: (response) async {
    final jsonList = (jsonDecode(response.body) as Map)['items'] as List;
    return => Grid.fromJson(e)).toList();