Refactor chat builder
This commit is contained in:
parent
38da5aa154
commit
321cfd040a
3 changed files with 19 additions and 10 deletions
|
|
@ -11,7 +11,7 @@ class ChatProvider extends ChangeNotifier {
|
|||
final Channel channelInfo;
|
||||
|
||||
final channel = WebSocketChannel.connect(Uri.parse('wss://irc-ws.chat.twitch.tv:443'));
|
||||
final messages = <Widget>[];
|
||||
final messages = <String>[];
|
||||
final scrollController = ScrollController();
|
||||
|
||||
final _assetToUrl = <String, String>{};
|
||||
|
|
@ -69,7 +69,7 @@ class ChatProvider extends ChangeNotifier {
|
|||
void handleWebsocketData(Object? data) {
|
||||
for (final message in data.toString().split('\r\n')) {
|
||||
if (message.startsWith('@')) {
|
||||
parseIrcMessage(message);
|
||||
messages.add(message);
|
||||
continue;
|
||||
}
|
||||
if (message.startsWith('P')) {
|
||||
|
|
@ -79,7 +79,7 @@ class ChatProvider extends ChangeNotifier {
|
|||
}
|
||||
}
|
||||
|
||||
void parseIrcMessage(String whole) {
|
||||
Widget parseIrcMessage(String whole) {
|
||||
var mappedTags = <String, String>{};
|
||||
|
||||
final tagAndIrcMessageDivider = whole.indexOf(' ');
|
||||
|
|
@ -109,16 +109,24 @@ class ChatProvider extends ChangeNotifier {
|
|||
break;
|
||||
case 'PRIVMSG':
|
||||
final message = splitMessage.sublist(3).join(' ').substring(1);
|
||||
messages.add(const SizedBox(height: 10));
|
||||
messages.add(ChatMessage(
|
||||
children: privateMessage(tags: mappedTags, chatMessage: message),
|
||||
));
|
||||
|
||||
if (autoScroll) {
|
||||
SchedulerBinding.instance?.addPostFrameCallback((_) {
|
||||
scrollController.jumpTo(scrollController.position.maxScrollExtent);
|
||||
});
|
||||
}
|
||||
break;
|
||||
return Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
const SizedBox(
|
||||
height: 10,
|
||||
),
|
||||
ChatMessage(
|
||||
children: privateMessage(tags: mappedTags, chatMessage: message),
|
||||
),
|
||||
],
|
||||
);
|
||||
|
||||
case 'ROOMSTATE':
|
||||
break;
|
||||
case 'USERNOTICE':
|
||||
|
|
@ -126,6 +134,7 @@ class ChatProvider extends ChangeNotifier {
|
|||
case 'USERSTATE':
|
||||
break;
|
||||
}
|
||||
return const SizedBox();
|
||||
}
|
||||
|
||||
List<InlineSpan> privateMessage({required Map<String, String> tags, required String chatMessage}) {
|
||||
|
|
|
|||
|
|
@ -32,7 +32,7 @@ class Chat extends StatelessWidget {
|
|||
controller: viewModel.scrollController,
|
||||
padding: const EdgeInsets.all(5.0),
|
||||
itemBuilder: (context, index) {
|
||||
return viewModel.messages[index];
|
||||
return viewModel.parseIrcMessage(viewModel.messages[index]);
|
||||
},
|
||||
),
|
||||
Consumer<ChatProvider>(
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@ class Video extends StatelessWidget {
|
|||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return WebView(
|
||||
initialUrl: 'https://player.twitch.tv/?channel=$channelName&muted=false&parent=localhost.com',
|
||||
initialUrl: 'https://player.twitch.tv/?channel=$channelName&muted=false&parent=frosty',
|
||||
javascriptMode: JavascriptMode.unrestricted,
|
||||
allowsInlineMediaPlayback: true,
|
||||
initialMediaPlaybackPolicy: AutoMediaPlaybackPolicy.always_allow,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue