This commit is contained in:
bbranduhn 2026-06-09 19:07:53 -07:00 • committed by GitHub
commit ece1fba8a3
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
7 changed files with 76 additions and 34 deletions

View file

@ -271,44 +271,44 @@ EXTERNAL SOURCES:
:path: ".symlinks/plugins/webview_flutter_wkwebview/darwin"
SPEC CHECKSUMS:
advanced_in_app_review: fe8fd50b8670cb3dbe67e4c26ca643f7aea8dbb8
app_links: 6d01271b3907b0ee7325c5297c75d697c4226c4d
device_info_plus: bf2e3232933866d73fe290f2942f2156cdd10342
Firebase: 065f2bb395062046623036d8e6dc857bc2521d56
firebase_analytics: b5c909bdc321fab0f9ddf8712f5cef79057e09fa
firebase_core: 8f0a8c3aca22e29012e419ee18109b4aa021f777
firebase_crashlytics: 4b21fc111f15e814eeab83f90a71efe3c1e9399a
firebase_performance: 0a30e8afaae656fdf6fa271ac3c62dc26b74d7a1
FirebaseABTesting: a399ffe546392a39b19a5c2fb28bd8ea178a6f47
FirebaseAnalytics: cd7d01d352f3c237c9a0e31552c257cd0b0c0352
FirebaseCore: 428912f751178b06bef0a1793effeb4a5e09a9b8
FirebaseCoreExtension: e911052d59cd0da237a45d706fc0f81654f035c1
FirebaseCoreInternal: b321eafae5362113bc182956fafc9922cfc77b72
FirebaseCrashlytics: 43913d587ef07beaf5db703baa61eacf9554658c
FirebaseInstallations: 7b64ffd006032b2b019a59b803858df5112d9eaa
FirebasePerformance: 94f614453614d8bb2a1a0177f3a1a6d2dbf4c504
FirebaseRemoteConfig: a2f6545e41551ffb520241d38b5d3d6776c9ebe8
FirebaseRemoteConfigInterop: 765ee19cd2bfa8e54937c8dae901eb634ad6787d
FirebaseSessions: a2d06fd980431fda934c7a543901aca05fc4edcc
FirebaseSharedSwift: 9d2fa84a46676302b89dbd5e6e62bce2fe376909
advanced_in_app_review: daebe4c801525b756fe589de60fd327cb12f965c
app_links: a754cbec3c255bd4bbb4d236ecc06f28cd9a7ce8
device_info_plus: 21fcca2080fbcd348be798aa36c3e5ed849eefbe
Firebase: 9a58fdbc9d8655ed7b79a19cf9690bb007d3d46d
firebase_analytics: b5a19eaf3e4bf4187b0815ef4850b8916e2bc549
firebase_core: ee30637e6744af8e0c12a6a1e8a9718506ec2398
firebase_crashlytics: 28b8f39df8104131376393e6af658b8b77dd120f
firebase_performance: 685196d0889b76a7cad9b7ea75270b9587212ee7
FirebaseABTesting: 31266c7845f9adde0f2e8a59267e9c82e4050898
FirebaseAnalytics: f20bbad8cb7f65d8a5eaefeb424ae8800a31bdfc
FirebaseCore: 0dbad74bda10b8fb9ca34ad8f375fb9dd3ebef7c
FirebaseCoreExtension: 6605938d51f765d8b18bfcafd2085276a252bee2
FirebaseCoreInternal: fe5fa466aeb314787093a7dce9f0beeaad5a2a21
FirebaseCrashlytics: fb31c6907e5b52aa252668394d3f1ab326df1511
FirebaseInstallations: 6a14ab3d694ebd9f839c48d330da5547e9ca9dc0
FirebasePerformance: c5e1275c4eca020e7ba0633b1160e24c79bd1d09
FirebaseRemoteConfig: e9e3909162a05bc0e796326255fd43250783a2a9
FirebaseRemoteConfigInterop: 869ddca16614f979e5c931ece11fbb0b8729ed41
FirebaseSessions: d614ca154c63dbbc6c10d6c38259c2162c4e7c9b
FirebaseSharedSwift: f57ed48f4542b2d7eb4738f4f23ba443f78b3780
Flutter: cabc95a1d2626b1b06e7179b784ebcf0c0cde467
flutter_native_splash: df59bb2e1421aa0282cb2e95618af4dcb0c56c29
flutter_secure_storage: d33dac7ae2ea08509be337e775f6b59f1ff45f12
flutter_native_splash: c32d145d68aeda5502d5f543ee38c192065986cf
flutter_secure_storage: 1ed9476fba7e7a782b22888f956cce43e2c62f13
GoogleAdsOnDeviceConversion: d68c69dd9581a0f5da02617b6f377e5be483970f
GoogleAppMeasurement: fce7c1c90640d2f9f5c56771f71deacb2ba3f98c
GoogleDataTransport: aae35b7ea0c09004c3797d53c8c41f66f219d6a7
GoogleUtilities: 00c88b9a86066ef77f0da2fab05f65d7768ed8e1
in_app_review: 436034b18594851a7328d7f1c2ed5ec235b79cfc
in_app_review: 7dd1ea365263f834b8464673f9df72c80c17c937
nanopb: fad817b59e0457d11a5dfbde799381cd727c1275
native_device_orientation: 42487b19c552fb5a6a2b51e61b93366f628113df
package_info_plus: c0502532a26c7662a62a356cebe2692ec5fe4ec4
native_device_orientation: f3ba5f2ddbab3deee23a5f6693b4f97b02dafea2
package_info_plus: af8e2ca6888548050f16fa2f1938db7b5a5df499
PromisesObjC: f5707f49cb48b9636751c5b2e7d227e43fba9f47
PromisesSwift: 9d77319bbe72ebf6d872900551f7eeba9bce2851
shared_preferences_foundation: 5086985c1d43c5ba4d5e69a4e8083a389e2909e6
sqflite_darwin: 5a7236e3b501866c1c9befc6771dfd73ffb8702d
url_launcher_ios: bb13df5870e8c4234ca12609d04010a21be43dfa
wakelock_plus: 76957ab028e12bfa4e66813c99e46637f367fc7e
webview_flutter_wkwebview: 29eb20d43355b48fe7d07113835b9128f84e3af4
shared_preferences_foundation: 7036424c3d8ec98dfe75ff1667cb0cd531ec82bb
sqflite_darwin: 20b2a3a3b70e43edae938624ce550a3cbf66a3d0
url_launcher_ios: 7a95fa5b60cc718a708b8f2966718e93db0cef1b
wakelock_plus: e29112ab3ef0b318e58cfa5c32326458be66b556
webview_flutter_wkwebview: 8ebf4fded22593026f7dbff1fbff31ea98573c8d
PODFILE CHECKSUM: 57c8aed26fba39d3ec9424816221f294a07c58eb

View file

@ -182,6 +182,19 @@ abstract class ChatStoreBase with Store {
revealedMessageIds.add(id);
}
final highlightedUsers = ObservableSet<String>();
@action
void toggleHighlight(String username) {
if (highlightedUsers.contains(username)) {
highlightedUsers.remove(username);
} else {
highlightedUsers.add(username);
}
}
bool isHighlighted(String username) => highlightedUsers.contains(username);
/// Timer used for dismissing the notification.
Timer? _notificationTimer;

View file

@ -312,6 +312,9 @@ class ChatMessage extends StatelessWidget {
}
// If user is being mentioned in the message, highlight it red.
if (ircMessage.mention == true) highlightColor = context.colorScheme.error;
if (chatStore.highlightedUsers.contains(ircMessage.user)) highlightColor = context.colorScheme.primary;
if (ircMessage.mention == true) {
highlightColor = context.colorScheme.error;
}

View file

@ -77,6 +77,8 @@ class _ChatUserModalState extends State<ChatUserModal> {
name: name,
userLogin: widget.username,
userId: widget.userId,
isHighlighted: widget.chatStore.highlightedUsers.contains(widget.username),
onHighlightToggle: () => widget.chatStore.toggleHighlight(widget.username),
),
),
icon: Icon(Icons.adaptive.more_rounded),

View file

@ -57,7 +57,7 @@ abstract class AuthBase with Store {
@computed
Map<String, String> get headersTwitch => {
'Authorization': 'Bearer $_token',
'Client-Id': clientId,
'Client-ID': clientId,
};
/// Error flag that will be non-null and contain an error message if login failed.

View file

View file

@ -13,6 +13,9 @@ class UserActionsModal extends StatelessWidget {
final String userId;
final bool showPinOption;
final bool? isPinned;
// ← ADD THESE TWO
final bool isHighlighted;
final VoidCallback? onHighlightToggle;
const UserActionsModal({
super.key,
@ -22,6 +25,9 @@ class UserActionsModal extends StatelessWidget {
required this.userId,
this.showPinOption = false,
this.isPinned,
// ← ADD THESE TWO
this.isHighlighted = false,
this.onHighlightToggle,
});
@override
@ -50,6 +56,26 @@ class UserActionsModal extends StatelessWidget {
Navigator.pop(context);
},
),
// ← ADD THIS BLOCK
if (onHighlightToggle != null)
ListTile(
leading: Icon(
isHighlighted ? Icons.highlight_off : Icons.highlight,
color: isHighlighted
? Theme.of(context).colorScheme.error
: Theme.of(context).colorScheme.primary,
),
title: Text(
isHighlighted ? 'Remove highlight for $name' : 'Highlight $name',
),
onTap: () {
onHighlightToggle!();
Navigator.pop(context);
},
),
// ← END ADD
if (authStore.isLoggedIn)
ListTile(
leading: const Icon(Icons.block_rounded),
@ -99,7 +125,6 @@ class UserActionsModal extends StatelessWidget {
),
body: Stack(
children: [
// WebView content
Positioned.fill(
child: Padding(
padding: EdgeInsets.only(
@ -127,7 +152,6 @@ class UserActionsModal extends StatelessWidget {
),
),
),
// Blurred app bar overlay
Positioned(
top: 0,
left: 0,
@ -153,4 +177,4 @@ class UserActionsModal extends StatelessWidget {
],
);
}
}
}