Files
stream-chat-flutter/packages/stream_chat_flutter
Reuben TurnerandGitHub 485e077596 feat: add GalleryHeader/GalleryFooter theme classes (#546)
* chore: Add ImageHeaderTheme and ImageHeaderThemeData to stream_chat_theme.dart

This commit adds the following classes to `stream_chat_theme.dart`:
1. `ImageHeaderTheme`, an `InheritedTheme` widget that can wrap other widgets and provide that sub-tree with an `ImageHeaderThemeData`
2. `ImageHeaderThemeData`, a class that allows for the customization of `ImageHeader` widgets

* Make ImageHeaderThemeData constructor const

* test: initial ImageHeaderThemeData tests

Tests the copyWith, ==, and hashcode functions

* test: add tests for default ImageHeaderThemeData values

Tests the default values of ImageHeaderThemeData that gets built in a StreamChatThemeData against control values.

* Update test name and add comments describing control

* fix: use ImageHeaderTheme.of(context) instead of StreamChatTheme.of(context)

This ensures that ImageHeader will always look for the closest ImageHeaderThemeData in the widget tree.

* test: add dark theme default values test

* run dartfmt on test file

* test: lerping between ImageHeaderThemeData

Added tests that lerp from one ImageHeaderThemeData to another (light to dark and dark to light)

* test: merging ImageHeaderThemeData

Added tests that merge light and dark ImageHeaderThemeData together (light + dark = dark, dark + light = light)

* test: add a half-lerp test

Added a test that lerps halway between light and dark ImageHeaderThemeData

* chore: Add ImageFooterTheme and ImageFooterThemeData to stream_chat_theme.dart

This commit adds the following classes to `stream_chat_theme.dart`:
1. `ImageFooterTheme`, an `InheritedTheme` widget that can wrap other widgets and provide that sub-tree with an `ImageFooterThemeData`
2. `ImageFooterThemeData`, a class that allows for the customization of `ImageFooter` widget

* chore: apply ImageFooterThemeData to image_footer.dart

* fix: make ImageFooterThemeData constructor const

* test: add tests for ImageFooterThemeData

* add a missing trailing comma

* chore: rename ImageHeader & ImageFooter to GalleryHeader and GalleryFooter

The respective theme classes and tests have also been renamed

* Run dartfmt on test

* test: fix failing tests due to renaming
2021-07-15 15:44:12 +02:00
..
2021-02-01 15:45:58 +01:00
2021-06-29 16:12:51 +02:00
2021-02-01 15:45:58 +01:00
2021-02-01 15:45:58 +01:00
2021-02-01 15:45:58 +01:00
2021-07-08 09:36:10 +02:00
2021-02-01 15:45:58 +01:00
2021-07-07 17:39:55 +02:00
2021-04-01 15:34:43 +02:00

Official Flutter SDK for Stream Chat

The official Flutter components for Stream Chat, a service for building chat applications.

Pub CI

Quick Links

Changelog

Check out the changelog on pub.dev to see the latest changes in the package.

Flutter Chat Tutorial

The best place to start is the Flutter Chat Tutorial. It teaches you how to use this SDK and also shows how to make frequently required changes.

Example App

This repo includes a fully functional example app with setup instructions. The example is available under the example folder.

Add dependency

Add this to your package's pubspec.yaml file, use the latest version Pub

dependencies:
 stream_chat_flutter: ^latest_version

You should then run flutter packages get

Android

All set

iOS

The library uses flutter file picker plugin to pick files from the os. Follow this wiki to fulfill iOS requirements.

We also use video_player to reproduce videos. Follow this guide to fulfill the requirements.

To pick images from the camera, we use the image_picker plugin. Follow these instructions to check the requirements.

Troubleshooting

It may happen that you have some problems building the app. If it seems related to the flutter file picker plugin make sure to check this page

Docs

This package provides UI components required for integrating Stream Chat into your application. Alternatively, you may use the core package stream_chat_flutter_core which allows more customisation and provides business logic but no UI components. If you require the maximum amount of control over the API, please use the low level client package: stream_chat.

UI Components

These are the available Widgets that you can use to build your application UI. Every widget uses the StreamChat or StreamChannel widgets to manage the state and communicate with Stream services.

Customizing styles

The Flutter SDK comes with a fully designed set of widgets that you can customize to fit with your application style and typography. Changing the theme of Chat widgets works in a very similar way that MaterialApp and Theme do.

Out of the box, all chat widgets use their default styling, and there are two ways to change the styling:

  1. Initialize the StreamChatTheme from your existing MaterialApp style
class MyApp extends StatelessWidget {
  final StreamChatClient client;

  MyApp(this.client);

  @override
  Widget build(BuildContext context) {
    final theme = ThemeData(
      primarySwatch: Colors.green,
    );

    return MaterialApp(
      theme: theme,
      builder: (context, child) => StreamChat(
       child: child,
       client: client,
       streamChatThemeData: StreamChatThemeData.fromTheme(theme),
      ),
      home: ChannelListPage(),
      );
  }
}
  1. Construct a custom theme and provide all the customizations needed
class MyApp extends StatelessWidget {
  final StreamChatClient client;

  MyApp(this.client);

  @override
  Widget build(BuildContext context) {
    final theme = ThemeData(
      primarySwatch: Colors.green,
    );

    return MaterialApp(
      theme: theme,
      builder: (context, child) => StreamChat(
       child: child,
       client: client,
       streamChatThemeData: StreamChatThemeData.fromTheme(theme).copyWith(
          ownMessageTheme: MessageTheme(
          messageBackgroundColor: Colors.black,
          messageText: TextStyle(
            color: Colors.white,
          ),
          avatarTheme: AvatarTheme(
            borderRadius: BorderRadius.circular(8),
          ),
          ),
       ),
      ),
      home: ChannelListPage(),
      );
  }
}

Offline storage

To add data persistance you can extend the class ChatPersistenceClient and pass an instance to the StreamChatClient.

class CustomChatPersistentClient extends ChatPersistenceClient {
...
}

final client = StreamChatClient(
  apiKey ?? kDefaultStreamApiKey,
  logLevel: Level.INFO,
)..chatPersistenceClient = CustomChatPersistentClient();

We provide an official persistent client in the (stream_chat_persistence)[https://pub.dev/packages/stream_chat_persistence] package.

import 'package:stream_chat_persistence/stream_chat_persistence.dart';

final chatPersistentClient = StreamChatPersistenceClient(
  logLevel: Level.INFO,
  connectionMode: ConnectionMode.background,
);

final client = StreamChatClient(
  apiKey ?? kDefaultStreamApiKey,
  logLevel: Level.INFO,
)..chatPersistenceClient = chatPersistentClient;

Contributing

We welcome code changes that improve this library or fix a problem, please make sure to follow all best practices and add tests if applicable before submitting a Pull Request on Github. We are pleased to merge your code into the official repository. Make sure to sign our Contributor License Agreement (CLA) first. See our license file for more details.