Skip to content

Commit

Permalink
+ общий хелпер для настроек приложения
Browse files Browse the repository at this point in the history
~ перенос методов сохранения/загрузки параметров сервера в хелпер
- удаление ненужного мусора
~ минорные правки
  • Loading branch information
blazer404 committed Apr 30, 2024
1 parent 06b73f0 commit 5aa5fad
Show file tree
Hide file tree
Showing 4 changed files with 68 additions and 69 deletions.
32 changes: 32 additions & 0 deletions lib/core/Settings.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
import 'package:aoi_remote/const/SettingsConst.dart';
import 'package:shared_preferences/shared_preferences.dart';

class Settings {
static Future<SharedPreferences> _getPrefs() async {
return await SharedPreferences.getInstance();
}

/**
* Сохранить настройки устройства
*/
static Future<void> saveDevice(Map<String, dynamic> data) async {
//todo нужна валидация полей (особенно ip и порт)
final prefs = await _getPrefs();
await prefs.setString(SettingsConst.DEVICE_NAME, data['name']);
await prefs.setString(SettingsConst.DEVICE_IP, data['ip']);
await prefs.setInt(SettingsConst.DEVICE_PORT, int.parse(data['port']));
await prefs.setString(SettingsConst.DEVICE_TOKEN, data['token']);
}

/**
* Загрузить настройки устройства
*/
static Future<Map<String, dynamic>> loadDevice() async {
final prefs = await _getPrefs();
final name = prefs.getString(SettingsConst.DEVICE_NAME)?.toString() ?? '';
final ip = prefs.getString(SettingsConst.DEVICE_IP)?.toString() ?? '';
final port = prefs.getInt(SettingsConst.DEVICE_PORT)?.toString() ?? '';
final token = prefs.getString(SettingsConst.DEVICE_TOKEN)?.toString() ?? '';
return {'name': name, 'ip': ip, 'port': port, 'token': token};
}
}
37 changes: 0 additions & 37 deletions lib/core/device_settings/DeviceSettings.dart

This file was deleted.

11 changes: 0 additions & 11 deletions lib/core/device_settings/DeviceSettingsInterface.dart

This file was deleted.

57 changes: 36 additions & 21 deletions lib/view/settings/SettingsPage.dart
Original file line number Diff line number Diff line change
@@ -1,42 +1,50 @@
import 'package:aoi_remote/const/SettingsConst.dart';
import 'package:aoi_remote/core/AppTheme.dart';
import 'package:aoi_remote/core/Settings.dart';
import 'package:aoi_remote/helpers/IpAddressInputFormatter.dart';
import 'package:aoi_remote/helpers/Utils.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:shared_preferences/shared_preferences.dart';
import 'package:flutter_vibrate/flutter_vibrate.dart';

class SettingsPage extends StatefulWidget {
@override
_SettingsPageState createState() => _SettingsPageState();
}

class _SettingsPageState extends State<SettingsPage> {
final TextEditingController nameController = TextEditingController();
final TextEditingController ipController = TextEditingController();
final TextEditingController portController = TextEditingController();
final TextEditingController tokenController = TextEditingController();

//todo переписать на интерфейс
Future<void> _loadSettings() async {
final prefs = await SharedPreferences.getInstance();
ipController.text = prefs.getString(SettingsConst.DEVICE_IP)!.toString();
portController.text = prefs.getInt(SettingsConst.DEVICE_PORT)!.toString();
tokenController.text = prefs.getString(SettingsConst.DEVICE_TOKEN)!.toString();
static const String nameControllerLabel = 'Device name';
static const String ipControllerLabel = 'IP Address';
static const String portControllerLabel = 'Port';
static const String tokenControllerLabel = 'Auth token';

Future<void> _loadDevice() async {
Settings.loadDevice().then((value) {
nameController.text = value['name'];
ipController.text = value['ip'];
portController.text = value['port'];
tokenController.text = value['token'];
});
}

//todo переписать на интерфейс + нужна валидация полей (для ip особенно)
Future<void> _saveSetting() async {
final prefs = await SharedPreferences.getInstance();
await prefs.setString(SettingsConst.DEVICE_IP, ipController.text);
await prefs.setInt(SettingsConst.DEVICE_PORT, int.parse(portController.text));
await prefs.setString(SettingsConst.DEVICE_TOKEN, tokenController.text);
Navigator.pop(context);
Future<void> _saveDevice() async {
final Map<String, dynamic> data = {
'name': nameController.text,
'ip': ipController.text,
'port': portController.text,
'token': tokenController.text,
};
Settings.saveDevice(data).then((value) => Navigator.pop(context));
}

@override
Widget build(BuildContext context) {
return FutureBuilder(
future: _loadSettings(),
future: _loadDevice(),
builder: (context, snapshot) {
if (snapshot.connectionState == ConnectionState.done) {
return buildPageUI();
Expand All @@ -55,6 +63,10 @@ class _SettingsPageState extends State<SettingsPage> {
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
TextField(
controller: nameController,
decoration: InputDecoration(labelText: nameControllerLabel),
),
TextField(
controller: ipController,
inputFormatters: [
Expand All @@ -63,11 +75,11 @@ class _SettingsPageState extends State<SettingsPage> {
IpAddressInputFormatter()
],
keyboardType: TextInputType.numberWithOptions(decimal: true),
decoration: InputDecoration(labelText: 'IP Address'),
decoration: InputDecoration(labelText: ipControllerLabel),
),
TextField(
controller: portController,
decoration: InputDecoration(labelText: 'Port'),
decoration: InputDecoration(labelText: portControllerLabel),
inputFormatters: [
LengthLimitingTextInputFormatter(5),
Utils.decimalFilter(),
Expand All @@ -76,14 +88,17 @@ class _SettingsPageState extends State<SettingsPage> {
),
TextField(
controller: tokenController,
decoration: InputDecoration(labelText: 'Auth token'),
decoration: InputDecoration(labelText: tokenControllerLabel),
),
SizedBox(height: 16.0),
SizedBox(height: 20),
Row(
mainAxisAlignment: MainAxisAlignment.end,
children: [
ElevatedButton(
onPressed: _saveSetting,
onPressed: () => {
Vibrate.feedback(FeedbackType.medium),
_saveDevice(),
},
style: ButtonStyle(backgroundColor: MaterialStatePropertyAll(AppTheme.backgroundColor)),
child: Row(
mainAxisSize: MainAxisSize.min,
Expand Down

0 comments on commit 5aa5fad

Please sign in to comment.