Refactor chat builder

This commit is contained in:
Tommy Chow 2021-09-15 01:20:18 -04:00
parent 38da5aa154
commit 321cfd040a
3 changed files with 19 additions and 10 deletions

View file

@ -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}) {

View file

@ -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>(

View file

@ -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,