111 lines
2.9 KiB
Dart
111 lines
2.9 KiB
Dart
// Copyright 2013 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 'package:go_router/go_router.dart';
|
|
|
|
void main() => runApp(App());
|
|
|
|
/// The main app.
|
|
class App extends StatelessWidget {
|
|
/// Creates an [App].
|
|
App({super.key});
|
|
|
|
/// The title of the app.
|
|
static const String title = 'GoRouter Example: Custom Error Screen';
|
|
|
|
@override
|
|
Widget build(BuildContext context) => MaterialApp.router(
|
|
routerConfig: _router,
|
|
title: title,
|
|
);
|
|
|
|
final GoRouter _router = GoRouter(
|
|
routes: <GoRoute>[
|
|
GoRoute(
|
|
path: '/',
|
|
builder: (BuildContext context, GoRouterState state) =>
|
|
const Page1Screen(),
|
|
),
|
|
GoRoute(
|
|
path: '/page2',
|
|
builder: (BuildContext context, GoRouterState state) =>
|
|
const Page2Screen(),
|
|
),
|
|
],
|
|
errorBuilder: (BuildContext context, GoRouterState state) =>
|
|
ErrorScreen(state.error!),
|
|
);
|
|
}
|
|
|
|
/// The screen of the first page.
|
|
class Page1Screen extends StatelessWidget {
|
|
/// Creates a [Page1Screen].
|
|
const Page1Screen({super.key});
|
|
|
|
@override
|
|
Widget build(BuildContext context) => Scaffold(
|
|
appBar: AppBar(title: const Text(App.title)),
|
|
body: Center(
|
|
child: Column(
|
|
mainAxisAlignment: MainAxisAlignment.center,
|
|
children: <Widget>[
|
|
ElevatedButton(
|
|
onPressed: () => context.go('/page2'),
|
|
child: const Text('Go to page 2'),
|
|
),
|
|
],
|
|
),
|
|
),
|
|
);
|
|
}
|
|
|
|
/// The screen of the second page.
|
|
class Page2Screen extends StatelessWidget {
|
|
/// Creates a [Page2Screen].
|
|
const Page2Screen({super.key});
|
|
|
|
@override
|
|
Widget build(BuildContext context) => Scaffold(
|
|
appBar: AppBar(title: const Text(App.title)),
|
|
body: Center(
|
|
child: Column(
|
|
mainAxisAlignment: MainAxisAlignment.center,
|
|
children: <Widget>[
|
|
ElevatedButton(
|
|
onPressed: () => context.go('/'),
|
|
child: const Text('Go to home page'),
|
|
),
|
|
],
|
|
),
|
|
),
|
|
);
|
|
}
|
|
|
|
/// The screen of the error page.
|
|
class ErrorScreen extends StatelessWidget {
|
|
/// Creates an [ErrorScreen].
|
|
const ErrorScreen(this.error, {super.key});
|
|
|
|
/// The error to display.
|
|
final Exception error;
|
|
|
|
@override
|
|
Widget build(BuildContext context) => Scaffold(
|
|
appBar: AppBar(title: const Text('My "Page Not Found" Screen')),
|
|
body: Center(
|
|
child: Column(
|
|
mainAxisAlignment: MainAxisAlignment.center,
|
|
children: <Widget>[
|
|
SelectableText(error.toString()),
|
|
TextButton(
|
|
onPressed: () => context.go('/'),
|
|
child: const Text('Home'),
|
|
),
|
|
],
|
|
),
|
|
),
|
|
);
|
|
}
|