flutter_chat/packages/flutter_community_chat_view/example/lib/main.dart

135 lines
3.6 KiB
Dart
Raw Normal View History

2022-11-01 08:33:32 +01:00
// SPDX-FileCopyrightText: 2022 Iconica
//
// SPDX-License-Identifier: BSD-3-Clause
import 'dart:async';
import 'package:flutter/material.dart';
import 'package:flutter_community_chat_view/flutter_community_chat_view.dart';
2022-10-14 15:00:22 +02:00
void main() {
runApp(const MaterialApp(home: MyStatefulWidget()));
}
2022-10-14 15:00:22 +02:00
class MyStatefulWidget extends StatefulWidget {
const MyStatefulWidget({super.key});
2022-10-14 15:00:22 +02:00
@override
State<MyStatefulWidget> createState() => _MyStatefulWidgetState();
}
2022-10-14 15:00:22 +02:00
class _MyStatefulWidgetState extends State<MyStatefulWidget> {
2023-03-31 14:20:28 +02:00
static final pietUser = ChatUserModel(
firstName: 'Piet',
lastName: 'Jansen',
imageUrl: 'https://xsgames.co/randomusers/avatar.php?g=female',
);
static final janUser = ChatUserModel(
firstName: 'Jan',
lastName: 'Jansen',
imageUrl: 'https://xsgames.co/randomusers/avatar.php?g=male',
);
static final messages = [
ChatTextMessageModel(
2023-03-31 14:20:28 +02:00
sender: pietUser,
text: 'Hoe gaat het?',
timestamp: DateTime.now(),
),
ChatTextMessageModel(
sender: ChatUserModel(
firstName: 'Jan',
lastName: 'Jansen',
imageUrl: 'https://xsgames.co/randomusers/avatar.php?g=male',
),
text: 'Met mij gaat het goed, dankje!',
timestamp: DateTime.now(),
)
];
2022-10-14 15:00:22 +02:00
static final chat = PersonalChatModel(
user: ChatUserModel(
firstName: 'Sjoerd',
lastName: 'Sjagerars',
2023-03-31 13:28:55 +02:00
imageUrl: 'https://xsgames.co/randomusers/avatar.php?g=female',
),
messages: messages,
);
2022-10-14 15:00:22 +02:00
2023-03-31 14:20:28 +02:00
static final groupChat = GroupChatModel(
title: 'Group chat',
imageUrl: 'https://xsgames.co/randomusers/avatar.php?g=male',
users: [pietUser, janUser],
messages: messages);
Stream<List<ChatModel>> get chatStream => (() {
late StreamController<List<ChatModel>> controller;
controller = StreamController<List<ChatModel>>(
onListen: () {
controller.add([
chat,
2023-03-31 14:20:28 +02:00
groupChat,
chat,
]);
},
);
return controller.stream;
})();
2022-10-14 15:00:22 +02:00
Stream<List<ChatTextMessageModel>> get messageStream => (() {
late StreamController<List<ChatTextMessageModel>> controller;
controller = StreamController<List<ChatTextMessageModel>>(
onListen: () {
controller.add(
messages,
);
2022-10-14 15:00:22 +02:00
Future.delayed(
const Duration(seconds: 5),
() => controller.add(
[
...messages,
...messages,
],
),
);
},
);
return controller.stream;
})();
2022-10-14 15:00:22 +02:00
@override
Widget build(BuildContext context) {
var options = const ChatOptions();
return ChatScreen(
chats: chatStream,
options: options,
onPressChat: (chat) => Navigator.of(context).push(
MaterialPageRoute(
builder: (context) => ChatDetailScreen(
chat: chat,
chatMessages: messageStream,
options: options,
onMessageSubmit: (text) async {
return Future.delayed(
const Duration(
milliseconds: 500,
),
() => debugPrint('onMessageSubmit'),
);
},
onUploadImage: (image) async {},
),
),
),
onDeleteChat: (chat) => Future.delayed(
const Duration(
milliseconds: 500,
),
() => debugPrint('onDeleteChat'),
),
onPressStartChat: () => debugPrint('onPressStartChat'),
);
}
}