1
0
mirror of https://github.com/flutter/samples.git synced 2025-11-08 13:58:47 +00:00
Files
samples/navigation_and_routing/lib/src/screens/settings.dart
2025-02-12 18:08:01 -05:00

97 lines
3.0 KiB
Dart

// Copyright 2021, the Flutter project authors. Please see the AUTHORS file
// for details. 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 'package:go_router/go_router.dart';
import 'package:url_launcher/link.dart';
import '../auth.dart';
class SettingsScreen extends StatefulWidget {
const SettingsScreen({super.key});
@override
State<SettingsScreen> createState() => _SettingsScreenState();
}
class _SettingsScreenState extends State<SettingsScreen> {
@override
Widget build(BuildContext context) => Scaffold(
body: SafeArea(
child: SingleChildScrollView(
child: Align(
alignment: Alignment.topCenter,
child: ConstrainedBox(
constraints: const BoxConstraints(maxWidth: 400),
child: const Card(
child: Padding(
padding: EdgeInsets.symmetric(vertical: 18, horizontal: 12),
child: SettingsContent(),
),
),
),
),
),
),
);
}
class SettingsContent extends StatelessWidget {
const SettingsContent({super.key});
@override
Widget build(BuildContext context) => Column(
children: [
...[
Text('Settings', style: Theme.of(context).textTheme.headlineMedium),
FilledButton(
onPressed: () {
BookstoreAuth.of(context).signOut();
},
child: const Text('Sign out'),
),
const Text('Example using the Link widget:'),
Link(
uri: Uri.parse('/books/all/book/0'),
builder:
(context, followLink) => TextButton(
onPressed: followLink,
child: const Text('/books/all/book/0'),
),
),
const Text('Example using GoRouter.of(context).go():'),
TextButton(
child: const Text('/books/all/book/0'),
onPressed: () {
GoRouter.of(context).go('/books/all/book/0');
},
),
].map((w) => Padding(padding: const EdgeInsets.all(8), child: w)),
const Text('Displays a dialog on the root Navigator:'),
TextButton(
onPressed:
() => showDialog<String>(
context: context,
builder:
(context) => AlertDialog(
title: const Text('Alert!'),
content: const Text('The alert description goes here.'),
actions: [
TextButton(
onPressed: () => Navigator.pop(context, 'Cancel'),
child: const Text('Cancel'),
),
TextButton(
onPressed: () => Navigator.pop(context, 'OK'),
child: const Text('OK'),
),
],
),
),
child: const Text('Show Dialog'),
),
],
);
}