add badge on unread messages
This commit is contained in:
@@ -1 +1 @@
|
|||||||
0289cdadbd29bab804f275e3c5907d07
|
89eb023669fee58472de747080d78b5a
|
||||||
@@ -80,6 +80,8 @@ PODS:
|
|||||||
- Flutter (1.0.0)
|
- Flutter (1.0.0)
|
||||||
- flutter_apns (0.0.1):
|
- flutter_apns (0.0.1):
|
||||||
- Flutter
|
- Flutter
|
||||||
|
- flutter_app_badger (0.0.1):
|
||||||
|
- Flutter
|
||||||
- flutter_keyboard_visibility (0.0.1):
|
- flutter_keyboard_visibility (0.0.1):
|
||||||
- Flutter
|
- Flutter
|
||||||
- flutter_local_notifications (0.0.1):
|
- flutter_local_notifications (0.0.1):
|
||||||
@@ -160,6 +162,7 @@ DEPENDENCIES:
|
|||||||
- firebase_messaging (from `.symlinks/plugins/firebase_messaging/ios`)
|
- firebase_messaging (from `.symlinks/plugins/firebase_messaging/ios`)
|
||||||
- Flutter (from `Flutter`)
|
- Flutter (from `Flutter`)
|
||||||
- flutter_apns (from `.symlinks/plugins/flutter_apns/ios`)
|
- flutter_apns (from `.symlinks/plugins/flutter_apns/ios`)
|
||||||
|
- flutter_app_badger (from `.symlinks/plugins/flutter_app_badger/ios`)
|
||||||
- flutter_keyboard_visibility (from `.symlinks/plugins/flutter_keyboard_visibility/ios`)
|
- flutter_keyboard_visibility (from `.symlinks/plugins/flutter_keyboard_visibility/ios`)
|
||||||
- flutter_local_notifications (from `.symlinks/plugins/flutter_local_notifications/ios`)
|
- flutter_local_notifications (from `.symlinks/plugins/flutter_local_notifications/ios`)
|
||||||
- image_picker (from `.symlinks/plugins/image_picker/ios`)
|
- image_picker (from `.symlinks/plugins/image_picker/ios`)
|
||||||
@@ -207,6 +210,8 @@ EXTERNAL SOURCES:
|
|||||||
:path: Flutter
|
:path: Flutter
|
||||||
flutter_apns:
|
flutter_apns:
|
||||||
:path: ".symlinks/plugins/flutter_apns/ios"
|
:path: ".symlinks/plugins/flutter_apns/ios"
|
||||||
|
flutter_app_badger:
|
||||||
|
:path: ".symlinks/plugins/flutter_app_badger/ios"
|
||||||
flutter_keyboard_visibility:
|
flutter_keyboard_visibility:
|
||||||
:path: ".symlinks/plugins/flutter_keyboard_visibility/ios"
|
:path: ".symlinks/plugins/flutter_keyboard_visibility/ios"
|
||||||
flutter_local_notifications:
|
flutter_local_notifications:
|
||||||
@@ -244,6 +249,7 @@ SPEC CHECKSUMS:
|
|||||||
FirebaseMessaging: 29543feb343b09546ab3aa04d008ee8595b43c44
|
FirebaseMessaging: 29543feb343b09546ab3aa04d008ee8595b43c44
|
||||||
Flutter: 0e3d915762c693b495b44d77113d4970485de6ec
|
Flutter: 0e3d915762c693b495b44d77113d4970485de6ec
|
||||||
flutter_apns: f516b118e423fe7c0a38771180549c4d6cb67c2f
|
flutter_apns: f516b118e423fe7c0a38771180549c4d6cb67c2f
|
||||||
|
flutter_app_badger: 65de4d6f0c34a891df49e6cfb8a1c0496426fa68
|
||||||
flutter_keyboard_visibility: 0339d06371254c3eb25eeb90ba8d17dca8f9c069
|
flutter_keyboard_visibility: 0339d06371254c3eb25eeb90ba8d17dca8f9c069
|
||||||
flutter_local_notifications: 0c0b1ae97e741e1521e4c1629a459d04b9aec743
|
flutter_local_notifications: 0c0b1ae97e741e1521e4c1629a459d04b9aec743
|
||||||
FMDB: 2ce00b547f966261cd18927a3ddb07cb6f3db82a
|
FMDB: 2ce00b547f966261cd18927a3ddb07cb6f3db82a
|
||||||
|
|||||||
@@ -322,6 +322,7 @@
|
|||||||
"${BUILT_PRODUCTS_DIR}/SwiftyGif/SwiftyGif.framework",
|
"${BUILT_PRODUCTS_DIR}/SwiftyGif/SwiftyGif.framework",
|
||||||
"${BUILT_PRODUCTS_DIR}/file_picker/file_picker.framework",
|
"${BUILT_PRODUCTS_DIR}/file_picker/file_picker.framework",
|
||||||
"${BUILT_PRODUCTS_DIR}/flutter_apns/flutter_apns.framework",
|
"${BUILT_PRODUCTS_DIR}/flutter_apns/flutter_apns.framework",
|
||||||
|
"${BUILT_PRODUCTS_DIR}/flutter_app_badger/flutter_app_badger.framework",
|
||||||
"${BUILT_PRODUCTS_DIR}/flutter_keyboard_visibility/flutter_keyboard_visibility.framework",
|
"${BUILT_PRODUCTS_DIR}/flutter_keyboard_visibility/flutter_keyboard_visibility.framework",
|
||||||
"${BUILT_PRODUCTS_DIR}/flutter_local_notifications/flutter_local_notifications.framework",
|
"${BUILT_PRODUCTS_DIR}/flutter_local_notifications/flutter_local_notifications.framework",
|
||||||
"${BUILT_PRODUCTS_DIR}/image_picker/image_picker.framework",
|
"${BUILT_PRODUCTS_DIR}/image_picker/image_picker.framework",
|
||||||
@@ -350,6 +351,7 @@
|
|||||||
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SwiftyGif.framework",
|
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SwiftyGif.framework",
|
||||||
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/file_picker.framework",
|
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/file_picker.framework",
|
||||||
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/flutter_apns.framework",
|
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/flutter_apns.framework",
|
||||||
|
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/flutter_app_badger.framework",
|
||||||
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/flutter_keyboard_visibility.framework",
|
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/flutter_keyboard_visibility.framework",
|
||||||
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/flutter_local_notifications.framework",
|
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/flutter_local_notifications.framework",
|
||||||
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/image_picker.framework",
|
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/image_picker.framework",
|
||||||
|
|||||||
@@ -54,5 +54,9 @@
|
|||||||
</array>
|
</array>
|
||||||
<key>UIViewControllerBasedStatusBarAppearance</key>
|
<key>UIViewControllerBasedStatusBarAppearance</key>
|
||||||
<false/>
|
<false/>
|
||||||
|
<key>UIBackgroundModes</key>
|
||||||
|
<array>
|
||||||
|
<string>remote-notification</string>
|
||||||
|
</array>
|
||||||
</dict>
|
</dict>
|
||||||
</plist>
|
</plist>
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
name: example
|
name: example
|
||||||
description: A new Flutter project.
|
description: A new Flutter project.
|
||||||
version: 1.0.31+33
|
version: 1.0.33+35
|
||||||
|
|
||||||
environment:
|
environment:
|
||||||
sdk: ">=2.2.2 <3.0.0"
|
sdk: ">=2.2.2 <3.0.0"
|
||||||
|
|||||||
@@ -218,13 +218,16 @@ class MessageActionsModal extends StatelessWidget {
|
|||||||
StreamIcons.edit,
|
StreamIcons.edit,
|
||||||
size: 22,
|
size: 22,
|
||||||
color:
|
color:
|
||||||
StreamChatTheme.of(context).primaryIconTheme.color,
|
StreamChatTheme.of(context).primaryIconTheme.color,
|
||||||
),
|
),
|
||||||
onPressed: () {},
|
onPressed: () {},
|
||||||
),
|
),
|
||||||
Text(
|
Text(
|
||||||
'Edit message',
|
'Edit message',
|
||||||
style: Theme.of(context).textTheme.headline6.copyWith(fontWeight: FontWeight.bold),
|
style: Theme.of(context)
|
||||||
|
.textTheme
|
||||||
|
.headline6
|
||||||
|
.copyWith(fontWeight: FontWeight.bold),
|
||||||
),
|
),
|
||||||
IconButton(
|
IconButton(
|
||||||
icon: Icon(
|
icon: Icon(
|
||||||
|
|||||||
@@ -192,7 +192,7 @@ class MessageInputState extends State<MessageInput> {
|
|||||||
padding: const EdgeInsets.all(8.0),
|
padding: const EdgeInsets.all(8.0),
|
||||||
child: _buildTextField(context),
|
child: _buildTextField(context),
|
||||||
),
|
),
|
||||||
if(widget.parentMessage != null)
|
if (widget.parentMessage != null)
|
||||||
Padding(
|
Padding(
|
||||||
padding: const EdgeInsets.symmetric(horizontal: 8.0),
|
padding: const EdgeInsets.symmetric(horizontal: 8.0),
|
||||||
child: _buildDmCheckbox(),
|
child: _buildDmCheckbox(),
|
||||||
@@ -222,7 +222,11 @@ class MessageInputState extends State<MessageInput> {
|
|||||||
Widget _buildDmCheckbox() {
|
Widget _buildDmCheckbox() {
|
||||||
return Row(
|
return Row(
|
||||||
children: [
|
children: [
|
||||||
Checkbox(value: _sendAsDm, onChanged: (val) => setState(() {_sendAsDm = val;})),
|
Checkbox(
|
||||||
|
value: _sendAsDm,
|
||||||
|
onChanged: (val) => setState(() {
|
||||||
|
_sendAsDm = val;
|
||||||
|
})),
|
||||||
Padding(
|
Padding(
|
||||||
padding: const EdgeInsets.symmetric(horizontal: 8.0),
|
padding: const EdgeInsets.symmetric(horizontal: 8.0),
|
||||||
child: Text('Send also as direct message'),
|
child: Text('Send also as direct message'),
|
||||||
@@ -316,9 +320,11 @@ class MessageInputState extends State<MessageInput> {
|
|||||||
var matchedCommandsList = StreamChannel.of(context)
|
var matchedCommandsList = StreamChannel.of(context)
|
||||||
.channel
|
.channel
|
||||||
.config
|
.config
|
||||||
.commands.where((element) => element.name == s.substring(1)).toList();
|
.commands
|
||||||
|
.where((element) => element.name == s.substring(1))
|
||||||
|
.toList();
|
||||||
|
|
||||||
if(matchedCommandsList.length == 1) {
|
if (matchedCommandsList.length == 1) {
|
||||||
_chosenCommand = matchedCommandsList[0];
|
_chosenCommand = matchedCommandsList[0];
|
||||||
textEditingController.clear();
|
textEditingController.clear();
|
||||||
_messageIsPresent = false;
|
_messageIsPresent = false;
|
||||||
@@ -796,8 +802,8 @@ class MessageInputState extends State<MessageInput> {
|
|||||||
return Center(
|
return Center(
|
||||||
child: InkWell(
|
child: InkWell(
|
||||||
child: Padding(
|
child: Padding(
|
||||||
padding: EdgeInsets.only(
|
padding:
|
||||||
left: 8.0, right: padding, top: 8.0, bottom: 8.0),
|
EdgeInsets.only(left: 8.0, right: padding, top: 8.0, bottom: 8.0),
|
||||||
child: Icon(StreamIcons.attach),
|
child: Icon(StreamIcons.attach),
|
||||||
),
|
),
|
||||||
onTap: () {
|
onTap: () {
|
||||||
@@ -1053,7 +1059,9 @@ class MessageInputState extends State<MessageInput> {
|
|||||||
child: Transform.rotate(
|
child: Transform.rotate(
|
||||||
angle: widget.editMessage == null ? -pi / 2 : 0,
|
angle: widget.editMessage == null ? -pi / 2 : 0,
|
||||||
child: Icon(
|
child: Icon(
|
||||||
widget.editMessage == null ? StreamIcons.send_message : StreamIcons.check_send,
|
widget.editMessage == null
|
||||||
|
? StreamIcons.send_message
|
||||||
|
: StreamIcons.check_send,
|
||||||
color: StreamChatTheme.of(context).accentColor,
|
color: StreamChatTheme.of(context).accentColor,
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ import 'dart:async';
|
|||||||
|
|
||||||
import 'package:flutter/foundation.dart';
|
import 'package:flutter/foundation.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:flutter_app_badger/flutter_app_badger.dart';
|
||||||
import 'package:stream_chat/stream_chat.dart';
|
import 'package:stream_chat/stream_chat.dart';
|
||||||
import 'package:stream_chat_flutter/src/stream_chat_theme.dart';
|
import 'package:stream_chat_flutter/src/stream_chat_theme.dart';
|
||||||
|
|
||||||
@@ -186,6 +187,13 @@ class StreamChatState extends State<StreamChat> with WidgetsBindingObserver {
|
|||||||
void initState() {
|
void initState() {
|
||||||
super.initState();
|
super.initState();
|
||||||
WidgetsBinding.instance.addObserver(this);
|
WidgetsBinding.instance.addObserver(this);
|
||||||
|
client.state.totalUnreadCountStream.listen((count) {
|
||||||
|
if (count > 0) {
|
||||||
|
FlutterAppBadger.updateBadgeCount(count);
|
||||||
|
} else {
|
||||||
|
FlutterAppBadger.removeBadge();
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
StreamSubscription _newMessageSubscription;
|
StreamSubscription _newMessageSubscription;
|
||||||
|
|||||||
@@ -11,6 +11,7 @@ environment:
|
|||||||
dependencies:
|
dependencies:
|
||||||
flutter:
|
flutter:
|
||||||
sdk: flutter
|
sdk: flutter
|
||||||
|
flutter_app_badger: ^1.1.2
|
||||||
photo_view: ^0.10.1
|
photo_view: ^0.10.1
|
||||||
rxdart: ^0.24.1
|
rxdart: ^0.24.1
|
||||||
jiffy: ^3.0.1
|
jiffy: ^3.0.1
|
||||||
|
|||||||
Reference in New Issue
Block a user