9
This commit is contained in:
102
lib/13/go/others/state_restoration.dart
Normal file
102
lib/13/go/others/state_restoration.dart
Normal file
@@ -0,0 +1,102 @@
|
||||
// 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<App> createState() => _AppState();
|
||||
}
|
||||
|
||||
class _AppState extends State<App> 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: <GoRoute>[
|
||||
// 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: <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'),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
Reference in New Issue
Block a user