blob: f6774d8fd9d92476775fe54c2d3ca322d5e88ea9 [file] [log] [blame]
// Copyright 2014 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
import 'package:flutter/material.dart';
import 'models.dart';
Future<void> showWindowSettingsDialog(
BuildContext context,
WindowSettings settings,
) async {
return await showDialog(
barrierDismissible: true,
context: context,
builder: (BuildContext ctx) {
return _WindowSettingsEditor(
settings: settings,
onClose: () => Navigator.of(context, rootNavigator: true).pop(),
);
},
);
}
class _WindowSettingsEditor extends StatefulWidget {
const _WindowSettingsEditor({required this.settings, required this.onClose});
final WindowSettings settings;
final void Function() onClose;
@override
State<_WindowSettingsEditor> createState() => _WindowSettingsEditorState();
}
class _WindowSettingsEditorState extends State<_WindowSettingsEditor> {
final TextEditingController _regularWidthController = TextEditingController();
final TextEditingController _regularHeightController =
TextEditingController();
final TextEditingController _dialogWidthController = TextEditingController();
final TextEditingController _dialogHeightController = TextEditingController();
@override
void initState() {
super.initState();
_regularWidthController.text = widget.settings.regularSize.width.toString();
_regularHeightController.text = widget.settings.regularSize.height
.toString();
_dialogWidthController.text = widget.settings.dialogSize.width.toString();
_dialogHeightController.text = widget.settings.dialogSize.height.toString();
}
@override
Widget build(BuildContext context) {
return SimpleDialog(
contentPadding: const EdgeInsets.all(4),
titlePadding: const EdgeInsets.fromLTRB(24, 10, 24, 0),
title: const Center(child: Text('Window Settings')),
children: [
ListTile(
title: const Text('Regular'),
subtitle: Row(
children: [
Expanded(
child: TextFormField(
controller: _regularWidthController,
decoration: const InputDecoration(labelText: 'Initial width'),
),
),
const SizedBox(width: 20),
Expanded(
child: TextFormField(
controller: _regularHeightController,
decoration: const InputDecoration(
labelText: 'Initial height',
),
),
),
],
),
),
ListTile(
title: const Text('Dialog'),
subtitle: Row(
children: [
Expanded(
child: TextFormField(
controller: _dialogWidthController,
decoration: const InputDecoration(labelText: 'Initial width'),
),
),
const SizedBox(width: 20),
Expanded(
child: TextFormField(
controller: _dialogHeightController,
decoration: const InputDecoration(
labelText: 'Initial height',
),
),
),
],
),
),
Padding(
padding: const EdgeInsets.symmetric(horizontal: 16),
child: TextButton(
onPressed: () {
widget.settings.regularSize = Size(
double.tryParse(_regularWidthController.text) ??
widget.settings.regularSize.width,
double.tryParse(_regularHeightController.text) ??
widget.settings.regularSize.height,
);
widget.settings.dialogSize = Size(
double.tryParse(_dialogWidthController.text) ??
widget.settings.dialogSize.width,
double.tryParse(_dialogHeightController.text) ??
widget.settings.dialogSize.height,
);
widget.onClose();
},
child: const Text('Apply'),
),
),
],
);
}
}