Start Debugging

Notas diárias sobre .NET, C#, EF Core, MAUI, Blazor e Flutter, para desenvolvedores que colocam software no ar.

2026-10-23 migrationflutterdart
Migre um app Flutter de Color.withOpacity para Color.withValues (Flutter 3.27+)
Substitua os membros obsoletos Color.withOpacity, opacity, value, red, green, blue e alpha por withValues, .a/.r/.g/.b e toARGB32. O que o dart fix reescreve para você, os quatro getters que ele deixa para trás, por que asserções de cor exata e buscas em Map<Color, T> quebram após a troca, e como withOpacity descarta silenciosamente o Display P3. Medido no Flutter 3.44.8 com Dart 3.12.2.
2026-10-23 migrationflutterdart
Migre um app Flutter de WidgetsBindingObserver.didChangeAppLifecycleState para AppLifecycleListener (Flutter 3.13+)
Substitua o código de ciclo de vida feito à mão com WidgetsBindingObserver por AppLifecycleListener: o mapeamento dos callbacks, a máquina de estados que ele impõe, o novo estado hidden que quebra switches exaustivos, as solicitações de saída no desktop e o teste que de repente falha numa assertion. Testado no Flutter 3.44.8 com Dart 3.12.2.
2026-10-22 comparisoncsharpdotnet
Lazy<T> vs LazyInitializer.EnsureInitialized vs double-checked locking em C#
Use Lazy<T> por padrão: ele executa a factory uma única vez, armazena exceções em cache e suas leituras são baratas demais para medir após a inicialização. Use LazyInitializer.EnsureInitialized quando você preenche de forma preguiçosa muitos campos ou posições de um array e não pode pagar um objeto extra por valor. Double-checked locking escrito à mão quase nunca compensa no .NET 10.
Página 1 de 89