LCOV - code coverage report
Current view: top level - src - page_with_arguments.dart (source / functions) Hit Total Coverage
Test: lcov.info Lines: 22 22 100.0 %
Date: 2022-11-04 14:47:16 Functions: 0 0 -

          Line data    Source code
       1             : import 'package:flutter/widgets.dart'
       2             :     show
       3             :         BuildContext,
       4             :         Key,
       5             :         ModalRoute,
       6             :         RouteSettings,
       7             :         State,
       8             :         StatefulWidget,
       9             :         Widget;
      10             : 
      11             : /// A simple Widget with a callback useful to set arguments for one SimpleProvider or a StateProvider
      12             : /// ```dart
      13             : /// PageWithArguments(
      14             : ///   onReady: (RouteSettings settings) {
      15             : ///     final arguments = settings.arguments;
      16             : ///     tabsProvider.setArguments(arguments);
      17             : ///   },
      18             : ///   child: TabsPage(),
      19             : /// );
      20             : /// ```
      21             : class PageWithArguments extends StatefulWidget {
      22             :   // ignore: public_member_api_docs
      23           1 :   const PageWithArguments({
      24             :     Key? key,
      25             :     required this.onReady,
      26             :     required this.builder,
      27           1 :   }) : super(key: key);
      28             : 
      29             :   /// callback that must return the widget child of this PageWithArguments
      30             :   final Widget Function(BuildContext context) builder;
      31             : 
      32             :   /// callback that contains the current route `settings`, you can use this callback
      33             :   /// to get the `arguments` for one route with our rebuild when
      34             :   /// pushNamedAndRemoveUntil or  pushAndRemoveUntil are called.
      35             :   final void Function(RouteSettings settings) onReady;
      36             : 
      37           1 :   @override
      38           1 :   _PageWithArgumentsState createState() => _PageWithArgumentsState();
      39             : }
      40             : 
      41             : class _PageWithArgumentsState extends State<PageWithArguments> {
      42             :   bool _ready = false;
      43             : 
      44           1 :   @override
      45             :   void didChangeDependencies() {
      46           1 :     super.didChangeDependencies();
      47           1 :     if (!_ready) {
      48           6 :       widget.onReady(ModalRoute.of(context)!.settings);
      49           1 :       _ready = true;
      50             :     }
      51             :   }
      52             : 
      53           1 :   @override
      54             :   Widget build(BuildContext context) {
      55           3 :     return widget.builder(context);
      56             :   }
      57             : }
      58             : 
      59             : /// uses this class to create a page and define the arguments for a SimpleProvider or a StateProvider
      60             : ///
      61             : /// ``` dart
      62             : /// import 'package:flutter/material.dart';
      63             : /// import 'package:flutter_meedu/meedu.dart';
      64             : /// import 'package:flutter_meedu/page.dart';
      65             : ///
      66             : /// final loginProvider = SimpleProvider(
      67             : ///   (ref) => LoginController(ref.arguments),
      68             : /// );
      69             : ///
      70             : /// class LoginPage extends PageWithArgumentsWidget {
      71             : ///   const LoginPage({Key? key}) : super(key: key);
      72             : ///
      73             : ///   @override
      74             : ///   void onInit(RouteSettings settings) {
      75             : ///     /// you can use settings to get data passed as an argument
      76             : ///     /// using Navigator.pushName(context,'rpute-name', arguments: data);
      77             : ///     loginProvider.setArguments(settings.arguments);
      78             : ///   }
      79             : ///
      80             : ///   @override
      81             : ///   Widget build(BuildContext context) {
      82             : ///     return Scaffold(
      83             : ///       .
      84             : ///       .
      85             : ///       .
      86             : ///     );
      87             : ///   }
      88             : /// }
      89             : /// ```
      90             : abstract class PageWithArgumentsWidget extends StatefulWidget {
      91             :   // ignore: public_member_api_docs
      92           1 :   const PageWithArgumentsWidget({
      93             :     Key? key,
      94           1 :   }) : super(key: key);
      95             : 
      96             :   /// this method will be called once before render the widget
      97             :   /// and can be used to get the arguments or settings
      98             :   /// of the current route
      99             :   void onInit(RouteSettings settings);
     100             : 
     101             :   // ignore: public_member_api_docs
     102             :   Widget build(BuildContext context);
     103             : 
     104           1 :   @override
     105             :   _PageWithArgumentsWidgetState createState() =>
     106           1 :       _PageWithArgumentsWidgetState();
     107             : }
     108             : 
     109             : class _PageWithArgumentsWidgetState extends State<PageWithArgumentsWidget> {
     110             :   bool _ready = false;
     111             : 
     112           1 :   @override
     113             :   void didChangeDependencies() {
     114           1 :     super.didChangeDependencies();
     115           1 :     if (!_ready) {
     116           5 :       widget.onInit(ModalRoute.of(context)!.settings);
     117           1 :       _ready = true;
     118             :     }
     119             :   }
     120             : 
     121           1 :   @override
     122             :   Widget build(BuildContext context) {
     123           2 :     return widget.build(context);
     124             :   }
     125             : }

Generated by: LCOV version 1.16