trifid_mobile/lib/screens/SettingsScreen.dart
micha3lbrown e844e2c195
Add logWrap to global settings
`logWrap` is a configuration that allows for users to decide if when
viewing logs the lines should extend off screen allowing for scroll
behavior or if they should wrap at screen edge.

We also considered allowing users to toggle this setting at the Site
level but decided that since users would likely want this setting to
apply to all sites, we hoisted the configuration.

Advances #3
2021-02-05 10:09:56 -05:00

96 lines
2.7 KiB
Dart

import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter/widgets.dart';
import 'package:mobile_nebula/components/SimplePage.dart';
import 'package:mobile_nebula/components/config/ConfigItem.dart';
import 'package:mobile_nebula/components/config/ConfigPageItem.dart';
import 'package:mobile_nebula/components/config/ConfigSection.dart';
import 'package:mobile_nebula/services/settings.dart';
import 'package:mobile_nebula/services/utils.dart';
import 'AboutScreen.dart';
class SettingsScreen extends StatefulWidget {
@override
_SettingsScreenState createState() {
return _SettingsScreenState();
}
}
class _SettingsScreenState extends State<SettingsScreen> {
var settings = Settings();
@override
void initState() {
//TODO: we need to unregister on dispose?
settings.onChange().listen((_) {
if (this.mounted) {
setState(() {});
}
});
super.initState();
}
@override
Widget build(BuildContext context) {
List<Widget> colorSection = [];
colorSection.add(ConfigItem(
label: Text('Use system colors'),
labelWidth: 200,
content: Align(
alignment: Alignment.centerRight,
child: Switch.adaptive(
materialTapTargetSize: MaterialTapTargetSize.shrinkWrap,
onChanged: (value) {
settings.useSystemColors = value;
},
value: settings.useSystemColors,
)),
));
if (!settings.useSystemColors) {
colorSection.add(ConfigItem(
label: Text('Dark mode'),
content: Align(
alignment: Alignment.centerRight,
child: Switch.adaptive(
materialTapTargetSize: MaterialTapTargetSize.shrinkWrap,
onChanged: (value) {
settings.darkMode = value;
},
value: settings.darkMode,
)),
));
}
List<Widget> items = [];
items.add(ConfigSection(children: colorSection));
items.add(ConfigItem(
label: Text('Wrap log output'),
labelWidth: 200,
content: Align(
alignment: Alignment.centerRight,
child: Switch.adaptive(
materialTapTargetSize: MaterialTapTargetSize.shrinkWrap,
value: settings.logWrap,
onChanged: (value) {
setState(() {
settings.logWrap = value;
});
},
)),
));
items.add(ConfigSection(children: [
ConfigPageItem(
label: Text('About'),
onPressed: () => Utils.openPage(context, (context) => AboutScreen()),
)
]));
return SimplePage(
title: 'Settings',
child: Column(children: items),
);
}
}