diff --git a/packages/talker/lib/src/talker.dart b/packages/talker/lib/src/talker.dart index b461902c..7bc384a7 100644 --- a/packages/talker/lib/src/talker.dart +++ b/packages/talker/lib/src/talker.dart @@ -426,8 +426,11 @@ class Talker { final key = data.key; if (key != null) { data.title = settings.getTitleByKey(key); - pen = settings.getPenByKey(key, fallbackPen: data.pen); - data.pen = pen; + // Only use the key's default color if user didn't provide a custom pen + if (pen == null) { + pen = settings.getPenByKey(key); + data.pen = pen; + } } _observer.onLog(data); diff --git a/packages/talker/test/talker_custom_log_test.dart b/packages/talker/test/talker_custom_log_test.dart index 7073c915..fecfe718 100644 --- a/packages/talker/test/talker_custom_log_test.dart +++ b/packages/talker/test/talker_custom_log_test.dart @@ -90,6 +90,54 @@ void main() { expect(log.stackTrace, null); expect(log.time, isNotNull); }); + + test('custom pen should override default key color', () { + // This test verifies the fix for: + // https://github.com/Frezyx/talker/issues/313 + // When a TalkerLog has both a custom pen and a key that matches + // a default log type (like 'debug'), the custom pen should be used. + final customPen = AnsiPen()..xterm(46); + final message = 'WITH A KEY'; + final talkerLog = TalkerLog( + message, + pen: customPen, + key: TalkerKey.debug, // Uses a key that has a default color + ); + + talker.configure( + settings: TalkerSettings( + useConsoleLogs: false, + ), + ); + talker.logCustom(talkerLog); + final log = talker.history.last; + + expect(log.message, message); + expect(log.key, TalkerKey.debug); + // The custom pen should be preserved, not overridden by the debug key's default color + expect(log.pen, customPen); + }); + + test('default key color is used when no custom pen provided', () { + final message = 'WITHOUT A PEN'; + final talkerLog = TalkerLog( + message, + key: TalkerKey.debug, // Uses a key that has a default color + ); + + talker.configure( + settings: TalkerSettings( + useConsoleLogs: false, + ), + ); + talker.logCustom(talkerLog); + final log = talker.history.last; + + expect(log.message, message); + expect(log.key, TalkerKey.debug); + // When no custom pen is provided, should use the default color for debug key + expect(log.pen, isNotNull); + }); }); }); }