2025-11-10 23:55:41 +00:00
|
|
|
|
import 'dart:developer';
|
|
|
|
|
|
|
|
|
|
|
|
import 'package:flutter/material.dart';
|
|
|
|
|
|
import 'package:flutter_screenutil/flutter_screenutil.dart';
|
2025-11-27 21:06:26 +00:00
|
|
|
|
import 'package:telegram_web_app/telegram_web_app.dart';
|
2025-11-10 23:55:41 +00:00
|
|
|
|
|
|
|
|
|
|
import 'app.dart';
|
|
|
|
|
|
import 'di/app_scope/app_scope_holder.dart';
|
|
|
|
|
|
|
|
|
|
|
|
/// Global scaffold messenger key for showing snackbars from anywhere
|
|
|
|
|
|
final scaffoldMessengerKey = GlobalKey<ScaffoldMessengerState>();
|
|
|
|
|
|
|
|
|
|
|
|
void main() async {
|
|
|
|
|
|
WidgetsFlutterBinding.ensureInitialized();
|
|
|
|
|
|
|
2025-11-27 21:06:26 +00:00
|
|
|
|
// Telegram Web App integration
|
|
|
|
|
|
if (TelegramWebApp.instance.isSupported) {
|
|
|
|
|
|
TelegramWebApp.instance.ready();
|
|
|
|
|
|
await Future<void>.delayed(const Duration(seconds: 1));
|
|
|
|
|
|
TelegramWebApp.instance.disableVerticalSwipes();
|
|
|
|
|
|
}
|
2025-11-10 23:55:41 +00:00
|
|
|
|
|
|
|
|
|
|
// Настройка логирования ошибок
|
|
|
|
|
|
FlutterError.onError = (details) {
|
|
|
|
|
|
log(
|
|
|
|
|
|
'Flutter error',
|
|
|
|
|
|
error: details.exception,
|
|
|
|
|
|
stackTrace: details.stack,
|
|
|
|
|
|
name: 'main',
|
|
|
|
|
|
);
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
// Создание AppScope (с асинхронной инициализацией внутри)
|
|
|
|
|
|
final appScopeHolder = AppScopeHolder();
|
|
|
|
|
|
appScopeHolder.create();
|
|
|
|
|
|
|
|
|
|
|
|
log('App initialized successfully', name: 'main');
|
|
|
|
|
|
|
|
|
|
|
|
runApp(
|
|
|
|
|
|
ScreenUtilInit(
|
|
|
|
|
|
designSize: const Size(370, 800),
|
|
|
|
|
|
minTextAdapt: true,
|
|
|
|
|
|
splitScreenMode: true,
|
|
|
|
|
|
builder: (context, child) {
|
|
|
|
|
|
return App(appScopeHolder: appScopeHolder);
|
|
|
|
|
|
},
|
|
|
|
|
|
),
|
|
|
|
|
|
);
|
|
|
|
|
|
}
|
|
|
|
|
|
|