diff --git a/lib/pages/stream.dart b/lib/pages/stream.dart index 2bd09ae..0fc0d17 100644 --- a/lib/pages/stream.dart +++ b/lib/pages/stream.dart @@ -13,6 +13,7 @@ import 'package:zap_stream_flutter/widgets/button.dart'; import 'package:zap_stream_flutter/widgets/chat.dart'; import 'package:zap_stream_flutter/widgets/pill.dart'; import 'package:zap_stream_flutter/widgets/profile.dart'; +import 'package:zap_stream_flutter/widgets/stream_info.dart'; import 'package:zap_stream_flutter/widgets/zap.dart'; class StreamPage extends StatefulWidget { @@ -160,6 +161,16 @@ class _StreamPage extends State { ), ), ), + GestureDetector( + onTap: () { + showModalBottomSheet( + context: context, + constraints: BoxConstraints.expand(), + builder: (context) => StreamInfoWidget(stream: stream), + ); + }, + child: Icon(Icons.info), + ), ], ), ], diff --git a/lib/widgets/stream_info.dart b/lib/widgets/stream_info.dart new file mode 100644 index 0000000..76a2b64 --- /dev/null +++ b/lib/widgets/stream_info.dart @@ -0,0 +1,45 @@ +import 'package:flutter/material.dart'; +import 'package:intl/intl.dart'; +import 'package:zap_stream_flutter/theme.dart'; +import 'package:zap_stream_flutter/utils.dart'; +import 'package:zap_stream_flutter/widgets/profile.dart'; + +class StreamInfoWidget extends StatelessWidget { + final StreamEvent stream; + + const StreamInfoWidget({super.key, required this.stream}); + + @override + Widget build(BuildContext context) { + final startedDate = + stream.info.starts != null + ? DateTime.fromMillisecondsSinceEpoch(stream.info.starts! * 1000) + : null; + return Padding( + padding: EdgeInsets.all(10), + child: Column( + spacing: 8, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + ProfileWidget.pubkey(stream.info.host), + Text( + stream.info.title ?? "", + style: TextStyle(fontSize: 20, fontWeight: FontWeight.bold), + ), + if (startedDate != null) + RichText( + text: TextSpan( + style: TextStyle(color: LAYER_5, fontSize: 14), + children: [ + TextSpan(text: "Started "), + TextSpan(text: DateFormat().format(startedDate)), + ], + ), + ), + if (stream.info.summary?.isNotEmpty ?? false) + Text(stream.info.summary!), + ], + ), + ); + } +}