Update all images to be cached, fix #2

This commit is contained in:
Tommy Chow 2021-09-09 22:30:29 -04:00
parent 7ded394c8b
commit 359766487b
3 changed files with 21 additions and 15 deletions

View file

@ -1,8 +1,9 @@
import 'package:flutter/foundation.dart';
import 'package:cached_network_image/cached_network_image.dart';
import 'package:flutter/widgets.dart';
import 'package:frosty/models/channel.dart';
import 'package:frosty/providers/authentication_provider.dart';
import 'package:frosty/utility/request.dart';
import 'package:frosty/widgets/chat_message.dart';
import 'package:web_socket_channel/web_socket_channel.dart';
class ChatProvider extends ChangeNotifier {
@ -64,7 +65,7 @@ class ChatProvider extends ChangeNotifier {
}
}
List<InlineSpan> parseIrcMessage(String whole) {
void parseIrcMessage(String whole) {
var mappedTags = <String, String>{};
final tagAndIrcMessageDivider = whole.indexOf(' ');
@ -94,7 +95,11 @@ class ChatProvider extends ChangeNotifier {
break;
case 'PRIVMSG':
final message = splitMessage.sublist(3).join(' ').substring(1);
return privateMessage(tags: mappedTags, chatMessage: message);
messages.add(const SizedBox(height: 10));
messages.add(ChatMessage(
children: privateMessage(tags: mappedTags, chatMessage: message),
));
break;
case 'ROOMSTATE':
break;
case 'USERNOTICE':
@ -102,10 +107,10 @@ class ChatProvider extends ChangeNotifier {
case 'USERSTATE':
break;
}
return [];
}
List<InlineSpan> privateMessage({required Map<String, String> tags, required String chatMessage}) {
debugPrint(chatMessage);
var result = <InlineSpan>[];
final emoteTags = tags['emotes'];
@ -147,8 +152,10 @@ class ChatProvider extends ChangeNotifier {
result.add(
WidgetSpan(
alignment: PlaceholderAlignment.middle,
child: Image.network(
badgeUrl,
child: CachedNetworkImage(
imageUrl: badgeUrl,
placeholder: (context, url) => const SizedBox(),
fadeInDuration: const Duration(seconds: 0),
height: 20,
),
),
@ -179,8 +186,10 @@ class ChatProvider extends ChangeNotifier {
result.add(
WidgetSpan(
alignment: PlaceholderAlignment.middle,
child: Image.network(
emoteUrl,
child: CachedNetworkImage(
imageUrl: emoteUrl,
placeholder: (context, url) => const SizedBox(),
fadeInDuration: const Duration(seconds: 0),
height: 25,
),
),

View file

@ -5,7 +5,6 @@ import 'package:frosty/providers/chat_provider.dart';
import 'package:frosty/widgets/chat_message.dart';
import 'package:provider/provider.dart';
// TODO: Remove test token dependency.
// TODO: Use padding/margin for badge spacing.
class Chat extends StatelessWidget {
@ -28,10 +27,7 @@ class Chat extends StatelessWidget {
for (final message in snapshot.data.toString().split('\r\n')) {
// print(message);
if (message.startsWith('@')) {
viewModel.messages.add(const SizedBox(height: 10));
viewModel.messages.add(ChatMessage(
children: viewModel.parseIrcMessage(message),
));
viewModel.parseIrcMessage(message);
}
if (viewModel.autoScroll) {
SchedulerBinding.instance?.addPostFrameCallback((_) {

View file

@ -1,3 +1,4 @@
import 'package:cached_network_image/cached_network_image.dart';
import 'package:flutter/material.dart';
import 'package:frosty/models/channel.dart';
import 'package:frosty/providers/chat_provider.dart';
@ -43,8 +44,8 @@ class ChannelCard extends StatelessWidget {
flex: 1,
child: Padding(
padding: const EdgeInsets.only(left: 10.0),
child: Image.network(
channelInfo.thumbnailUrl.replaceFirst('-{width}x{height}', '-1024x576'),
child: CachedNetworkImage(
imageUrl: channelInfo.thumbnailUrl.replaceFirst('-{width}x{height}', '-1024x576'),
),
),
),