// 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( const RootRestorationScope(restorationId: 'root', child: App()), ); /// The main app. class App extends StatefulWidget { /// Creates an [App]. const App({super.key}); /// The title of the app. static const String title = 'GoRouter Example: State Restoration'; @override State createState() => _AppState(); } class _AppState extends State with RestorationMixin { @override String get restorationId => 'wrapper'; @override void restoreState(RestorationBucket? oldBucket, bool initialRestore) { // Implement restoreState for your app } @override Widget build(BuildContext context) => MaterialApp.router( routerConfig: _router, title: App.title, restorationScopeId: 'app', ); final GoRouter _router = GoRouter( routes: [ // restorationId set for the route automatically GoRoute( path: '/', builder: (BuildContext context, GoRouterState state) => const Page1Screen(), ), // restorationId set for the route automatically GoRoute( path: '/page2', builder: (BuildContext context, GoRouterState state) => const Page2Screen(), ), ], restorationScopeId: 'router', ); } /// 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: [ 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: [ ElevatedButton( onPressed: () => context.go('/'), child: const Text('Go to home page'), ), ], ), ), ); }