Line data Source code
1 : import 'package:beamer/src/beamer_delegate.dart'; 2 : import 'package:flutter/widgets.dart'; 3 : 4 : /// Provides [BeamerDelegate] to the `*App.router` Widget. 5 : /// 6 : /// This is useful when using `builder` in the `*App.router` widget. 7 : /// Then, if using Beamer the regular way, `Beamer.of(context)` will not exist. 8 : /// The way to solve it is by using `BeamerProvider` above `*App.router`: 9 : /// 10 : /// ```dart 11 : /// final _routerDelegate = BeamerDelegate(...); 12 : /// 13 : /// @override 14 : /// Widget build(BuildContext context) { 15 : /// return BeamerProvider( 16 : /// routerDelegate: _routerDelegate 17 : /// child: MaterialApp.router( 18 : /// routerDelegate: _routerDelegate, 19 : /// routeInformationParser: BeamerParser(...), 20 : /// ... 21 : /// ) 22 : /// ); 23 : /// } 24 : /// 25 : /// ``` 26 : class BeamerProvider extends InheritedWidget { 27 1 : BeamerProvider({ 28 : Key? key, 29 : required this.routerDelegate, 30 : required Widget child, 31 1 : }) : super(key: key, child: child); 32 : 33 : /// Responsible for beaming, updating and rebuilding the page stack. 34 : final BeamerDelegate routerDelegate; 35 : 36 1 : static BeamerProvider? of(BuildContext context) => 37 1 : context.dependOnInheritedWidgetOfExactType<BeamerProvider>(); 38 : 39 0 : @override 40 : bool updateShouldNotify(covariant InheritedWidget oldWidget) => false; 41 : }