9
This commit is contained in:
110
lib/13/go/others/error_screen.dart
Normal file
110
lib/13/go/others/error_screen.dart
Normal file
@@ -0,0 +1,110 @@
|
||||
// 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'),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
Reference in New Issue
Block a user