Compare commits

...

2 Commits

Author SHA1 Message Date
majestrate 03c2cd813d
Merge pull request #7 from frtget/feature-save-exit-and-dns
Persist settings
2022-02-12 19:10:36 -05:00
frtget fd8a35bbe6 Add Settings class -> persist settings 2022-02-02 20:04:27 -05:00
3 changed files with 75 additions and 27 deletions

View File

@ -1,15 +1,19 @@
import 'dart:async';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:lokinet_lib/lokinet_lib.dart';
import 'package:lokinet_mobile/src/settings.dart';
import 'package:lokinet_mobile/src/utils/is_dakmode.dart';
import 'package:lokinet_mobile/src/widget/lokinet_divider.dart';
import 'package:lokinet_mobile/src/widget/lokinet_power_button.dart';
import 'package:lokinet_mobile/src/widget/themed_lokinet_logo.dart';
void main() {
void main() async {
//Load settings
WidgetsFlutterBinding.ensureInitialized();
await Settings.getInstance().initialize();
runApp(LokinetApp());
}
@ -61,14 +65,17 @@ class LokinetHomePageState extends State<LokinetHomePage> {
return Scaffold(
key: key,
resizeToAvoidBottomInset:
false, //Prevents overflow when keyboard is shown
body: Container(
color: darkModeOn ? Colors.black : Colors.white,
child: Column(children: [ThemedLokinetLogo(), MyForm()])));
}
}
final exitInput = TextEditingController();
final dnsInput = TextEditingController();
final exitInput = TextEditingController(text: Settings.getInstance().exitNode);
final dnsInput =
TextEditingController(text: Settings.getInstance().upstreamDNS);
// Create a Form widget.
class MyForm extends StatefulWidget {
@ -110,12 +117,15 @@ class MyFormState extends State<MyForm> {
await LokinetLib.disconnectFromLokinet();
await _cancelTimer();
} else {
final String exitNode = exitInput.value.text.trim();
final String upstreamDNS = dnsInput.value.text.trim();
//Save the exit node and upstream dns
final Settings settings = Settings.getInstance();
settings.exitNode = exitInput.value.text.trim();
settings.upstreamDNS = dnsInput.value.text.trim();
final result = await LokinetLib.prepareConnection();
if (result)
LokinetLib.connectToLokinet(
exitNode: exitNode, upstreamDNS: upstreamDNS);
exitNode: settings.exitNode, upstreamDNS: settings.upstreamDNS);
_startTimer();
}
}

38
lib/src/settings.dart Normal file
View File

@ -0,0 +1,38 @@
import 'package:shared_preferences/shared_preferences.dart';
class Settings {
static Settings _instance;
String _exitNode;
String _upstreamDNS;
Settings._();
Future<void> initialize() async {
SharedPreferences sharedPreferences = await SharedPreferences.getInstance();
this._exitNode = sharedPreferences.getString("exit-node");
this._upstreamDNS = sharedPreferences.getString("upstream-dns");
}
String get exitNode => this._exitNode;
set exitNode(String exitNode) {
this._exitNode = exitNode;
SharedPreferences.getInstance().then((sharedPreferences) =>
sharedPreferences.setString("exit-node", exitNode));
}
String get upstreamDNS => this._upstreamDNS;
set upstreamDNS(String upstreamDNS) {
this._upstreamDNS = upstreamDNS;
SharedPreferences.getInstance().then((sharedPreferences) =>
sharedPreferences.setString("upstream-dns", upstreamDNS));
}
static Settings getInstance() {
if (Settings._instance == null) {
Settings._instance = new Settings._();
}
return Settings._instance;
}
}

View File

@ -7,49 +7,49 @@ packages:
name: async
url: "https://pub.dartlang.org"
source: hosted
version: "2.5.0-nullsafety.1"
version: "2.8.2"
boolean_selector:
dependency: transitive
description:
name: boolean_selector
url: "https://pub.dartlang.org"
source: hosted
version: "2.1.0-nullsafety.1"
version: "2.1.0"
characters:
dependency: transitive
description:
name: characters
url: "https://pub.dartlang.org"
source: hosted
version: "1.1.0-nullsafety.3"
version: "1.2.0"
charcode:
dependency: transitive
description:
name: charcode
url: "https://pub.dartlang.org"
source: hosted
version: "1.2.0-nullsafety.1"
version: "1.3.1"
clock:
dependency: transitive
description:
name: clock
url: "https://pub.dartlang.org"
source: hosted
version: "1.1.0-nullsafety.1"
version: "1.1.0"
collection:
dependency: transitive
description:
name: collection
url: "https://pub.dartlang.org"
source: hosted
version: "1.15.0-nullsafety.3"
version: "1.15.0"
fake_async:
dependency: transitive
description:
name: fake_async
url: "https://pub.dartlang.org"
source: hosted
version: "1.2.0-nullsafety.1"
version: "1.2.0"
ffi:
dependency: transitive
description:
@ -87,21 +87,21 @@ packages:
name: matcher
url: "https://pub.dartlang.org"
source: hosted
version: "0.12.10-nullsafety.1"
version: "0.12.11"
meta:
dependency: transitive
description:
name: meta
url: "https://pub.dartlang.org"
source: hosted
version: "1.3.0-nullsafety.3"
version: "1.7.0"
path:
dependency: transitive
description:
name: path
url: "https://pub.dartlang.org"
source: hosted
version: "1.8.0-nullsafety.1"
version: "1.8.0"
path_provider:
dependency: "direct main"
description:
@ -169,56 +169,56 @@ packages:
name: source_span
url: "https://pub.dartlang.org"
source: hosted
version: "1.8.0-nullsafety.2"
version: "1.8.1"
stack_trace:
dependency: transitive
description:
name: stack_trace
url: "https://pub.dartlang.org"
source: hosted
version: "1.10.0-nullsafety.1"
version: "1.10.0"
stream_channel:
dependency: transitive
description:
name: stream_channel
url: "https://pub.dartlang.org"
source: hosted
version: "2.1.0-nullsafety.1"
version: "2.1.0"
string_scanner:
dependency: transitive
description:
name: string_scanner
url: "https://pub.dartlang.org"
source: hosted
version: "1.1.0-nullsafety.1"
version: "1.1.0"
term_glyph:
dependency: transitive
description:
name: term_glyph
url: "https://pub.dartlang.org"
source: hosted
version: "1.2.0-nullsafety.1"
version: "1.2.0"
test_api:
dependency: transitive
description:
name: test_api
url: "https://pub.dartlang.org"
source: hosted
version: "0.2.19-nullsafety.2"
version: "0.4.3"
typed_data:
dependency: transitive
description:
name: typed_data
url: "https://pub.dartlang.org"
source: hosted
version: "1.3.0-nullsafety.3"
version: "1.3.0"
vector_math:
dependency: transitive
description:
name: vector_math
url: "https://pub.dartlang.org"
source: hosted
version: "2.1.0-nullsafety.3"
version: "2.1.1"
win32:
dependency: transitive
description:
@ -234,5 +234,5 @@ packages:
source: hosted
version: "0.1.2"
sdks:
dart: ">=2.10.0-110 <2.11.0"
flutter: ">=1.20.0 <2.0.0"
dart: ">=2.14.0 <3.0.0"
flutter: ">=1.20.0"