Как реализовать простейшую систему получения сообщений и отображения их в списке Flutter?

Для реализации простейшей системы получения и отображения сообщений в списке 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.