Start Debugging

Блог

Страница 5 из 91

Как пометить ответ действия контроллера как допускающий null во встроенном документе OpenAPI в ASP.NET Core

Microsoft.AspNetCore.OpenApi помечает ответ как допускающий null, только когда действие возвращает голый T? (а в .NET 10 не помечает даже Task<T?>). ActionResult<T?> и IActionResult теряют аннотацию и в .NET 10, и в .NET 11 RC2. Здесь разобрано, почему так происходит, показан проверенный трансформер операций, который это исправляет, и ловушка с 204 No Content, из-за которой спецификация лжёт, пока вы не измените форматтер MVC.
2026-10-19 flutterdarttheming

Как определить собственные дизайн-токены через ThemeExtension и анимировать их при переключении между светлой и тёмной темой во Flutter

Унаследуйте класс от ThemeExtension, зарегистрируйте по одному экземпляру в каждом ThemeData через список extensions, читайте его через Theme.of(context).extension<T>() и напишите настоящий lerp, чтобы AnimatedTheme в MaterialApp интерполировал ваши токены при переключении светлой и тёмной темы. Разобраны цвета, радиусы, тени, текстовые стили и булевы значения, падение при отсутствующем расширении, ловушка copyWith, которая отбрасывает все остальные расширения, и причина, по которой нужны == и hashCode. Всё проверено виджет-тестами на Flutter 3.44.8.

Как заставить AnimatedSwitcher анимировать смену, если тип дочернего виджета не меняется во Flutter

AnimatedSwitcher запускает переход только тогда, когда Widget.canUpdate считает новый дочерний виджет другим, поэтому Text на Text без ключа просто обновляется на месте. Здесь описано исправление в одну строку, где именно должен стоять ключ, почему UniqueKey - ловушка, ошибка направления сдвига из-за статического transitionBuilder и скачок раскладки из-за Stack по умолчанию. Всё проверено виджет-тестами на Flutter 3.44.8.
2026-10-19 flutterdartandroid

Как восстановить состояние UI после остановки процесса Android во Flutter с помощью RestorationMixin

Android завершает фоновые приложения Flutter, чтобы освободить память, и когда пользователь возвращается, каждый StatefulWidget начинает с нуля. Здесь показано, как включить восстановление через restorationScopeId, RestorationMixin и свойства Restorable, восстановить текстовые поля, позиции прокрутки и открытые маршруты, написать собственный RestorableValue и протестировать всё это с помощью restartAndRestore и adb. Проверено на Flutter 3.44.8 и эмуляторе Android 16.

OpenTelemetry .NET 1.20: ConfigureSampler позволяет библиотекам оборачивать сэмплер приложения

В OpenTelemetry .NET 1.20.0, вышедшем 15 октября 2026 года, появился метод TracerProviderBuilder.ConfigureSampler. Теперь библиотека может обернуть сэмплер, который SDK определил из SetSampler, OTEL_TRACES_SAMPLER или значения по умолчанию, вместо того чтобы молча его перезаписывать.

Как перехватывать необработанные асинхронные ошибки во Flutter с помощью runZonedGuarded и PlatformDispatcher.instance.onError

FlutterError.onError видит только ошибки, возникшие внутри колбэков фреймворка. Future без await, таймеры, потоки и код после await попадают в другое место. Здесь показано, какой обработчик какую ошибку ловит (замеры на Flutter 3.44.8), и настройка main(), которая перехватывает их все, в том числе в вебе.

Как форматировать числа с индийской группировкой разрядов lakh/crore в .NET (NumberGroupSizes)

Используйте культуру en-IN или задайте NumberFormatInfo.NumberGroupSizes равным [3, 2], чтобы в C# выводить 12,34,56,789 вместо 123,456,789. Замеры на .NET 10 и .NET 11 RC1: как работает массив, почему CurrencyGroupSizes задаётся отдельно, ловушка invariant globalization, которая молча выводит западную группировку, и вспомогательный метод для слов lakh/crore.
2026-10-18 dartflutterstreams

Как повторять последнее значение для поздних подписчиков потока Dart без BehaviorSubject из rxdart

Broadcast StreamController теряет все события, произошедшие до подписки. Вот замена BehaviorSubject без зависимостей на основе Stream.multi, расширение replayLatest() для уже существующих потоков, ускоренный вариант на async*, который молча теряет события, и нюанс с initialData у StreamBuilder. Всё проверено на Dart 3.12.2.

В Refit 16.4 появился HttpRetryHandler, и он читает заголовки ограничения частоты запросов GitHub, Azure и AWS

Refit 16.4.0 добавляет включаемый по желанию HttpRetryHandler, который повторяет идемпотентные запросы, учитывает Retry-After и специфичные для провайдеров заголовки вроде x-ratelimit-reset и x-ms-retry-after-ms и не требует ни Polly, ни пакета resilience.

Как удалить или скрыть отдельные endpoint, которые MapIdentityApi добавляет в ASP.NET Core

MapIdentityApi<TUser>() добавляет десять endpoint и не позволяет пропустить ни один из них. Вот четыре проверенных способа справиться с этим на .NET 11: скрыть endpoint из OpenAPI, заставить его возвращать 404, перекрыть его или полностью убрать из маршрутизации, плюс ловушка /confirmEmail, из-за которой регистрация превращается в 500.