mirror of
https://github.com/nostrlabs-io/zap-stream-flutter.git
synced 2025-06-15 11:48:21 +00:00
refactor: use ListView for chat perf
This commit is contained in:
@ -47,6 +47,8 @@ class ChatWidget extends StatelessWidget {
|
|||||||
_ => e.pubKey,
|
_ => e.pubKey,
|
||||||
}),
|
}),
|
||||||
)
|
)
|
||||||
|
.sortedBy((e) => e.createdAt)
|
||||||
|
.reversed
|
||||||
.toList();
|
.toList();
|
||||||
|
|
||||||
return Column(
|
return Column(
|
||||||
@ -55,27 +57,39 @@ class ChatWidget extends StatelessWidget {
|
|||||||
children: [
|
children: [
|
||||||
_TopZappersWidget(events: filteredChat),
|
_TopZappersWidget(events: filteredChat),
|
||||||
Expanded(
|
Expanded(
|
||||||
child: SingleChildScrollView(
|
child: ListView.builder(
|
||||||
reverse: true,
|
reverse: true,
|
||||||
child: Column(
|
shrinkWrap: true,
|
||||||
spacing: 8,
|
primary: true,
|
||||||
crossAxisAlignment: CrossAxisAlignment.start,
|
itemCount: filteredChat.length,
|
||||||
children:
|
itemBuilder:
|
||||||
filteredChat
|
(ctx, idx) => switch (filteredChat[idx].kind) {
|
||||||
.sortedBy((c) => c.createdAt)
|
1311 => Padding(
|
||||||
.map(
|
padding: EdgeInsets.symmetric(
|
||||||
(c) => switch (c.kind) {
|
horizontal: 2,
|
||||||
1311 => ChatMessageWidget(stream: stream, msg: c),
|
vertical: 2,
|
||||||
9735 => _ChatZapWidget(stream: stream, zap: c),
|
),
|
||||||
|
child: _ChatMessageWidget(
|
||||||
|
stream: stream,
|
||||||
|
msg: filteredChat[idx],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
9735 => Padding(
|
||||||
|
padding: EdgeInsets.symmetric(
|
||||||
|
horizontal: 2,
|
||||||
|
vertical: 2,
|
||||||
|
),
|
||||||
|
child: _ChatZapWidget(
|
||||||
|
stream: stream,
|
||||||
|
zap: filteredChat[idx],
|
||||||
|
),
|
||||||
|
),
|
||||||
_ => SizedBox.shrink(),
|
_ => SizedBox.shrink(),
|
||||||
},
|
},
|
||||||
)
|
|
||||||
.toList(),
|
|
||||||
),
|
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
if (stream.info.status == StreamStatus.live)
|
if (stream.info.status == StreamStatus.live)
|
||||||
WriteMessageWidget(stream: stream),
|
_WriteMessageWidget(stream: stream),
|
||||||
if (stream.info.status == StreamStatus.ended)
|
if (stream.info.status == StreamStatus.ended)
|
||||||
Container(
|
Container(
|
||||||
padding: EdgeInsets.all(8),
|
padding: EdgeInsets.all(8),
|
||||||
@ -220,11 +234,11 @@ class _ChatZapWidget extends StatelessWidget {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class ChatMessageWidget extends StatelessWidget {
|
class _ChatMessageWidget extends StatelessWidget {
|
||||||
final StreamEvent stream;
|
final StreamEvent stream;
|
||||||
final Nip01Event msg;
|
final Nip01Event msg;
|
||||||
|
|
||||||
const ChatMessageWidget({super.key, required this.stream, required this.msg});
|
const _ChatMessageWidget({required this.stream, required this.msg});
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
@ -268,16 +282,16 @@ class ChatMessageWidget extends StatelessWidget {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class WriteMessageWidget extends StatefulWidget {
|
class _WriteMessageWidget extends StatefulWidget {
|
||||||
final StreamEvent stream;
|
final StreamEvent stream;
|
||||||
|
|
||||||
const WriteMessageWidget({super.key, required this.stream});
|
const _WriteMessageWidget({required this.stream});
|
||||||
|
|
||||||
@override
|
@override
|
||||||
State<StatefulWidget> createState() => _WriteMessageWidget();
|
State<StatefulWidget> createState() => __WriteMessageWidget();
|
||||||
}
|
}
|
||||||
|
|
||||||
class _WriteMessageWidget extends State<WriteMessageWidget> {
|
class __WriteMessageWidget extends State<_WriteMessageWidget> {
|
||||||
final TextEditingController _controller = TextEditingController();
|
final TextEditingController _controller = TextEditingController();
|
||||||
|
|
||||||
Future<void> _sendMessage() async {
|
Future<void> _sendMessage() async {
|
||||||
|
Reference in New Issue
Block a user