This package helps you to easily produce Nostr apps by providing generics Widgets and functions.
Features
- Nostr widgets
- Login persistence
Getting started
Add dependencies
flutter pub add ndk
flutter pub add ndk_flutter
Add internationalization
Follow the Official documentation
import 'package:ndk_flutter/l10n/app_localizations.dart' as ndk_flutter;
MaterialApp(
localizationsDelegates: [
ndk_flutter.AppLocalizations.delegate, // add this line
],
);
Usage
import 'package:ndk/ndk.dart';
import 'package:ndk_flutter/ndk_flutter.dart';
// wrap your Ndk instance
final ndkFlutter = NdkFlutter(ndk: ndk);
// reads saved accounts from secure storage and registers their signers in ndk
// typically called before runApp
await ndkFlutter.restoreAccountsState();
// call this every time the auth state changes
await ndkFlutter.saveAccountsState();
// available widgets (take ndkFlutter, not ndk)
NBanner(ndkFlutter: ndkFlutter);
NPicture(ndkFlutter: ndkFlutter);
NName(ndkFlutter: ndkFlutter);
NUserProfile(ndkFlutter: ndkFlutter);
NLogin(ndkFlutter: ndkFlutter);
NSwitchAccount(ndkFlutter: ndkFlutter);
By default, the logged-in user is used for user widgets; you can override it by passing a pubkey parameter.
TODO
NUserProfile optionnal show nsec and copyNUserProfile show the letter in the Picture and make it as big as possible
Need more Widgets
Open an Issue
Shared wallet input UI
NWallets includes the wallet chooser, paste/manual input, Cashu discovery,
LNbits setup, connection status/retry screens, and Alby Cloud/Coinos connection
presets. The presets reuse albyGoConnectConfig for the host app name and
callback URL. Register that callback scheme in your app and forward incoming
URLs to NWalletsState.onProtocolUrlReceived; on mobile resume without a
callback, call resumePendingWalletAuth. Legacy untagged providers are
revalidated every five seconds while their connection screen remains open.
Only camera decoding is supplied by the host, so ndk_flutter does not depend on a camera plugin, WebRTC, or a native QR decoder:
NWallets(
ndkFlutter: ndkFlutter,
albyGoConnectConfig: const AlbyGoConnectConfig(
appName: 'My app',
appIconUrl: 'https://example.com/icon.png',
callback: 'myapp://nwc',
),
walletQrScannerBuilder: (context, onScan, onError) =>
MyQrCamera(onScan: onScan, onError: onError),
)
MyQrCamera is your camera widget. Report decoded text through onScan,
report failures through onError, and release camera resources on disposal.
The shared UI removes the camera during nested input dialogs and connection
status, then recreates it when scanning resumes. The same builder is used for
nested NWC and LNbits QR input. Pass null on platforms without camera support;
paste and wallet setup still work.
No provider list is needed. Set nwcConnectionOptions to replace the defaults,
or pass an empty list to disable web presets. defaultNwcConnectionOptions
is also available when extending the list. Existing walletInputScanner,
nwcUriScanner and bolt12InputScanner overrides remain supported.
showWalletInputDialog exposes the shared UI separately from NWallets.
Libraries
- data_layer/data_sources/nip55_signer
- data_layer/repositories/signers/nip55_event_signer
- l10n/app_localizations
- l10n/app_localizations_de
- l10n/app_localizations_en
- l10n/app_localizations_es
- l10n/app_localizations_fi
- l10n/app_localizations_fr
- l10n/app_localizations_it
- l10n/app_localizations_ja
- l10n/app_localizations_pl
- l10n/app_localizations_pt
- l10n/app_localizations_ru
- l10n/app_localizations_sk
- l10n/app_localizations_zh
- main/config
- main/ndk_flutter
- models/accounts
- models/models
- models/nip_05_result
- ndk_flutter
- ndk_method_channel
- ndk_platform_interface
- repositories/cashu_seed_store
- repositories/flutter_secure_storage_wallets_repo
- signers/ndk_event_signer
- Auto-platform Nostr event signer that uses the best implementation for the current platform.
- signers/nip07_event_signer
- NIP-07 browser-extension signer for Nostr.
- signers/src/event_signer_web
- signers/src/ndk_event_signer_native
- signers/src/nip07_event_signer_stub
- signers/src/nip07_event_signer_web
- signers/src/nip07_js_interop
- signers/src/nostr_sign_js
- signers/src/web_event_signer_stub
- signers/web_event_signer
- Fast web-based Nostr event signer using native Web Crypto APIs.
- utils/nip_avatar
- utils/nostr_kinds
- utils/string_color
- verifiers/ndk_event_verifier
- verifiers/ndk_event_verifier_native
- verifiers/ndk_event_verifier_stub
- verifiers/ndk_event_verifier_web
- verifiers/src/js_interop
- verifiers/src/nostr_crypto_js
- verifiers/src/web_event_verifier_stub
- verifiers/src/web_event_verifier_web
- verifiers/web_event_verifier
- Fast web-based Nostr event verifier using native Web Crypto APIs.
- widgets/locale_switcher/n_locale_switcher
- widgets/login/login_controller
- widgets/login/n_login
- widgets/login/nostr_connect_dialog_view
- widgets/name/n_name
- widgets/pending_requests/n_pending_requests
- widgets/picture/n_picture
- widgets/switch_account/n_switch_account
- widgets/user_profile/n_user_profile
- widgets/wallets/n_add_wallet_dialogs
- widgets/wallets/n_cashu_mint_icon
- widgets/wallets/n_cashu_seed_backup_warning
- widgets/wallets/n_lnbits_icon
- widgets/wallets/n_nwc_wallet_icon
- widgets/wallets/n_pending_transactions
- widgets/wallets/n_recent_transactions
- widgets/wallets/n_wallet_actions
- widgets/wallets/n_wallet_card
- widgets/wallets/n_wallet_card_list
- widgets/wallets/n_wallet_input_dialog
- widgets/wallets/n_wallets
- widgets/wallets/wallet_action_dialogs
- widgets/widgets