Julian Gegner 2023-02-17 13:47:52 +01:00
parent 4b2e900bda
commit 8d8a9ccf2c
10 changed files with 125 additions and 21 deletions

View File

@ -0,0 +1,4 @@
{
"group": "Gruppe 2",
"key": "value"
}

View File

@ -10,6 +10,6 @@ class MyApp extends StatelessWidget {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return const MaterialApp(title: _title, home: MyHomePage()); return MaterialApp(title: _title, home: MyHomePage());
} }
} }

View File

@ -0,0 +1,13 @@
class Settings {
final String group;
final String key;
//final List<String> relapseCategories;
Settings(this.group, this.key); //, this.relapseCategories);
Settings.fromJson(Map<String, dynamic> json)
: group = json['group'].toString(),
key = json['key'].toString()
//relapseCategories = json['relapse_categories']
;
}

View File

@ -1,9 +1,11 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:smoke_cess_app/pages/mood_page.dart'; import 'package:smoke_cess_app/pages/mood_page.dart';
import 'package:smoke_cess_app/pages/relapse_page.dart'; import 'package:smoke_cess_app/pages/relapse_page.dart';
import 'package:smoke_cess_app/pages/settings_page.dart'; import 'package:smoke_cess_app/pages/scanner_page.dart';
import 'package:smoke_cess_app/pages/sleep_page.dart'; import 'package:smoke_cess_app/pages/sleep_page.dart';
import 'package:smoke_cess_app/pages/timer_page.dart'; import 'package:smoke_cess_app/pages/timer_page.dart';
import 'package:smoke_cess_app/service/settings_service.dart';
import 'package:smoke_cess_app/widgets/missing_config_popup.dart';
class MyHomePage extends StatefulWidget { class MyHomePage extends StatefulWidget {
const MyHomePage({super.key}); const MyHomePage({super.key});
@ -13,24 +15,38 @@ class MyHomePage extends StatefulWidget {
} }
class MyHomePageState extends State<MyHomePage> { class MyHomePageState extends State<MyHomePage> {
int _selectedIndex = 2; int _selectedIndex = 4;
final SettingsService settingsService = SettingsService();
final List<String> _titles = [ final List<String> _titles = [
'Stimmung', 'Stimmung',
'Schlaf', 'Schlaf',
'Timer', 'Timer',
'Rückfall', 'Rückfall',
'Einstellungen' 'Scanner'
]; ];
static const List<Widget> _widgetOptions = <Widget>[ static final List<Widget> _widgetOptions = <Widget>[
MoodPage(), const MoodPage(),
SleepPage(), const SleepPage(),
StopWatchTimerPage(), const StopWatchTimerPage(),
RelapsePage(), const RelapsePage(),
SettingsPage(), SettingsPage(),
]; ];
void _onItemTapped(int index) { void _onItemTapped(int index) {
setState(() => _selectedIndex = index); setState(() async {
(await settingsService.getGroup() != null)
? _selectedIndex = index
: showDialog(
context: context,
builder: (BuildContext context) {
Future.delayed(
const Duration(seconds: 3),
() => Navigator.of(context)
.pop(true)); //Dismiss popup after 3 seconds
return const MissingConfigPopup();
});
});
} }
@override @override
@ -58,7 +74,7 @@ class MyHomePageState extends State<MyHomePage> {
icon: Icon(Icons.smoke_free_outlined, color: Colors.black), icon: Icon(Icons.smoke_free_outlined, color: Colors.black),
label: 'Rückfall'), label: 'Rückfall'),
NavigationDestination( NavigationDestination(
icon: Icon(Icons.settings, color: Colors.black), icon: Icon(Icons.camera_alt_outlined, color: Colors.black),
label: 'Settings'), label: 'Settings'),
], ],

View File

@ -0,0 +1,27 @@
import 'package:flutter/material.dart';
import 'package:smoke_cess_app/service/settings_service.dart';
class SettingsPage extends StatelessWidget {
SettingsPage({super.key});
SettingsService service = SettingsService();
@override
Widget build(BuildContext context) {
return Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
const Text('Hier taucht die Kamera zum Scannen auf'),
const SizedBox(height: 30),
ElevatedButton(
style: ElevatedButton.styleFrom(
textStyle: const TextStyle(fontSize: 20)),
onPressed: () {
service.loadSettings();
},
child: const Text('Read JSON'),
)
],
));
}
}

View File

@ -1,10 +0,0 @@
import 'package:flutter/material.dart';
class SettingsPage extends StatelessWidget {
const SettingsPage({super.key});
@override
Widget build(BuildContext context) {
return const Center(child: Text('Hier können Settings eingestellt werden'));
}
}

View File

@ -0,0 +1,9 @@
import 'package:flutter/services.dart';
import 'dart:convert';
const String configJSONPath = 'assets/config.json';
Future<Map<String, dynamic>> loadLocalConfigJSON() async {
String content = await rootBundle.loadString(configJSONPath);
return jsonDecode(content);
}

View File

@ -1,4 +1,6 @@
import 'package:shared_preferences/shared_preferences.dart'; import 'package:shared_preferences/shared_preferences.dart';
import 'package:smoke_cess_app/models/settings.dart';
import 'package:smoke_cess_app/service/json_service.dart';
class SettingsService { class SettingsService {
final Future<SharedPreferences> _prefs = SharedPreferences.getInstance(); final Future<SharedPreferences> _prefs = SharedPreferences.getInstance();
@ -7,6 +9,11 @@ class SettingsService {
setIntSetting('workout_duration_minutes', 5); setIntSetting('workout_duration_minutes', 5);
} }
//access group setting which was saved in local storage
Future<String?> getGroup() {
return getStringSetting('group');
}
void setStringSetting(String settingKey, String settingValue) => void setStringSetting(String settingKey, String settingValue) =>
_prefs.then((pref) => pref.setString(settingKey, settingValue)); _prefs.then((pref) => pref.setString(settingKey, settingValue));
@ -19,7 +26,24 @@ class SettingsService {
Future<int?> getIntSetting(String settingKey) => Future<int?> getIntSetting(String settingKey) =>
_prefs.then((pref) => pref.getInt(settingKey)); _prefs.then((pref) => pref.getInt(settingKey));
void setStringList(String settingKey, List<String> list) =>
_prefs.then((pref) => pref.setStringList(settingKey, list));
//Add other setters and getters if needed //Add other setters and getters if needed
//other possible SharedPreferences Types: Int, Bool, Double, StringList //other possible SharedPreferences Types: Int, Bool, Double, StringList
//see https://pub.dev/packages/shared_preferences //see https://pub.dev/packages/shared_preferences
Future<void> loadSettings() async {
Map<String, dynamic> configJSON = await loadLocalConfigJSON();
Settings settings = Settings.fromJson(configJSON);
print(settings.group);
saveSettings(settings);
String gruppe = (await getGroup())!;
print('Gruppe: $gruppe');
}
void saveSettings(Settings settings) {
setStringSetting('group', settings.group);
setStringSetting('key', settings.key);
}
} }

View File

@ -0,0 +1,19 @@
import 'package:flutter/material.dart';
class MissingConfigPopup extends StatelessWidget {
const MissingConfigPopup({super.key});
@override
Widget build(BuildContext context) {
return AlertDialog(
title: const Text('Fehlende Konfiguration'),
content: Column(
mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.start,
children: const <Widget>[
Text("Bitte QR Code Scannen"),
],
),
);
}
}

View File

@ -62,6 +62,8 @@ flutter:
# assets: # assets:
# - images/a_dot_burr.jpeg # - images/a_dot_burr.jpeg
# - images/a_dot_ham.jpeg # - images/a_dot_ham.jpeg
assets:
- config.json
# An image asset can refer to one or more resolution-specific "variants", see # An image asset can refer to one or more resolution-specific "variants", see
# https://flutter.dev/assets-and-images/#resolution-aware # https://flutter.dev/assets-and-images/#resolution-aware