first commit

This commit is contained in:
2025-03-03 20:59:42 +03:00
commit 273e68557a
1099 changed files with 17880 additions and 0 deletions

View File

@@ -0,0 +1,84 @@
// Dart imports:
import 'dart:async';
// Flutter imports:
import 'package:flutter/widgets.dart';
///
/// Миксин для виджетов которые имеют подписки
///
/// Автоматически отписывается в методе [dispose]
///
mixin Subscriptionable<T extends StatefulWidget> on State<T> {
/// Массив подписок
final List<StreamSubscription<dynamic>> subs =
<StreamSubscription<dynamic>>[];
///
/// Метод получения списка подписок
///
List<StreamSubscription<dynamic>> get subscribe {
return <StreamSubscription<dynamic>>[];
}
///
/// Обновление состояния экрана если он [mounted]
///
@protected
void setState_(VoidCallback? callback) {
callback?.call();
if (mounted) {
// ignore: no-empty-block
setState(() {});
}
}
@override
void initState() {
subs.addAll(subscribe);
super.initState();
}
@override
void dispose() {
for (StreamSubscription<dynamic> sub in subs) {
sub.cancel();
}
super.dispose();
}
}
///
/// Миксин для подписки любых классов
///
mixin WithSubscription on Object {
/// Массив подписок
final List<StreamSubscription<dynamic>> subs =
<StreamSubscription<dynamic>>[];
///
/// Метод получения списка подписок
///
List<StreamSubscription<dynamic>> get subscribe {
return <StreamSubscription<dynamic>>[];
}
///
/// Добавить все подписки из subscribe
///
void subscribeAll() {
subs.addAll(subscribe);
}
///
/// Отписаться от всех подписок
///
void unsubscribe() {
for (StreamSubscription<dynamic> sub in subs) {
sub.cancel();
}
}
}