LCOV - code coverage report
Current view: top level - lib - folly_fields.dart (source / functions) Hit Total Coverage
Test: Folly Fields Lines: 38 104 36.5 %
Date: 2023-05-12 13:54:58 Functions: 0 0 -

          Line data    Source code
       1             : // ignore_for_file: prefer-first
       2             : 
       3             : library folly_fields;
       4             : 
       5             : import 'dart:io';
       6             : 
       7             : import 'package:connectivity_plus/connectivity_plus.dart';
       8             : import 'package:flutter/foundation.dart';
       9             : import 'package:flutter/widgets.dart';
      10             : import 'package:folly_fields/responsive/responsive.dart';
      11             : 
      12             : ///
      13             : ///
      14             : ///
      15             : class FollyFields implements _InternalConfig {
      16           6 :   static final FollyFields _singleton = FollyFields._internal();
      17             : 
      18             :   ///
      19             :   ///
      20             :   ///
      21           2 :   static void start(
      22             :     AbstractConfig holder, {
      23             :     String modelIdKey = 'id',
      24             :     String modelUpdatedAtKey = 'updatedAt',
      25             :     String modelDeletedAtKey = 'deletedAt',
      26             :     List<double> responsiveSizes = const <double>[540, 720, 960, 1140],
      27             :     FollyDateParse? dateParseUpdate,
      28             :     FollyDateParse? dateParseDelete,
      29             :     Connectivity? connectivity,
      30             :   }) =>
      31           4 :       FollyFields()._holder = holder
      32           2 :         .._start(
      33             :           modelIdKey: modelIdKey,
      34             :           modelUpdatedAtKey: modelUpdatedAtKey,
      35             :           modelDeletedAtKey: modelDeletedAtKey,
      36             :           dateParseUpdate: dateParseUpdate,
      37             :           dateParseDelete: dateParseDelete,
      38             :           responsiveSizes: responsiveSizes,
      39             :           connectivity: connectivity,
      40             :         );
      41             : 
      42             :   late AbstractConfig _holder;
      43             : 
      44             :   ///
      45             :   ///
      46             :   ///
      47           2 :   factory FollyFields() {
      48           2 :     return _singleton;
      49             :   }
      50             : 
      51             :   ///
      52             :   ///
      53             :   ///
      54           2 :   FollyFields._internal();
      55             : 
      56             :   ///
      57             :   ///
      58             :   ///
      59           0 :   @override
      60           0 :   bool get isOffline => _holder.isOffline;
      61             : 
      62             :   ///
      63             :   ///
      64             :   ///
      65           0 :   @override
      66           0 :   bool get isOnline => _holder.isOnline;
      67             : 
      68             :   ///
      69             :   ///
      70             :   ///
      71           0 :   @override
      72           0 :   bool get isWeb => _holder.isWeb;
      73             : 
      74             :   ///
      75             :   ///
      76             :   ///
      77           0 :   @override
      78           0 :   bool get isNotWeb => _holder.isNotWeb;
      79             : 
      80             :   ///
      81             :   ///
      82             :   ///
      83           0 :   @override
      84           0 :   bool get isMobile => _holder.isMobile;
      85             : 
      86             :   ///
      87             :   ///
      88             :   ///
      89           0 :   @override
      90           0 :   bool get isNotMobile => _holder.isNotMobile;
      91             : 
      92             :   ///
      93             :   ///
      94             :   ///
      95           0 :   @override
      96           0 :   bool get isDesktop => _holder.isDesktop;
      97             : 
      98             :   ///
      99             :   ///
     100             :   ///
     101           0 :   @override
     102           0 :   bool get isNotDesktop => _holder.isNotDesktop;
     103             : 
     104             :   ///
     105             :   ///
     106             :   ///
     107           0 :   @override
     108           0 :   String get platform => _holder.platform;
     109             : 
     110             :   ///
     111             :   ///
     112             :   ///
     113           2 :   @override
     114           4 :   String get modelIdKey => _holder.modelIdKey;
     115             : 
     116             :   ///
     117             :   ///
     118             :   ///
     119           2 :   @override
     120           4 :   String get modelUpdatedAtKey => _holder.modelUpdatedAtKey;
     121             : 
     122             :   ///
     123             :   ///
     124             :   ///
     125           2 :   @override
     126           4 :   String get modelDeletedAtKey => _holder.modelDeletedAtKey;
     127             : 
     128             :   ///
     129             :   ///
     130             :   ///
     131           0 :   @override
     132           0 :   FollyDateParse? get dateParseUpdate => _holder.dateParseUpdate;
     133             : 
     134             :   ///
     135             :   ///
     136             :   ///
     137           0 :   @override
     138           0 :   FollyDateParse? get dateParseDelete => _holder.dateParseDelete;
     139             : 
     140             :   ///
     141             :   ///
     142             :   ///
     143           0 :   @override
     144           0 :   List<double> get responsiveSizes => _holder.responsiveSizes;
     145             : 
     146             :   ///
     147             :   ///
     148             :   ///
     149           0 :   ResponsiveSize checkResponsiveSize(BuildContext context) {
     150           0 :     double width = MediaQuery.of(context).size.width;
     151             : 
     152           0 :     if (width < responsiveSizes[0]) {
     153             :       return ResponsiveSize.extraSmall;
     154             :     }
     155             : 
     156           0 :     if (width >= responsiveSizes[0] && width < responsiveSizes[1]) {
     157             :       return ResponsiveSize.small;
     158             :     }
     159             : 
     160           0 :     if (width >= responsiveSizes[1] && width < responsiveSizes[2]) {
     161             :       return ResponsiveSize.medium;
     162             :     }
     163             : 
     164           0 :     if (width >= responsiveSizes[2] && width < responsiveSizes[3]) {
     165             :       return ResponsiveSize.large;
     166             :     }
     167             : 
     168             :     return ResponsiveSize.extraLarge;
     169             :   }
     170             : }
     171             : 
     172             : ///
     173             : ///
     174             : ///
     175             : enum RunningPlatform {
     176             :   unknown,
     177             :   web,
     178             :   android,
     179             :   ios,
     180             :   linux,
     181             :   windows,
     182             :   macos,
     183             :   fuchsia,
     184             : }
     185             : 
     186             : ///
     187             : ///
     188             : ///
     189             : extension RunningPlatformExt on RunningPlatform {
     190             :   ///
     191             :   ///
     192             :   ///
     193           0 :   String get name => toString().split('.').last.toLowerCase();
     194             : }
     195             : 
     196             : ///
     197             : ///
     198             : ///
     199             : typedef FollyDateParse = int? Function(dynamic value);
     200             : 
     201             : ///
     202             : ///
     203             : ///
     204             : abstract class _InternalConfig {
     205             :   ///
     206             :   ///
     207             :   ///
     208             :   bool get isOnline;
     209             : 
     210             :   ///
     211             :   ///
     212             :   ///
     213             :   bool get isOffline;
     214             : 
     215             :   ///
     216             :   ///
     217             :   ///
     218             :   bool get isWeb;
     219             : 
     220             :   ///
     221             :   ///
     222             :   ///
     223             :   bool get isNotWeb;
     224             : 
     225             :   ///
     226             :   ///
     227             :   ///
     228             :   bool get isMobile;
     229             : 
     230             :   ///
     231             :   ///
     232             :   ///
     233             :   bool get isNotMobile;
     234             : 
     235             :   ///
     236             :   ///
     237             :   ///
     238             :   bool get isDesktop;
     239             : 
     240             :   ///
     241             :   ///
     242             :   ///
     243             :   bool get isNotDesktop;
     244             : 
     245             :   ///
     246             :   ///
     247             :   ///
     248             :   String get platform;
     249             : 
     250             :   ///
     251             :   ///
     252             :   ///
     253             :   String get modelIdKey;
     254             : 
     255             :   ///
     256             :   ///
     257             :   ///
     258             :   String get modelUpdatedAtKey;
     259             : 
     260             :   ///
     261             :   ///
     262             :   ///
     263             :   String get modelDeletedAtKey;
     264             : 
     265             :   ///
     266             :   ///
     267             :   ///
     268             :   FollyDateParse? get dateParseUpdate;
     269             : 
     270             :   ///
     271             :   ///
     272             :   ///
     273             :   FollyDateParse? get dateParseDelete;
     274             : 
     275             :   ///
     276             :   ///
     277             :   ///
     278             :   List<double> get responsiveSizes;
     279             : }
     280             : 
     281             : ///
     282             : ///
     283             : ///
     284             : abstract class AbstractConfig implements _InternalConfig {
     285             :   bool _started = false;
     286             :   bool _online = false;
     287             :   RunningPlatform _platform = RunningPlatform.unknown;
     288             :   String _modelIdKey = 'id';
     289             :   String _modelUpdatedAtKey = 'updatedAt';
     290             :   String _modelDeletedAtKey = 'deletedAt';
     291             :   FollyDateParse? _dateParseUpdate;
     292             :   FollyDateParse? _dateParseDelete;
     293             :   List<double> _responsiveSizes = const <double>[540, 720, 960, 1140];
     294             : 
     295             :   ///
     296             :   ///
     297             :   ///
     298           0 :   @override
     299           0 :   bool get isOnline => _online;
     300             : 
     301             :   ///
     302             :   ///
     303             :   ///
     304           0 :   @override
     305           0 :   bool get isOffline => !_online;
     306             : 
     307             :   ///
     308             :   ///
     309             :   ///
     310           0 :   @override
     311           0 :   bool get isWeb => _platform == RunningPlatform.web;
     312             : 
     313             :   ///
     314             :   ///
     315             :   ///
     316           0 :   @override
     317           0 :   bool get isNotWeb => !isWeb;
     318             : 
     319             :   ///
     320             :   ///
     321             :   ///
     322           0 :   @override
     323             :   bool get isMobile =>
     324           0 :       _platform == RunningPlatform.android || _platform == RunningPlatform.ios;
     325             : 
     326             :   ///
     327             :   ///
     328             :   ///
     329           0 :   @override
     330           0 :   bool get isNotMobile => !isMobile;
     331             : 
     332             :   ///
     333             :   ///
     334             :   ///
     335           0 :   @override
     336           0 :   bool get isDesktop => !isWeb && !isMobile;
     337             : 
     338             :   ///
     339             :   ///
     340             :   ///
     341           0 :   @override
     342           0 :   bool get isNotDesktop => !isDesktop;
     343             : 
     344             :   ///
     345             :   ///
     346             :   ///
     347           0 :   @override
     348           0 :   String get platform => _platform.name;
     349             : 
     350             :   ///
     351             :   ///
     352             :   ///
     353           2 :   @override
     354           2 :   String get modelIdKey => _modelIdKey;
     355             : 
     356             :   ///
     357             :   ///
     358             :   ///
     359           2 :   @override
     360           2 :   String get modelUpdatedAtKey => _modelUpdatedAtKey;
     361             : 
     362             :   ///
     363             :   ///
     364             :   ///
     365           2 :   @override
     366           2 :   String get modelDeletedAtKey => _modelDeletedAtKey;
     367             : 
     368             :   ///
     369             :   ///
     370             :   ///
     371           0 :   @override
     372           0 :   FollyDateParse? get dateParseUpdate => _dateParseUpdate;
     373             : 
     374             :   ///
     375             :   ///
     376             :   ///
     377           0 :   @override
     378           0 :   FollyDateParse? get dateParseDelete => _dateParseDelete;
     379             : 
     380             :   ///
     381             :   ///
     382             :   ///
     383           0 :   @override
     384           0 :   List<double> get responsiveSizes => _responsiveSizes;
     385             : 
     386             :   ///
     387             :   ///
     388             :   ///
     389           2 :   Future<void> _start({
     390             :     required String modelIdKey,
     391             :     required String modelUpdatedAtKey,
     392             :     required String modelDeletedAtKey,
     393             :     required List<double> responsiveSizes,
     394             :     FollyDateParse? dateParseUpdate,
     395             :     FollyDateParse? dateParseDelete,
     396             :     Connectivity? connectivity,
     397             :   }) async {
     398           2 :     if (_started) {
     399             :       if (kDebugMode) {
     400           0 :         print('Folly Fields already started, ignoring...');
     401             :       }
     402             :     } else {
     403           2 :       _started = true;
     404             :       if (kDebugMode) {
     405           2 :         print('Folly Fields Started.');
     406             :       }
     407             : 
     408           2 :       _modelIdKey = modelIdKey;
     409           2 :       _modelUpdatedAtKey = modelUpdatedAtKey;
     410           2 :       _modelDeletedAtKey = modelDeletedAtKey;
     411             : 
     412           2 :       _dateParseUpdate = dateParseUpdate;
     413           2 :       _dateParseDelete = dateParseDelete;
     414             : 
     415           2 :       _responsiveSizes = responsiveSizes;
     416             : 
     417             :       if (kIsWeb) {
     418           0 :         _platform = RunningPlatform.web;
     419           2 :       } else if (Platform.isAndroid) {
     420           0 :         _platform = RunningPlatform.android;
     421           2 :       } else if (Platform.isIOS) {
     422           0 :         _platform = RunningPlatform.ios;
     423           2 :       } else if (Platform.isLinux) {
     424           2 :         _platform = RunningPlatform.linux;
     425           0 :       } else if (Platform.isWindows) {
     426           0 :         _platform = RunningPlatform.windows;
     427           0 :       } else if (Platform.isMacOS) {
     428           0 :         _platform = RunningPlatform.macos;
     429           0 :       } else if (Platform.isFuchsia) {
     430           0 :         _platform = RunningPlatform.fuchsia;
     431             :       }
     432             : 
     433           0 :       connectivity ??= Connectivity();
     434             : 
     435           2 :       ConnectivityResult result = await connectivity.checkConnectivity();
     436             : 
     437           4 :       _online = result != ConnectivityResult.none;
     438             : 
     439           6 :       connectivity.onConnectivityChanged.listen((ConnectivityResult result) {
     440           4 :         _online = result != ConnectivityResult.none;
     441             :         if (kDebugMode) {
     442           6 :           print('Connectivity Changed: $_online');
     443             :         }
     444             :       });
     445             :     }
     446             :   }
     447             : }

Generated by: LCOV version 1.14