diff --git a/lib/app.dart b/lib/app.dart new file mode 100644 index 0000000..bb8b3dd --- /dev/null +++ b/lib/app.dart @@ -0,0 +1,128 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_localizations/flutter_localizations.dart'; +import 'package:go_router/go_router.dart'; +import 'package:zap_stream_flutter/const.dart'; +import 'package:zap_stream_flutter/i18n/strings.g.dart'; +import 'package:zap_stream_flutter/pages/category.dart'; +import 'package:zap_stream_flutter/pages/hashtag.dart'; +import 'package:zap_stream_flutter/pages/home.dart'; +import 'package:zap_stream_flutter/pages/login.dart'; +import 'package:zap_stream_flutter/pages/login_input.dart'; +import 'package:zap_stream_flutter/pages/new_account.dart'; +import 'package:zap_stream_flutter/pages/profile.dart'; +import 'package:zap_stream_flutter/pages/settings_profile.dart'; +import 'package:zap_stream_flutter/pages/stream.dart'; +import 'package:zap_stream_flutter/theme.dart'; +import 'package:zap_stream_flutter/utils.dart'; +import 'package:zap_stream_flutter/widgets/header.dart'; + +void runZapStream() { + runApp( + MaterialApp.router( + title: "zap.stream", + supportedLocales: AppLocaleUtils.supportedLocales, + localizationsDelegates: GlobalMaterialLocalizations.delegates, + theme: ThemeData.localize( + ThemeData(colorScheme: ColorScheme.dark(), highlightColor: PRIMARY_1), + TextTheme(), + ), + routerConfig: GoRouter( + routes: [ + ShellRoute( + observers: [routeObserver], + builder: + (context, state, child) => SafeArea( + child: Scaffold(body: child, backgroundColor: Colors.black), + ), + routes: [ + GoRoute(path: "/", builder: (ctx, state) => HomePage()), + ShellRoute( + builder: (context, state, child) { + return Container( + margin: EdgeInsets.only(top: 50), + padding: EdgeInsets.symmetric(horizontal: 5), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + spacing: 20, + children: [ + Center( + child: Image.asset("assets/logo.png", height: 150), + ), + child, + ], + ), + ); + }, + routes: [ + GoRoute( + path: "/login", + builder: (ctx, state) => LoginPage(), + routes: [ + GoRoute( + path: "key", + builder: (ctx, state) => LoginInputPage(), + ), + GoRoute( + path: "new", + builder: (context, state) => NewAccountPage(), + ), + ], + ), + ], + ), + GoRoute( + path: StreamPage.path, + builder: (ctx, state) { + if (state.extra is StreamEvent) { + return StreamPage(stream: state.extra as StreamEvent); + } else { + throw UnimplementedError(); + } + }, + ), + GoRoute( + path: "/p/:id", + builder: (ctx, state) { + return ProfilePage(pubkey: state.pathParameters["id"]!); + }, + ), + GoRoute( + path: "/t/:id", + builder: (context, state) { + return HashtagPage(tag: state.pathParameters["id"]!); + }, + ), + GoRoute( + path: "/category/:id", + builder: (context, state) { + return CategoryPage( + category: state.pathParameters["id"]!, + info: state.extra as GameInfo?, + ); + }, + ), + ShellRoute( + observers: [routeObserver], + builder: + (context, state, child) => + Column(children: [HeaderWidget(), child]), + routes: [ + GoRoute( + path: "/settings", + builder: (context, state) => SizedBox(), + routes: [ + GoRoute( + path: "profile", + builder: (context, state) => SettingsProfilePage(), + ), + ], + ), + ], + ), + ], + ), + ], + ), + ), + ); +} diff --git a/lib/const.dart b/lib/const.dart new file mode 100644 index 0000000..535361b --- /dev/null +++ b/lib/const.dart @@ -0,0 +1,73 @@ +import 'package:amberflutter/amberflutter.dart'; +import 'package:flutter/foundation.dart'; +import 'package:flutter/material.dart'; +import 'package:ndk/ndk.dart'; +import 'package:ndk_amber/ndk_amber.dart'; +import 'package:ndk_objectbox/ndk_objectbox.dart'; +import 'package:ndk_rust_verifier/ndk_rust_verifier.dart'; +import 'package:zap_stream_flutter/login.dart'; + +class NoVerify extends EventVerifier { + @override + Future verify(Nip01Event event) { + return Future.value(true); + } +} + +final ndkCache = DbObjectBox(); +final eventVerifier = kDebugMode ? NoVerify() : RustEventVerifier(); +var ndk = Ndk( + NdkConfig( + eventVerifier: eventVerifier, + cache: ndkCache, + bootstrapRelays: defaultRelays, + //engine: NdkEngine.JIT, + ), +); + +const userAgent = "zap.stream/1.0"; +const defaultRelays = [ + "wss://nos.lol", + "wss://relay.damus.io", + "wss://relay.primal.net", + "wss://relay.snort.social", + "wss://relay.fountain.fm", +]; +const searchRelays = ["wss://relay.nostr.band", "wss://search.nos.today"]; + +final loginData = LoginData(); +final RouteObserver> routeObserver = + RouteObserver>(); + +Future initLogin() async { + // reload / cache login data + loginData.addListener(() { + if (loginData.value != null) { + final pubkey = loginData.value!.pubkey; + if (!ndk.accounts.hasAccount(pubkey)) { + switch (loginData.value!.type) { + case AccountType.privateKey: + ndk.accounts.loginPrivateKey( + pubkey: pubkey, + privkey: loginData.value!.privateKey!, + ); + case AccountType.externalSigner: + ndk.accounts.loginExternalSigner( + signer: AmberEventSigner( + publicKey: pubkey, + amberFlutterDS: AmberFlutterDS(Amberflutter()), + ), + ); + case AccountType.publicKey: + ndk.accounts.loginPublicKey(pubkey: pubkey); + } + } + ndk.metadata.loadMetadata(pubkey); + ndk.follows.getContactList(pubkey); + } else { + ndk.accounts.logout(); + } + }); + + await loginData.load(); +} diff --git a/lib/flavours/free/main.dart b/lib/flavours/free/main.dart new file mode 100644 index 0000000..26b6a08 --- /dev/null +++ b/lib/flavours/free/main.dart @@ -0,0 +1,13 @@ +import 'package:flutter/material.dart'; +import 'package:zap_stream_flutter/app.dart'; +import 'package:zap_stream_flutter/const.dart'; +import 'package:zap_stream_flutter/i18n/strings.g.dart'; + +Future main() async { + WidgetsFlutterBinding.ensureInitialized(); + LocaleSettings.useDeviceLocale(); + // FCM DELETE + await initLogin(); + + runZapStream(); +} diff --git a/lib/login.dart b/lib/login.dart index de11a2a..ec1bd68 100644 --- a/lib/login.dart +++ b/lib/login.dart @@ -119,4 +119,4 @@ class LoginData extends ValueNotifier { } } } -} +} \ No newline at end of file diff --git a/lib/main.dart b/lib/main.dart index f7d1dfb..21afeda 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -1,201 +1,14 @@ -import 'package:amberflutter/amberflutter.dart'; -import 'package:flutter/foundation.dart'; +import 'package:firebase_core/firebase_core.dart'; import 'package:flutter/material.dart'; -import 'package:flutter_localizations/flutter_localizations.dart'; -import 'package:go_router/go_router.dart'; -import 'package:ndk/ndk.dart'; -import 'package:ndk_amber/ndk_amber.dart'; -import 'package:ndk_objectbox/ndk_objectbox.dart'; -import 'package:ndk_rust_verifier/ndk_rust_verifier.dart'; +import 'package:zap_stream_flutter/app.dart'; +import 'package:zap_stream_flutter/const.dart'; import 'package:zap_stream_flutter/i18n/strings.g.dart'; -import 'package:zap_stream_flutter/pages/category.dart'; -import 'package:zap_stream_flutter/pages/hashtag.dart'; -import 'package:zap_stream_flutter/pages/login.dart'; -import 'package:zap_stream_flutter/pages/login_input.dart'; -import 'package:zap_stream_flutter/pages/new_account.dart'; -import 'package:zap_stream_flutter/pages/profile.dart'; -import 'package:zap_stream_flutter/pages/settings_profile.dart'; -import 'package:zap_stream_flutter/pages/stream.dart'; -import 'package:zap_stream_flutter/theme.dart'; -import 'package:zap_stream_flutter/utils.dart'; -import 'package:zap_stream_flutter/widgets/header.dart'; - -import 'login.dart'; -import 'pages/home.dart'; - -class NoVerify extends EventVerifier { - @override - Future verify(Nip01Event event) { - return Future.value(true); - } -} - -final ndkCache = DbObjectBox(); -final eventVerifier = kDebugMode ? NoVerify() : RustEventVerifier(); -var ndk = Ndk( - NdkConfig( - eventVerifier: eventVerifier, - cache: ndkCache, - bootstrapRelays: defaultRelays, - //engine: NdkEngine.JIT, - ), -); - -const userAgent = "zap.stream/1.0"; -const defaultRelays = [ - "wss://nos.lol", - "wss://relay.damus.io", - "wss://relay.primal.net", - "wss://relay.snort.social", - "wss://relay.fountain.fm", -]; -const searchRelays = ["wss://relay.nostr.band", "wss://search.nos.today"]; - -final loginData = LoginData(); -final RouteObserver> routeObserver = - RouteObserver>(); Future main() async { WidgetsFlutterBinding.ensureInitialized(); LocaleSettings.useDeviceLocale(); + await Firebase.initializeApp(); + await initLogin(); - // reload / cache login data - loginData.addListener(() { - if (loginData.value != null) { - final pubkey = loginData.value!.pubkey; - if (!ndk.accounts.hasAccount(pubkey)) { - switch (loginData.value!.type) { - case AccountType.privateKey: - ndk.accounts.loginPrivateKey( - pubkey: pubkey, - privkey: loginData.value!.privateKey!, - ); - case AccountType.externalSigner: - ndk.accounts.loginExternalSigner( - signer: AmberEventSigner( - publicKey: pubkey, - amberFlutterDS: AmberFlutterDS(Amberflutter()), - ), - ); - case AccountType.publicKey: - ndk.accounts.loginPublicKey(pubkey: pubkey); - } - } - ndk.metadata.loadMetadata(pubkey); - ndk.follows.getContactList(pubkey); - } else { - ndk.accounts.logout(); - } - }); - - await loginData.load(); - - runApp( - MaterialApp.router( - title: "zap.stream", - supportedLocales: AppLocaleUtils.supportedLocales, - localizationsDelegates: GlobalMaterialLocalizations.delegates, - theme: ThemeData.localize( - ThemeData(colorScheme: ColorScheme.dark(), highlightColor: PRIMARY_1), - TextTheme(), - ), - routerConfig: GoRouter( - routes: [ - ShellRoute( - observers: [routeObserver], - builder: - (context, state, child) => SafeArea( - child: Scaffold(body: child, backgroundColor: Colors.black), - ), - routes: [ - GoRoute(path: "/", builder: (ctx, state) => HomePage()), - ShellRoute( - builder: (context, state, child) { - return Container( - margin: EdgeInsets.only(top: 50), - padding: EdgeInsets.symmetric(horizontal: 5), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - spacing: 20, - children: [ - Center( - child: Image.asset("assets/logo.png", height: 150), - ), - child, - ], - ), - ); - }, - routes: [ - GoRoute( - path: "/login", - builder: (ctx, state) => LoginPage(), - routes: [ - GoRoute( - path: "key", - builder: (ctx, state) => LoginInputPage(), - ), - GoRoute( - path: "new", - builder: (context, state) => NewAccountPage(), - ), - ], - ), - ], - ), - GoRoute( - path: StreamPage.path, - builder: (ctx, state) { - if (state.extra is StreamEvent) { - return StreamPage(stream: state.extra as StreamEvent); - } else { - throw UnimplementedError(); - } - }, - ), - GoRoute( - path: "/p/:id", - builder: (ctx, state) { - return ProfilePage(pubkey: state.pathParameters["id"]!); - }, - ), - GoRoute( - path: "/t/:id", - builder: (context, state) { - return HashtagPage(tag: state.pathParameters["id"]!); - }, - ), - GoRoute( - path: "/category/:id", - builder: (context, state) { - return CategoryPage( - category: state.pathParameters["id"]!, - info: state.extra as GameInfo?, - ); - }, - ), - ShellRoute( - observers: [routeObserver], - builder: - (context, state, child) => - Column(children: [HeaderWidget(), child]), - routes: [ - GoRoute( - path: "/settings", - builder: (context, state) => SizedBox(), - routes: [ - GoRoute( - path: "profile", - builder: (context, state) => SettingsProfilePage(), - ), - ], - ), - ], - ), - ], - ), - ], - ), - ), - ); + runZapStream(); } diff --git a/lib/pages/login.dart b/lib/pages/login.dart index 793a679..f631b24 100644 --- a/lib/pages/login.dart +++ b/lib/pages/login.dart @@ -5,7 +5,7 @@ import 'package:flutter/widgets.dart'; import 'package:go_router/go_router.dart'; import 'package:zap_stream_flutter/i18n/strings.g.dart'; import 'package:zap_stream_flutter/login.dart'; -import 'package:zap_stream_flutter/main.dart'; +import 'package:zap_stream_flutter/const.dart'; import 'package:zap_stream_flutter/theme.dart'; import 'package:zap_stream_flutter/utils.dart'; import 'package:zap_stream_flutter/widgets/button.dart'; diff --git a/lib/pages/login_input.dart b/lib/pages/login_input.dart index f73764d..a31d623 100644 --- a/lib/pages/login_input.dart +++ b/lib/pages/login_input.dart @@ -1,8 +1,8 @@ import 'package:flutter/material.dart'; import 'package:go_router/go_router.dart'; +import 'package:zap_stream_flutter/const.dart'; import 'package:zap_stream_flutter/i18n/strings.g.dart'; import 'package:zap_stream_flutter/login.dart'; -import 'package:zap_stream_flutter/main.dart'; import 'package:zap_stream_flutter/theme.dart'; import 'package:zap_stream_flutter/utils.dart'; import 'package:zap_stream_flutter/widgets/button.dart'; diff --git a/lib/pages/new_account.dart b/lib/pages/new_account.dart index 35a5932..3425431 100644 --- a/lib/pages/new_account.dart +++ b/lib/pages/new_account.dart @@ -5,7 +5,7 @@ import 'package:ndk/shared/nips/nip01/bip340.dart'; import 'package:ndk/shared/nips/nip01/key_pair.dart'; import 'package:zap_stream_flutter/i18n/strings.g.dart'; import 'package:zap_stream_flutter/login.dart'; -import 'package:zap_stream_flutter/main.dart'; +import 'package:zap_stream_flutter/const.dart'; import 'package:zap_stream_flutter/theme.dart'; import 'package:zap_stream_flutter/widgets/avatar_upload.dart'; import 'package:zap_stream_flutter/widgets/button.dart'; diff --git a/lib/pages/profile.dart b/lib/pages/profile.dart index a33d310..0318528 100644 --- a/lib/pages/profile.dart +++ b/lib/pages/profile.dart @@ -3,7 +3,7 @@ import 'package:go_router/go_router.dart'; import 'package:ndk/ndk.dart'; import 'package:zap_stream_flutter/i18n/strings.g.dart'; import 'package:zap_stream_flutter/imgproxy.dart'; -import 'package:zap_stream_flutter/main.dart'; +import 'package:zap_stream_flutter/const.dart'; import 'package:zap_stream_flutter/rx_filter.dart'; import 'package:zap_stream_flutter/theme.dart'; import 'package:zap_stream_flutter/utils.dart'; diff --git a/lib/pages/settings_profile.dart b/lib/pages/settings_profile.dart index 1322dd1..220217f 100644 --- a/lib/pages/settings_profile.dart +++ b/lib/pages/settings_profile.dart @@ -2,7 +2,7 @@ import 'package:flutter/material.dart'; import 'package:go_router/go_router.dart'; import 'package:ndk/ndk.dart'; import 'package:zap_stream_flutter/i18n/strings.g.dart'; -import 'package:zap_stream_flutter/main.dart'; +import 'package:zap_stream_flutter/const.dart'; import 'package:zap_stream_flutter/theme.dart'; import 'package:zap_stream_flutter/widgets/avatar_upload.dart'; import 'package:zap_stream_flutter/widgets/button.dart'; diff --git a/lib/pages/stream.dart b/lib/pages/stream.dart index 06e7087..5ca87ce 100644 --- a/lib/pages/stream.dart +++ b/lib/pages/stream.dart @@ -6,7 +6,7 @@ import 'package:ndk/ndk.dart'; import 'package:wakelock_plus/wakelock_plus.dart'; import 'package:zap_stream_flutter/i18n/strings.g.dart'; import 'package:zap_stream_flutter/imgproxy.dart'; -import 'package:zap_stream_flutter/main.dart'; +import 'package:zap_stream_flutter/const.dart'; import 'package:zap_stream_flutter/rx_filter.dart'; import 'package:zap_stream_flutter/theme.dart'; import 'package:zap_stream_flutter/utils.dart'; diff --git a/lib/rx_filter.dart b/lib/rx_filter.dart index 3174c7e..b597dc7 100644 --- a/lib/rx_filter.dart +++ b/lib/rx_filter.dart @@ -5,7 +5,7 @@ import 'dart:developer' as developer; import 'package:flutter/widgets.dart'; import 'package:ndk/ndk.dart'; import 'package:rxdart/rxdart.dart'; -import 'package:zap_stream_flutter/main.dart'; +import 'package:zap_stream_flutter/const.dart'; /// Reactive filter which builds the widget with a snapshot of the data class RxFilter extends StatefulWidget { diff --git a/lib/widgets/avatar_upload.dart b/lib/widgets/avatar_upload.dart index b1b76fb..b624575 100644 --- a/lib/widgets/avatar_upload.dart +++ b/lib/widgets/avatar_upload.dart @@ -2,7 +2,7 @@ import 'package:cached_network_image/cached_network_image.dart'; import 'package:flutter/material.dart'; import 'package:image_picker/image_picker.dart'; import 'package:zap_stream_flutter/i18n/strings.g.dart'; -import 'package:zap_stream_flutter/main.dart'; +import 'package:zap_stream_flutter/const.dart'; import 'package:zap_stream_flutter/theme.dart'; class AvatarUpload extends StatefulWidget { diff --git a/lib/widgets/button_follow.dart b/lib/widgets/button_follow.dart index 3ccae64..fb514b2 100644 --- a/lib/widgets/button_follow.dart +++ b/lib/widgets/button_follow.dart @@ -1,6 +1,6 @@ import 'package:flutter/material.dart'; import 'package:zap_stream_flutter/i18n/strings.g.dart'; -import 'package:zap_stream_flutter/main.dart'; +import 'package:zap_stream_flutter/const.dart'; import 'package:zap_stream_flutter/theme.dart'; import 'package:zap_stream_flutter/widgets/button.dart'; diff --git a/lib/widgets/category_top_zapped.dart b/lib/widgets/category_top_zapped.dart index 8bec7c2..ea11f09 100644 --- a/lib/widgets/category_top_zapped.dart +++ b/lib/widgets/category_top_zapped.dart @@ -2,7 +2,7 @@ import 'package:collection/collection.dart'; import 'package:flutter/material.dart'; import 'package:ndk/ndk.dart'; import 'package:zap_stream_flutter/i18n/strings.g.dart'; -import 'package:zap_stream_flutter/main.dart'; +import 'package:zap_stream_flutter/const.dart'; import 'package:zap_stream_flutter/rx_filter.dart'; import 'package:zap_stream_flutter/theme.dart'; import 'package:zap_stream_flutter/utils.dart'; diff --git a/lib/widgets/chat.dart b/lib/widgets/chat.dart index 4bf1132..d17ba7a 100644 --- a/lib/widgets/chat.dart +++ b/lib/widgets/chat.dart @@ -2,7 +2,7 @@ import 'package:collection/collection.dart'; import 'package:flutter/material.dart'; import 'package:ndk/ndk.dart'; import 'package:zap_stream_flutter/i18n/strings.g.dart'; -import 'package:zap_stream_flutter/main.dart'; +import 'package:zap_stream_flutter/const.dart'; import 'package:zap_stream_flutter/rx_filter.dart'; import 'package:zap_stream_flutter/theme.dart'; import 'package:zap_stream_flutter/utils.dart'; diff --git a/lib/widgets/chat_badge.dart b/lib/widgets/chat_badge.dart index 7ee6d35..d0ed1cf 100644 --- a/lib/widgets/chat_badge.dart +++ b/lib/widgets/chat_badge.dart @@ -3,7 +3,7 @@ import 'package:flutter/widgets.dart'; import 'package:ndk/entities.dart'; import 'package:zap_stream_flutter/i18n/strings.g.dart'; import 'package:zap_stream_flutter/imgproxy.dart'; -import 'package:zap_stream_flutter/main.dart'; +import 'package:zap_stream_flutter/const.dart'; import 'package:zap_stream_flutter/theme.dart'; import 'package:zap_stream_flutter/utils.dart'; import 'package:zap_stream_flutter/widgets/profile.dart'; diff --git a/lib/widgets/chat_message.dart b/lib/widgets/chat_message.dart index 0ccf415..fdcfd25 100644 --- a/lib/widgets/chat_message.dart +++ b/lib/widgets/chat_message.dart @@ -1,6 +1,6 @@ import 'package:flutter/material.dart'; import 'package:ndk/ndk.dart'; -import 'package:zap_stream_flutter/main.dart'; +import 'package:zap_stream_flutter/const.dart'; import 'package:zap_stream_flutter/rx_filter.dart'; import 'package:zap_stream_flutter/theme.dart'; import 'package:zap_stream_flutter/utils.dart'; diff --git a/lib/widgets/chat_modal.dart b/lib/widgets/chat_modal.dart index 20b12e6..7c855c3 100644 --- a/lib/widgets/chat_modal.dart +++ b/lib/widgets/chat_modal.dart @@ -1,7 +1,7 @@ import 'package:duration/duration.dart'; import 'package:flutter/material.dart'; import 'package:ndk/ndk.dart'; -import 'package:zap_stream_flutter/main.dart'; +import 'package:zap_stream_flutter/const.dart'; import 'package:zap_stream_flutter/theme.dart'; import 'package:zap_stream_flutter/utils.dart'; import 'package:zap_stream_flutter/widgets/button_follow.dart'; diff --git a/lib/widgets/chat_raid.dart b/lib/widgets/chat_raid.dart index 239348f..f384d93 100644 --- a/lib/widgets/chat_raid.dart +++ b/lib/widgets/chat_raid.dart @@ -3,7 +3,7 @@ import 'package:flutter/material.dart'; import 'package:go_router/go_router.dart'; import 'package:ndk/ndk.dart'; import 'package:zap_stream_flutter/i18n/strings.g.dart'; -import 'package:zap_stream_flutter/main.dart'; +import 'package:zap_stream_flutter/const.dart'; import 'package:zap_stream_flutter/theme.dart'; import 'package:zap_stream_flutter/utils.dart'; import 'package:zap_stream_flutter/widgets/countdown.dart'; diff --git a/lib/widgets/chat_timeout.dart b/lib/widgets/chat_timeout.dart index 7eb2e30..c306a33 100644 --- a/lib/widgets/chat_timeout.dart +++ b/lib/widgets/chat_timeout.dart @@ -3,7 +3,7 @@ import 'package:duration/duration.dart'; import 'package:flutter/widgets.dart'; import 'package:ndk/ndk.dart'; import 'package:zap_stream_flutter/i18n/strings.g.dart'; -import 'package:zap_stream_flutter/main.dart'; +import 'package:zap_stream_flutter/const.dart'; import 'package:zap_stream_flutter/theme.dart'; import 'package:zap_stream_flutter/widgets/profile.dart'; diff --git a/lib/widgets/chat_write.dart b/lib/widgets/chat_write.dart index b285f79..7c28e50 100644 --- a/lib/widgets/chat_write.dart +++ b/lib/widgets/chat_write.dart @@ -4,7 +4,7 @@ import 'package:flutter/material.dart'; import 'package:ndk/ndk.dart'; import 'package:ndk/shared/nips/nip19/nip19.dart'; import 'package:zap_stream_flutter/i18n/strings.g.dart'; -import 'package:zap_stream_flutter/main.dart'; +import 'package:zap_stream_flutter/const.dart'; import 'package:zap_stream_flutter/theme.dart'; import 'package:zap_stream_flutter/utils.dart'; import 'package:zap_stream_flutter/widgets/avatar.dart'; diff --git a/lib/widgets/header.dart b/lib/widgets/header.dart index e6c80a5..1c17315 100644 --- a/lib/widgets/header.dart +++ b/lib/widgets/header.dart @@ -3,7 +3,7 @@ import 'package:flutter_svg/svg.dart'; import 'package:go_router/go_router.dart'; import 'package:ndk/shared/nips/nip19/nip19.dart'; import 'package:zap_stream_flutter/i18n/strings.g.dart'; -import 'package:zap_stream_flutter/main.dart'; +import 'package:zap_stream_flutter/const.dart'; import 'package:zap_stream_flutter/theme.dart'; import 'package:zap_stream_flutter/widgets/avatar.dart'; diff --git a/lib/widgets/mute_button.dart b/lib/widgets/mute_button.dart index e8cb7db..f8a3032 100644 --- a/lib/widgets/mute_button.dart +++ b/lib/widgets/mute_button.dart @@ -1,7 +1,7 @@ import 'package:flutter/widgets.dart'; import 'package:ndk/domain_layer/entities/nip_51_list.dart'; import 'package:zap_stream_flutter/i18n/strings.g.dart'; -import 'package:zap_stream_flutter/main.dart'; +import 'package:zap_stream_flutter/const.dart'; import 'package:zap_stream_flutter/theme.dart'; import 'package:zap_stream_flutter/widgets/button.dart'; diff --git a/lib/widgets/profile.dart b/lib/widgets/profile.dart index 612381b..7c3c4af 100644 --- a/lib/widgets/profile.dart +++ b/lib/widgets/profile.dart @@ -2,7 +2,7 @@ import 'package:flutter/widgets.dart'; import 'package:go_router/go_router.dart'; import 'package:ndk/ndk.dart'; import 'package:ndk/shared/nips/nip19/nip19.dart'; -import 'package:zap_stream_flutter/main.dart'; +import 'package:zap_stream_flutter/const.dart'; import 'package:zap_stream_flutter/widgets/avatar.dart'; class ProfileLoaderWidget extends StatelessWidget { diff --git a/lib/widgets/reaction.dart b/lib/widgets/reaction.dart index 04bece6..fce16aa 100644 --- a/lib/widgets/reaction.dart +++ b/lib/widgets/reaction.dart @@ -2,7 +2,7 @@ import 'package:emoji_picker_flutter/emoji_picker_flutter.dart'; import 'package:flutter/foundation.dart' as foundation; import 'package:flutter/widgets.dart'; import 'package:ndk/entities.dart'; -import 'package:zap_stream_flutter/main.dart'; +import 'package:zap_stream_flutter/const.dart'; import 'package:zap_stream_flutter/theme.dart'; final emojiPickerConfig = Config( diff --git a/lib/widgets/stream_grid.dart b/lib/widgets/stream_grid.dart index a0ddf78..f0f1cc8 100644 --- a/lib/widgets/stream_grid.dart +++ b/lib/widgets/stream_grid.dart @@ -2,7 +2,7 @@ import 'package:collection/collection.dart'; import 'package:flutter/widgets.dart'; import 'package:ndk/ndk.dart'; import 'package:zap_stream_flutter/i18n/strings.g.dart'; -import 'package:zap_stream_flutter/main.dart'; +import 'package:zap_stream_flutter/const.dart'; import 'package:zap_stream_flutter/theme.dart'; import 'package:zap_stream_flutter/utils.dart'; import 'package:zap_stream_flutter/widgets/stream_tile.dart'; diff --git a/lib/widgets/stream_info.dart b/lib/widgets/stream_info.dart index 0701923..f3731ef 100644 --- a/lib/widgets/stream_info.dart +++ b/lib/widgets/stream_info.dart @@ -3,7 +3,7 @@ import 'package:go_router/go_router.dart'; import 'package:intl/intl.dart'; import 'package:share_plus/share_plus.dart'; import 'package:zap_stream_flutter/i18n/strings.g.dart'; -import 'package:zap_stream_flutter/main.dart'; +import 'package:zap_stream_flutter/const.dart'; import 'package:zap_stream_flutter/theme.dart'; import 'package:zap_stream_flutter/utils.dart'; import 'package:zap_stream_flutter/widgets/button.dart'; diff --git a/lib/widgets/stream_tile.dart b/lib/widgets/stream_tile.dart index efd3250..12d123f 100644 --- a/lib/widgets/stream_tile.dart +++ b/lib/widgets/stream_tile.dart @@ -1,6 +1,4 @@ -import 'package:cached_network_image/cached_network_image.dart'; import 'package:flutter/material.dart'; -import 'package:flutter_svg/flutter_svg.dart'; import 'package:go_router/go_router.dart'; import 'package:zap_stream_flutter/i18n/strings.g.dart'; import 'package:zap_stream_flutter/imgproxy.dart'; diff --git a/lib/widgets/video_player.dart b/lib/widgets/video_player.dart index 20dd8d7..f040299 100644 --- a/lib/widgets/video_player.dart +++ b/lib/widgets/video_player.dart @@ -2,7 +2,7 @@ import 'package:chewie/chewie.dart'; import 'package:flutter/widgets.dart'; import 'package:video_player/video_player.dart'; import 'package:zap_stream_flutter/imgproxy.dart'; -import 'package:zap_stream_flutter/main.dart'; +import 'package:zap_stream_flutter/const.dart'; class VideoPlayerWidget extends StatefulWidget { final String url; diff --git a/lib/widgets/zap.dart b/lib/widgets/zap.dart index 2cbc023..da64b22 100644 --- a/lib/widgets/zap.dart +++ b/lib/widgets/zap.dart @@ -9,7 +9,7 @@ import 'package:ndk/ndk.dart'; import 'package:qr_flutter/qr_flutter.dart'; import 'package:url_launcher/url_launcher_string.dart'; import 'package:zap_stream_flutter/i18n/strings.g.dart'; -import 'package:zap_stream_flutter/main.dart'; +import 'package:zap_stream_flutter/const.dart'; import 'package:zap_stream_flutter/theme.dart'; import 'package:zap_stream_flutter/utils.dart'; import 'package:zap_stream_flutter/widgets/button.dart'; diff --git a/macos/Flutter/GeneratedPluginRegistrant.swift b/macos/Flutter/GeneratedPluginRegistrant.swift index 504d9df..6841ae6 100644 --- a/macos/Flutter/GeneratedPluginRegistrant.swift +++ b/macos/Flutter/GeneratedPluginRegistrant.swift @@ -8,6 +8,7 @@ import Foundation import emoji_picker_flutter import file_selector_macos import firebase_core +import firebase_messaging import flutter_secure_storage_macos import objectbox_flutter_libs import package_info_plus @@ -23,6 +24,7 @@ func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) { EmojiPickerFlutterPlugin.register(with: registry.registrar(forPlugin: "EmojiPickerFlutterPlugin")) FileSelectorPlugin.register(with: registry.registrar(forPlugin: "FileSelectorPlugin")) FLTFirebaseCorePlugin.register(with: registry.registrar(forPlugin: "FLTFirebaseCorePlugin")) + FLTFirebaseMessagingPlugin.register(with: registry.registrar(forPlugin: "FLTFirebaseMessagingPlugin")) FlutterSecureStoragePlugin.register(with: registry.registrar(forPlugin: "FlutterSecureStoragePlugin")) ObjectboxFlutterLibsPlugin.register(with: registry.registrar(forPlugin: "ObjectboxFlutterLibsPlugin")) FPPPackageInfoPlusPlugin.register(with: registry.registrar(forPlugin: "FPPPackageInfoPlusPlugin")) diff --git a/pubspec.lock b/pubspec.lock index 62dd56e..ceaab27 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -1,6 +1,14 @@ # Generated by pub # See https://dart.dev/tools/pub/glossary#lockfile packages: + _flutterfire_internals: + dependency: transitive + description: + name: _flutterfire_internals + sha256: "214e6f07e2a44f45972e0365c7b537eaeaddb4598db0778dd4ac64b4acd3f5b1" + url: "https://pub.dev" + source: hosted + version: "1.3.55" amberflutter: dependency: "direct main" description: @@ -305,6 +313,30 @@ packages: url: "https://pub.dev" source: hosted version: "2.23.0" + firebase_messaging: + dependency: "direct main" + description: + name: firebase_messaging + sha256: "38111089e511f03daa2c66b4c3614c16421b7d78c84ee04331a0a65b47df4542" + url: "https://pub.dev" + source: hosted + version: "15.2.6" + firebase_messaging_platform_interface: + dependency: transitive + description: + name: firebase_messaging_platform_interface + sha256: ba254769982e5f439e534eed68856181c74e2b3f417c8188afad2bb440807cc7 + url: "https://pub.dev" + source: hosted + version: "4.6.6" + firebase_messaging_web: + dependency: transitive + description: + name: firebase_messaging_web + sha256: dba89137272aac39e95f71408ba25c33fb8ed903cd5fa8d1e49b5cd0d96069e0 + url: "https://pub.dev" + source: hosted + version: "3.10.6" fixnum: dependency: transitive description: diff --git a/pubspec.yaml b/pubspec.yaml index 4d25983..4276648 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -40,6 +40,7 @@ dependencies: flutter_localizations: sdk: flutter firebase_core: ^3.13.1 + firebase_messaging: ^15.2.6 dependency_overrides: ndk: