Files
com.example.file_transfer/lib/main.dart
T

101 lines
3.1 KiB
Dart

import 'package:file_transfer/constants.dart';
import 'package:file_transfer/controllers/account_controller.dart';
import 'package:file_transfer/controllers/file_share_controller.dart';
import 'package:file_transfer/controllers/home_controller.dart';
import 'package:file_transfer/pages/file_share_page.dart';
import 'package:file_transfer/pages/home_page.dart';
import 'package:file_transfer/pages/login_page.dart';
import 'package:file_transfer/routes.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:ndk/ndk.dart';
import 'package:ndk/shared/nips/nip01/bip340.dart';
import 'package:ndk_flutter/ndk_flutter.dart';
import 'package:ndk_flutter/l10n/app_localizations.dart' as ndk_flutter;
import 'package:system_theme/system_theme.dart';
import 'package:toastification/toastification.dart';
import 'package:shared_preferences/shared_preferences.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
SystemTheme.fallbackColor = Colors.deepPurpleAccent;
await SystemTheme.accentColor.load();
final ndk = Ndk(
NdkConfig(
eventVerifier: kIsWeb ? WebEventVerifier() : Bip340EventVerifier(),
cache: MemCacheManager(),
),
);
Get.put(ndk);
final ndkFlutter = NdkFlutter(ndk: ndk);
Get.put(ndkFlutter);
await ndkFlutter.restoreAccountsState();
final prefs = await SharedPreferences.getInstance();
if (ndk.accounts.accounts.isEmpty) {
// First time: create anonymous account
final keyPair = Bip340.generatePrivateKey();
ndk.accounts.loginPrivateKey(
pubkey: keyPair.publicKey,
privkey: keyPair.privateKey!,
);
await ndkFlutter.saveAccountsState();
await prefs.setString(anonymousPubkeyKey, keyPair.publicKey);
}
// Initialize AccountController after NDK is set up
Get.put(AccountController());
runApp(const MainApp());
}
class MainApp extends StatelessWidget {
const MainApp({super.key});
@override
Widget build(BuildContext context) {
return ToastificationWrapper(
child: GetMaterialApp(
title: 'File Transfer',
theme: ThemeData.from(
colorScheme: ColorScheme.fromSeed(
seedColor: SystemTheme.accentColor.accent,
brightness: Brightness.light,
),
),
darkTheme: ThemeData.from(
colorScheme: ColorScheme.fromSeed(
seedColor: SystemTheme.accentColor.accent,
brightness: Brightness.dark,
),
),
themeMode: ThemeMode.system,
localizationsDelegates: const [ndk_flutter.AppLocalizations.delegate],
getPages: [
GetPage(
name: AppRoutes.home,
page: () => const HomePage(),
binding: BindingsBuilder(() {
Get.put(HomePageController());
}),
),
GetPage(name: AppRoutes.login, page: () => const LoginPage()),
GetPage(
name: AppRoutes.fileShare,
page: () => const FileSharePage(),
binding: BindingsBuilder(() {
Get.put(FileShareController());
}),
),
],
),
);
}
}