Files
Sahil Kumar a872ae34bb chore: bump and migrate deps.
Signed-off-by: xsahil03x <xdsahil@gmail.com>
2023-06-20 00:35:25 +05:30

130 lines
4.1 KiB
Dart

import 'package:example/utils/localizations.dart';
import 'package:example/routes/routes.dart';
import 'package:flutter/material.dart';
import 'package:go_router/go_router.dart';
import 'package:stream_chat_flutter/stream_chat_flutter.dart';
class PinnedMessagesScreen extends StatefulWidget {
const PinnedMessagesScreen({super.key});
@override
State<PinnedMessagesScreen> createState() => _PinnedMessagesScreenState();
}
class _PinnedMessagesScreenState extends State<PinnedMessagesScreen> {
late final controller = StreamMessageSearchListController(
client: StreamChat.of(context).client,
filter: Filter.in_(
'cid',
[StreamChannel.of(context).channel.cid!],
),
messageFilter: Filter.equal(
'pinned',
true,
),
sort: [
const SortOption(
'created_at',
direction: SortOption.ASC,
),
],
limit: 20,
);
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: StreamChatTheme.of(context).colorTheme.barsBg,
appBar: AppBar(
elevation: 1,
centerTitle: true,
title: Text(
AppLocalizations.of(context).pinnedMessages,
style: TextStyle(
color: StreamChatTheme.of(context).colorTheme.textHighEmphasis,
fontSize: 16.0,
),
),
leading: const StreamBackButton(),
backgroundColor: StreamChatTheme.of(context).colorTheme.barsBg,
),
body: StreamMessageSearchListView(
controller: controller,
emptyBuilder: (_) {
return Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
StreamSvgIcon.pin(
size: 136.0,
color: StreamChatTheme.of(context).colorTheme.disabled,
),
const SizedBox(height: 16.0),
Text(
AppLocalizations.of(context).noPinnedItems,
style: TextStyle(
fontSize: 17.0,
color:
StreamChatTheme.of(context).colorTheme.textHighEmphasis,
fontWeight: FontWeight.bold,
),
),
const SizedBox(height: 8.0),
RichText(
textAlign: TextAlign.center,
text: TextSpan(children: [
TextSpan(
text: '${AppLocalizations.of(context).longPressMessage} ',
style: TextStyle(
fontSize: 14.0,
color: StreamChatTheme.of(context)
.colorTheme
.textHighEmphasis
.withOpacity(0.5),
),
),
TextSpan(
text: AppLocalizations.of(context).pinToConversation,
style: TextStyle(
fontSize: 14.0,
fontWeight: FontWeight.bold,
color: StreamChatTheme.of(context)
.colorTheme
.textHighEmphasis
.withOpacity(0.5),
),
),
]),
),
],
),
);
},
onMessageTap: (messageResponse) async {
final client = StreamChat.of(context).client;
final router = GoRouter.of(context);
final message = messageResponse.message;
final channel = client.channel(
messageResponse.channel!.type,
id: messageResponse.channel!.id,
);
if (channel.state == null) {
await channel.watch();
}
router.pushNamed(
Routes.CHANNEL_PAGE.name,
pathParameters: Routes.CHANNEL_PAGE.params(channel),
queryParameters: Routes.CHANNEL_PAGE.queryParams(message),
);
},
),
);
}
@override
void dispose() {
controller.dispose();
super.dispose();
}
}