Skip to content

Instantly share code, notes, and snippets.

View AndreyKedo's full-sized avatar
🇷🇺

Dashkevich Andrey Maksimovich AndreyKedo

🇷🇺
View GitHub Profile
@AndreyKedo
AndreyKedo / main.dart
Created October 15, 2025 05:33 — forked from PlugFox/main.dart
Dots Loading Indicator
/*
* Dots Loading Indicator
* https://gist.github.com/PlugFox/e486dcaf99d958973a1f1b1cddea789b
* https://dartpad.dev?id=e486dcaf99d958973a1f1b1cddea789b
* Mike Matiunin <[email protected]>, 14 October 2025
*/
// ignore_for_file: curly_braces_in_flow_control_structures
import 'dart:typed_data';
@AndreyKedo
AndreyKedo / NetworkHelper.swift
Created October 9, 2025 14:50
Реализация PlatformChannel для получения SSID WiFi.
import SystemConfiguration.CaptiveNetwork
struct NetworkHelper {
/// Возвращает значение не равное nil только в случае если есть разрешение на доступ к геолокации.
static func getWifiNameIfExists() -> String? {
var ssid: String?
if let interfaces = CNCopySupportedInterfaces() as? [String] {
for interface in interfaces {
if let networkInfo = CNCopyCurrentNetworkInfo(interface as CFString) as? [String: Any] {
ssid = networkInfo[kCNNetworkInfoKeySSID as String] as? String
@AndreyKedo
AndreyKedo / BonjureService.swift
Created October 7, 2025 16:00
Реализация обнаружения mDNS сервиса.
//
// BonjureService.swift
// Playground
//
// Created by Андрей Дашкевич on 29.09.2025.
//
import Foundation
import Network
@AndreyKedo
AndreyKedo / NetworkHelper.swift
Last active October 9, 2025 14:52
Помощник позволяющий получить список интерфейсов, преобразовать байты в строку и наоборот, проверить принадлежность ip адреса к подсети.
//
// NetworkHelper.swift
// Playground
//
// Created by Андрей Дашкевич on 07.10.2025.
//
import Foundation
import Network
import SystemConfiguration.CaptiveNetwork
@AndreyKedo
AndreyKedo / app_http_client.dart
Created October 6, 2025 15:52
Лёгкая обёртка для REST API в стиле Retrofit.
import 'package:http_middleware_client/http_middleware_client.dart';
class AppHttpClient extends HttpMiddlewareClient {
AppHttpClient({super.client, super.middlewares});
}
@AndreyKedo
AndreyKedo / local_entry_example.dart
Created September 29, 2025 08:48
Пример использования LocalHistoryEntry, взято из https://api.flutter.dev/flutter/widgets/LocalHistoryRoute/addLocalHistoryEntry.html
import 'package:flutter/material.dart';
void main(){
runApp(App());
}
class App extends StatelessWidget {
const App({super.key});
@override
@AndreyKedo
AndreyKedo / app_navigator.dart
Last active November 3, 2025 06:02
Базовая реализация декларативного навигатора для простых случаев без поддержки deep links. Реализация основана на философии, согласно которой стек навигации является атомарным состоянием приложения, подлежащим манипуляции. Предусмотрен механизм промежуточной обработки (guards) состояния стека отображаемых экранов.
import 'dart:collection';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
typedef AppNavigationState = List<AppPage>;
typedef AppNavigatorBackCallback = ({AppNavigationState state, bool handled}) Function(AppNavigationState state);
typedef AppNavigatorGuardCallback = AppNavigationState Function(BuildContext context, AppNavigationState state);
@AndreyKedo
AndreyKedo / app_logger.dart
Created September 29, 2025 06:42
An abstraction based on a extension type around the logging package.
import 'dart:collection';
import 'dart:developer' as dev;
import 'dart:async';
import 'package:flutter/foundation.dart';
import 'package:logging/logging.dart';
extension type AppLogger._(Logger _logger) {
factory AppLogger.named(String name) => AppLogger._(Logger(name));
@AndreyKedo
AndreyKedo / Huffman.swift
Created September 28, 2025 10:33
Huffman swift implementation
import Foundation
// Пример:
// Входная строка 'aabbbc'
// Коды:
// a (ASCII 97) -> 01
// b (ASCII 98) -> 1
// c (ASCII 99) -> 00
// Результат: 01 01 1 1 1 00
@AndreyKedo
AndreyKedo / device_lifecycle_mixin.dart
Created September 16, 2025 11:41
Примеси которые позволяют реагировать на сворачивание и разворачивание приложения в трэй.
import 'package:flutter/widgets.dart';
/// Слушает жизненный цикл активности и вызывает обратный вызов [onUpdate] каждый раз
/// когда приложение возвращается из фонового состояния.
///
/// Если приложение уходит в задний фон (свернули), а потом на передний (развернули) то вызывается
/// обратный вызов [onUpdate].
mixin DeviceLifecycleStateMixin<Widget extends StatefulWidget> on State<Widget> {
bool _appHided = false;