LCOV - code coverage report
Current view: top level - src/state - get_state.dart (source / functions) Hit Total Coverage
Test: lcov.info Lines: 59 60 98.3 %
Date: 2020-06-11 02:57:29 Functions: 0 0 -

          Line data    Source code
       1             : import 'package:flutter/material.dart';
       2             : import 'package:flutter/widgets.dart';
       3             : import 'package:get/src/root/smart_management.dart';
       4             : import 'package:get/src/rx/rx_interface.dart';
       5             : import '../get_main.dart';
       6             : 
       7             : class GetController extends DisposableInterface {
       8             :   List<RealState> _allStates = [];
       9             : 
      10             :   @override
      11           5 :   void onInit() async {}
      12             : 
      13             :   @override
      14           5 :   void onReady() async {}
      15             : 
      16             :   @override
      17           5 :   void onClose() async {}
      18             : 
      19             :   /// Update GetBuilder with update();
      20           1 :   void update([List<String> ids, bool condition = true]) {
      21             :     if (!condition) return;
      22             : 
      23             :     if (ids == null) {
      24           3 :       _allStates.forEach((rs) {
      25           3 :         rs.updater(() {});
      26             :       });
      27             :     } else {
      28           1 :       ids.forEach(
      29           1 :         (s) {
      30           3 :           _allStates.forEach((rs) {
      31           5 :             if (rs.id == s) rs.updater(() {});
      32             :           });
      33             :         },
      34             :       );
      35             :     }
      36             :   }
      37             : }
      38             : 
      39             : class GetBuilder<T extends GetController> extends StatefulWidget {
      40             :   @required
      41             :   final Widget Function(T) builder;
      42             :   final bool global;
      43             :   final String id;
      44             :   final bool autoRemove;
      45             :   final bool assignId;
      46             :   final void Function(State state) initState, dispose, didChangeDependencies;
      47             :   final void Function(GetBuilder oldWidget, State state) didUpdateWidget;
      48             :   final T init;
      49           5 :   const GetBuilder({
      50             :     Key key,
      51             :     this.init,
      52             :     this.global = true,
      53             :     this.builder,
      54             :     this.autoRemove = true,
      55             :     this.assignId = false,
      56             :     this.initState,
      57             :     this.dispose,
      58             :     this.id,
      59             :     this.didChangeDependencies,
      60             :     this.didUpdateWidget,
      61           1 :   })  : assert(builder != null),
      62           5 :         super(key: key);
      63           5 :   @override
      64           5 :   _GetBuilderState<T> createState() => _GetBuilderState<T>();
      65             : }
      66             : 
      67             : class _GetBuilderState<T extends GetController> extends State<GetBuilder<T>> {
      68             :   T controller;
      69             :   RealState real;
      70             :   bool isCreator = false;
      71           5 :   @override
      72             :   void initState() {
      73           5 :     super.initState();
      74             : 
      75          10 :     if (widget.global) {
      76           5 :       bool isPrepared = Get.isPrepared<T>();
      77           5 :       bool isRegistred = Get.isRegistred<T>();
      78             : 
      79             :       if (isPrepared) {
      80           3 :         if (Get().smartManagement != SmartManagement.keepFactory) {
      81           1 :           isCreator = true;
      82             :         }
      83           2 :         controller = Get.find<T>();
      84           5 :         real = RealState(updater: setState, id: widget.id);
      85           4 :         controller._allStates.add(real);
      86             :       } else if (isRegistred) {
      87           2 :         controller = Get.find<T>();
      88           1 :         isCreator = false;
      89           5 :         real = RealState(updater: setState, id: widget.id);
      90           4 :         controller._allStates.add(real);
      91             :       } else {
      92          15 :         controller = widget.init;
      93           5 :         isCreator = true;
      94          25 :         real = RealState(updater: setState, id: widget.id);
      95          20 :         controller._allStates.add(real);
      96          10 :         Get.put<T>(controller);
      97             :       }
      98             :     } else {
      99           3 :       controller = widget.init;
     100           1 :       isCreator = true;
     101           5 :       real = RealState(updater: setState, id: widget.id);
     102           4 :       controller._allStates.add(real);
     103           2 :       controller?.onStart();
     104             :     }
     105          19 :     if (widget.initState != null) widget.initState(this);
     106          20 :     if (isCreator && Get().smartManagement == SmartManagement.onlyBuilder) {
     107           0 :       controller?.onStart();
     108             :     }
     109             :   }
     110             : 
     111           5 :   @override
     112             :   void dispose() {
     113           5 :     super.dispose();
     114          19 :     if (widget.dispose != null) widget.dispose(this);
     115           7 :     if (isCreator || widget.assignId) {
     116          15 :       if (widget.autoRemove && Get.isRegistred<T>()) {
     117          20 :         controller._allStates.remove(real);
     118           5 :         Get.delete<T>();
     119             :       }
     120             :     } else {
     121           4 :       controller._allStates.remove(real);
     122             :     }
     123             :   }
     124             : 
     125           5 :   @override
     126             :   void didChangeDependencies() {
     127           5 :     super.didChangeDependencies();
     128          10 :     if (widget.didChangeDependencies != null)
     129           3 :       widget.didChangeDependencies(this);
     130             :   }
     131             : 
     132           2 :   @override
     133             :   void didUpdateWidget(GetBuilder oldWidget) {
     134           2 :     super.didUpdateWidget(oldWidget);
     135           4 :     if (widget.didUpdateWidget != null) widget.didUpdateWidget(oldWidget, this);
     136             :   }
     137             : 
     138           5 :   @override
     139             :   Widget build(BuildContext context) {
     140          20 :     return widget.builder(controller);
     141             :   }
     142             : }
     143             : 
     144             : typedef ShouldRebuild<T> = bool Function(T previous, T next);
     145             : 
     146             : class RealState {
     147             :   final StateSetter updater;
     148             :   final String id;
     149           5 :   const RealState({this.updater, this.id});
     150             : }

Generated by: LCOV version 1.14