diff --git a/lib/components/bottomsheet.dart b/lib/components/bottomsheet.dart index 288028b..0140deb 100644 --- a/lib/components/bottomsheet.dart +++ b/lib/components/bottomsheet.dart @@ -57,7 +57,6 @@ class CLNBottomSheet { }, child: Text( '$display msats', - textScaleFactor: 1.0, style: TextStyle( fontSize: 40, fontWeight: FontWeight.bold, diff --git a/lib/model/user_setting.dart b/lib/model/user_setting.dart index 9c3dbe6..46cc7ed 100644 --- a/lib/model/user_setting.dart +++ b/lib/model/user_setting.dart @@ -9,6 +9,7 @@ class Setting { String? host; String? path; String? nodeId; + bool? customLambdaServer; String? lambdaServer; String? rune; @@ -17,7 +18,8 @@ class Setting { this.host, this.path, this.nodeId, - this.lambdaServer, + this.customLambdaServer = false, + this.lambdaServer = "https://lnlambda.lnmetrics.info", this.rune}) { clientMode = ClientProvider.getClientByDefPlatform().first; } @@ -56,6 +58,7 @@ class Setting { 'nodeId': nodeId, 'host': host, 'rune': rune, + 'customLambdaServer': customLambdaServer, 'lambdaServer': lambdaServer, }; } @@ -73,6 +76,7 @@ class Setting { return path != null; case ClientMode.lnlambda: return nodeId != null && + customLambdaServer != null && lambdaServer != null && rune != null && host != null; diff --git a/lib/model/user_setting.g.dart b/lib/model/user_setting.g.dart index e690490..f036dd8 100644 --- a/lib/model/user_setting.g.dart +++ b/lib/model/user_setting.g.dart @@ -11,6 +11,7 @@ Setting _$SettingFromJson(Map json) => Setting( host: json['host'] as String?, path: json['path'] as String?, nodeId: json['nodeId'] as String?, + customLambdaServer: json['customLambdaServer'] as bool?, lambdaServer: json['lambdaServer'] as String?, rune: json['rune'] as String?, ); @@ -28,6 +29,7 @@ Map _$SettingToJson(Setting instance) { writeNotNull('host', instance.host); writeNotNull('path', instance.path); writeNotNull('nodeId', instance.nodeId); + writeNotNull('customLambdaServer', instance.customLambdaServer); writeNotNull('lambdaServer', instance.lambdaServer); writeNotNull('rune', instance.rune); return val; diff --git a/lib/views/pay/pay_view.dart b/lib/views/pay/pay_view.dart index fd06c42..926f77c 100644 --- a/lib/views/pay/pay_view.dart +++ b/lib/views/pay/pay_view.dart @@ -32,7 +32,7 @@ class _PayViewState extends State { Future payInvoice(String boltString) async { try { await widget.provider.get().payInvoice(invoice: boltString); - if (context.mounted) { + if (mounted) { PopUp.showPopUp( context, 'Payment Successful', 'Payment successfully sent', false); } diff --git a/lib/views/request/request_view.dart b/lib/views/request/request_view.dart index 4c9eb6e..3d5b51c 100644 --- a/lib/views/request/request_view.dart +++ b/lib/views/request/request_view.dart @@ -363,7 +363,7 @@ class _RequestViewState extends State { ) : Text( value, - textScaleFactor: 1.0, + textScaler: const TextScaler.linear(1.0), style: const TextStyle( fontSize: 35, fontWeight: FontWeight.bold, diff --git a/lib/views/setting/lnlambda_setting_view.dart b/lib/views/setting/lnlambda_setting_view.dart index 94ffc31..98de6ea 100644 --- a/lib/views/setting/lnlambda_setting_view.dart +++ b/lib/views/setting/lnlambda_setting_view.dart @@ -40,16 +40,45 @@ class _LnlambdaSettingViewState extends State { ), ), const Text("Lambda Server"), - TextFormField( - controller: TextEditingController(text: setting.lambdaServer ?? ''), - onChanged: (text) { - setting.lambdaServer = text; + DropdownButtonFormField( + value: + setting.customLambdaServer! ? 'custom' : setting.lambdaServer, + items: const [ + DropdownMenuItem( + value: 'https://lnlambda.lnmetrics.info', + child: Text("https://lnlambda.lnmetrics.info"), + ), + DropdownMenuItem( + value: 'custom', + child: Text("Enter lambda server url manually"), + ), + ], + onChanged: (value) { + setState(() { + if (value == 'custom') { + setting.customLambdaServer = true; + } else { + setting.customLambdaServer = false; + setting.lambdaServer = value as String; + } + }); }, - decoration: const InputDecoration( - label: Text("lnlambda server url"), - border: OutlineInputBorder(), - ), ), + () { + if (setting.customLambdaServer == true) { + return TextFormField( + controller: TextEditingController(text: setting.lambdaServer), + onChanged: (text) { + setting.lambdaServer = text; + }, + decoration: const InputDecoration( + label: Text("lnlambda server url"), + border: OutlineInputBorder(), + ), + ); + } + return const SizedBox(); + }(), const Text("Rune"), TextFormField( controller: TextEditingController(text: setting.rune ?? ''), diff --git a/lib/views/setting/setting_view.dart b/lib/views/setting/setting_view.dart index 9d1fd73..6c65a0f 100644 --- a/lib/views/setting/setting_view.dart +++ b/lib/views/setting/setting_view.dart @@ -91,18 +91,19 @@ class _SettingViewState extends State { children: [ ElevatedButton( onPressed: () async { - if (setting.isValid()) { + if (setting.isValid() && context.mounted) { await saveSettings(setting: setting); await ManagerAPIProvider.registerClientFromSetting( setting, widget.provider); // https://stackoverflow.com/questions/68871880/do-not-use-buildcontexts-across-async-gaps - if (!mounted) return; - Navigator.of(context).pushAndRemoveUntil( - MaterialPageRoute( - builder: (context) => HomeView( - provider: widget.provider, - )), - (Route route) => false); + if (context.mounted) { + Navigator.of(context).pushAndRemoveUntil( + MaterialPageRoute( + builder: (context) => HomeView( + provider: widget.provider, + )), + (Route route) => false); + } } else { PopUp.showPopUp( context,