Для реализации простейшей системы получения и отображения сообщений в списке Flutter, вы можете использовать ListView и StreamBuilder.
Первым шагом необходимо создать модель для сообщения. Создайте класс Message с полями, такими как текст сообщения, дата отправки и отправитель.
// message.dart
class Message {
final String text;
final DateTime date;
final String sender;
Message({
required this.text,
required this.date,
required this.sender,
});
}
Затем создайте виджет, который будет отображать список сообщений. В этом виджете мы будем использовать ListView.builder для отображения сообщений из заданного списка.
// messages_list.dart
import 'package:flutter/material.dart';
class MessagesList extends StatelessWidget {
final List<Message> messages;
MessagesList({
required this.messages,
});
@override
Widget build(BuildContext context) {
return ListView.builder(
itemCount: messages.length,
itemBuilder: (context, index) {
final message = messages[index];
return ListTile(
title: Text(message.text),
subtitle: Text(message.sender),
trailing: Text(message.date.toString()),
);
},
);
}
}
Теперь у нас есть список сообщений и виджет, который может отображать этот список. Осталось только получать сообщения и передавать их в наш виджет.
Для получения сообщений я рекомендую использовать пакет firebase_messaging, который позволяет получать уведомления из Firebase Cloud Messaging (FCM). Чтобы использовать этот пакет, добавьте его в зависимости вашего проекта в pubspec.yaml.
После этого вы можете создать класс MessageService, который будет отвечать за получение сообщений из FCM. В этом классе вы можете настроить Firebase и обрабатывать полученные сообщения.
// message_service.dart
import 'package:firebase_messaging/firebase_messaging.dart';
class MessageService {
final FirebaseMessaging _firebaseMessaging = FirebaseMessaging.instance;
Stream<List<Message>> getMessagesStream() {
final controller = StreamController<List<Message>>();
_firebaseMessaging.onMessage.listen((RemoteMessage message) {
final messageData = message.data;
final newText = messageData['text'];
final newDate = DateTime.parse(messageData['date']);
final newSender = messageData['sender'];
final newMessage = Message(
text: newText,
date: newDate,
sender: newSender,
);
controller.sink.add([...controller.stream.value, newMessage]);
});
return controller.stream;
}
}
Теперь мы можем использовать MessageService для получения сообщений и передачи их в наш виджет MessagesList.
// main.dart
import 'package:flutter/material.dart';
import 'message.dart';
import 'message_service.dart';
import 'messages_list.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
final MessageService messageService = MessageService();
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('Message List'),
),
body: StreamBuilder<List<Message>>(
stream: messageService.getMessagesStream(),
initialData: [],
builder: (context, snapshot) {
final messages = snapshot.data!;
return MessagesList(messages: messages);
},
),
),
);
}
}
Теперь, когда вы запускаете приложение, вы увидите список сообщений, который будет автоматически обновляться при получении новых сообщений из Firebase.