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 : /// Creates a [BeamerProvider] with specified properties. 28 : /// 29 : /// [routerDelegate] is required because it is the object to provide down the tree. 30 2 : const BeamerProvider({ 31 : Key? key, 32 : required this.routerDelegate, 33 : required Widget child, 34 2 : }) : super(key: key, child: child); 35 : 36 : /// Responsible for beaming, updating and rebuilding the page stack. 37 : final BeamerDelegate routerDelegate; 38 : 39 : /// Obtain the nearest [BeamerProvider]. 40 : /// 41 : /// See [BuildContext.dependOnInheritedWidgetOfExactType]. 42 1 : static BeamerProvider? of(BuildContext context) => 43 1 : context.dependOnInheritedWidgetOfExactType<BeamerProvider>(); 44 : 45 1 : @override 46 : bool updateShouldNotify(covariant InheritedWidget oldWidget) => false; 47 : }