beamer 1.3.0 beamer: ^1.3.0 copied to clipboard
A routing package that lets you navigate through guarded page stacks and URLs using the Router and Navigator's Pages API, aka "Navigator 2.0".
import 'package:beamer/beamer.dart';
import 'package:flutter/material.dart';
void main() {
runApp(MyApp());
}
final guardCheck = ValueNotifier<bool>(true);
class MyApp extends StatefulWidget {
@override
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
@override
Widget build(BuildContext context) {
return MaterialApp.router(
routeInformationParser: BeamerParser(),
routerDelegate: BeamerDelegate(
initialPath: '/foo',
locationBuilder: RoutesLocationBuilder(
routes: <Pattern, dynamic Function(BuildContext, BeamState, Object?)>{
'/foo': (_, __, ___) => const FooScreen(),
'/bar': (_, __, ___) {
return const BarScreen();
},
},
),
guards: <BeamGuard>[
BeamGuard(
pathPatterns: <Pattern>['/bar'],
check: (_, __) => guardCheck.value,
beamToNamed: (_, __) => '/foo',
),
],
updateListenable: guardCheck,
),
);
}
}
class FooScreen extends StatelessWidget {
const FooScreen();
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Foo'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Container(
height: 200,
child: ElevatedButton(
child: Text('Go to Bar'),
onPressed: () => Beamer.of(context).beamToNamed('/bar'),
),
),
],
),
),
);
}
}
class BarScreen extends StatelessWidget {
const BarScreen();
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Bar'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Container(
height: 200,
child: ElevatedButton(
child: Text('update'),
onPressed: () => guardCheck.value = false,
),
),
],
),
),
);
}
}