|
@@ -0,0 +1,97 @@
|
|
|
+// 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';
|
|
|
+
|
|
|
+/// This sample app shows an app with two screens.
|
|
|
+///
|
|
|
+/// The first route '/' is mapped to [HomeScreen], and the second route
|
|
|
+/// '/details' is mapped to [DetailsScreen].
|
|
|
+///
|
|
|
+/// The buttons use context.go() to navigate to each destination. On mobile
|
|
|
+/// devices, each destination is deep-linkable and on the web, can be navigated
|
|
|
+/// to using the address bar.
|
|
|
+void main() => runApp(const MyApp());
|
|
|
+
|
|
|
+/// The route configuration.
|
|
|
+final GoRouter _router = GoRouter(
|
|
|
+ routes: <RouteBase>[
|
|
|
+ GoRoute(
|
|
|
+ path: '/',
|
|
|
+ builder: (BuildContext context, GoRouterState state) {
|
|
|
+ return const HomeScreen();
|
|
|
+ },
|
|
|
+ routes: <RouteBase>[
|
|
|
+ GoRoute(
|
|
|
+ path: 'details',
|
|
|
+ builder: (BuildContext context, GoRouterState state) {
|
|
|
+ return const DetailsScreen();
|
|
|
+ },
|
|
|
+ ),
|
|
|
+ ],
|
|
|
+ ),
|
|
|
+ ],
|
|
|
+);
|
|
|
+
|
|
|
+/// The main app.
|
|
|
+class MyApp extends StatelessWidget {
|
|
|
+ /// Constructs a [MyApp]
|
|
|
+ const MyApp({Key? key}) : super(key: key);
|
|
|
+
|
|
|
+ @override
|
|
|
+ Widget build(BuildContext context) {
|
|
|
+ return MaterialApp.router(
|
|
|
+ routerConfig: _router,
|
|
|
+ );
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+/// The home screen
|
|
|
+class HomeScreen extends StatelessWidget {
|
|
|
+ /// Constructs a [HomeScreen]
|
|
|
+ const HomeScreen({Key? key}) : super(key: key);
|
|
|
+
|
|
|
+ @override
|
|
|
+ Widget build(BuildContext context) {
|
|
|
+ return Scaffold(
|
|
|
+ appBar: AppBar(title: const Text('Home Screen')),
|
|
|
+ body: Center(
|
|
|
+ child: Column(
|
|
|
+ mainAxisAlignment: MainAxisAlignment.center,
|
|
|
+ children: <Widget>[
|
|
|
+ ElevatedButton(
|
|
|
+ onPressed: () => context.go('/details'),
|
|
|
+ child: const Text('Go to the Details screen'),
|
|
|
+ ),
|
|
|
+ ],
|
|
|
+ ),
|
|
|
+ ),
|
|
|
+ );
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+/// The details screen
|
|
|
+class DetailsScreen extends StatelessWidget {
|
|
|
+ /// Constructs a [DetailsScreen]
|
|
|
+ const DetailsScreen({Key? key}) : super(key: key);
|
|
|
+
|
|
|
+ @override
|
|
|
+ Widget build(BuildContext context) {
|
|
|
+ return Scaffold(
|
|
|
+ appBar: AppBar(title: const Text('Details Screen')),
|
|
|
+ body: Center(
|
|
|
+ child: Column(
|
|
|
+ mainAxisAlignment: MainAxisAlignment.center,
|
|
|
+ children: <ElevatedButton>[
|
|
|
+ ElevatedButton(
|
|
|
+ onPressed: () => context.go('/'),
|
|
|
+ child: const Text('Go back to the Home screen'),
|
|
|
+ ),
|
|
|
+ ],
|
|
|
+ ),
|
|
|
+ ),
|
|
|
+ );
|
|
|
+ }
|
|
|
+}
|