You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
84 lines
2.7 KiB
84 lines
2.7 KiB
10 months ago
|
import 'package:flutter/cupertino.dart';
|
||
|
import 'package:flutter/material.dart';
|
||
|
import 'package:pi_dashboard/src/settings/settings_service.dart';
|
||
|
|
||
|
import 'settings_controller.dart';
|
||
|
|
||
|
/// Displays the various settings that can be customized by the user.
|
||
|
///
|
||
|
/// When a user changes a setting, the SettingsController is updated and
|
||
|
/// Widgets that listen to the SettingsController are rebuilt.
|
||
|
class SettingsView extends StatelessWidget {
|
||
|
const SettingsView({super.key, required this.controller});
|
||
|
|
||
|
static const routeName = '/settings';
|
||
|
|
||
|
final SettingsController controller;
|
||
|
|
||
|
@override
|
||
|
Widget build(BuildContext context) {
|
||
|
return Scaffold(
|
||
|
appBar: AppBar(
|
||
|
title: const Text('Settings'),
|
||
|
),
|
||
|
body: Padding(
|
||
|
padding: const EdgeInsets.all(16),
|
||
|
// Glue the SettingsController to the theme selection DropdownButton.
|
||
|
//
|
||
|
// When a user selects a theme from the dropdown list, the
|
||
|
// SettingsController is updated, which rebuilds the MaterialApp.
|
||
|
child: Column(children: [
|
||
|
DropdownButton<ThemeMode>(
|
||
|
// Read the selected themeMode from the controller
|
||
|
value: controller.themeMode,
|
||
|
// Call the updateThemeMode method any time the user selects a theme.
|
||
|
onChanged: controller.updateThemeMode,
|
||
|
items: const [
|
||
|
DropdownMenuItem(
|
||
|
value: ThemeMode.system,
|
||
|
child: Text('System Theme'),
|
||
|
),
|
||
|
DropdownMenuItem(
|
||
|
value: ThemeMode.light,
|
||
|
child: Text('Light Theme'),
|
||
|
),
|
||
|
DropdownMenuItem(
|
||
|
value: ThemeMode.dark,
|
||
|
child: Text('Dark Theme'),
|
||
|
)
|
||
|
],
|
||
|
),
|
||
|
TextFormField(
|
||
|
decoration: const InputDecoration(
|
||
|
border: UnderlineInputBorder(),
|
||
|
labelText: "Hostname",
|
||
|
),
|
||
|
initialValue: controller.hostname,
|
||
|
onChanged: controller.setHostname,
|
||
|
),
|
||
|
TextFormField(
|
||
|
decoration: const InputDecoration(
|
||
|
border: UnderlineInputBorder(),
|
||
|
labelText: "Username",
|
||
|
),
|
||
|
initialValue: controller.username,
|
||
|
onChanged: controller.setUsername,
|
||
|
),
|
||
|
TextFormField(
|
||
|
decoration: const InputDecoration(
|
||
|
border: UnderlineInputBorder(),
|
||
|
labelText: "Password",
|
||
|
),
|
||
|
obscureText: true,
|
||
|
enableSuggestions: false,
|
||
|
autocorrect: false,
|
||
|
initialValue: controller.password,
|
||
|
onChanged: controller.setPassword,
|
||
|
),
|
||
|
],)
|
||
|
|
||
|
),
|
||
|
);
|
||
|
}
|
||
|
}
|