mobile_nebula/lib/screens/SettingsScreen.dart

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

111 lines
3.2 KiB
Dart
Raw Permalink Normal View History

import 'dart:async';
2020-07-27 20:43:58 +00:00
import 'package:flutter/material.dart';
import 'package:flutter_svg/svg.dart';
2020-07-27 20:43:58 +00:00
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/screens/EnrollmentScreen.dart';
2020-07-27 20:43:58 +00:00
import 'package:mobile_nebula/services/settings.dart';
import 'package:mobile_nebula/services/utils.dart';
import 'AboutScreen.dart';
class SettingsScreen extends StatefulWidget {
final StreamController stream;
const SettingsScreen(this.stream, {super.key});
2020-07-27 20:43:58 +00:00
@override
_SettingsScreenState createState() => _SettingsScreenState();
2020-07-27 20:43:58 +00:00
}
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;
});
},
)),
));
final dnIcon = Theme.of(context).brightness == Brightness.dark ? 'images/dn-logo-dark.svg' : 'images/dn-logo-light.svg';
items.add(ConfigSection(children: [
ConfigPageItem(
label: Text('Enroll with DN'),
labelWidth: 200,
onPressed: () => Utils.openPage(context, (context) => EnrollmentScreen(stream: widget.stream, allowCodeEntry: true))
)
]));
items.add(ConfigSection(children: [
ConfigPageItem(
label: Text('About'),
onPressed: () => Utils.openPage(context, (context) => AboutScreen()),
)
]));
2020-07-27 20:43:58 +00:00
return SimplePage(
title: Text('Settings'),
2020-07-27 20:43:58 +00:00
child: Column(children: items),
);
}
}