pub package

Note: This library seamlessly functions across all platforms, ensuring compatibility without any issues.


utilities

  1. Opens a file picker dialog allowing the user to select an image file, optionally crop it, and then perform actions based on user interaction.

    cPickAndCropImage(
        context,
        cropDisable: false,
        aspectRatio: 1.7,
        cancelButton: () {
            setState(() {
                croppedImg = null;
            });
            Navigator.of(context).pop();
        },
        okButton: (Uint8List data, String fileName) {
            /// selected file name
            debugPrint(fileName);
            setState(() {
                croppedImg = data;
                /// Load image to ui using 'Image.memory(croppedImg)'
            });
            Navigator.of(context).pop();
        },
    ),
    
  2. get device id in all available devices platform (android, ios, windows, linux, mac, web(get info details))

     await cGetDeviceId()
    
  3. Takes a screenshot of a widget using a **GlobalKey** and returns it as a **Uint8List** (PNG image).

     cTakePicture(GlobalKey);
     // wrap with RepaintBoundary then use key to create image
     RepaintBoundary(
         key: GlobalKey,
         child:Text('data'),
     )
    
  4. flutter platform

    just call these functions anywhere

     cIsAndroid
     cIsIOS
     cIsLinux
     cIsWindows
     cIsMacOS
     cIsWeb
     cIsFuchsia
    
  5. flutter url structure

    https://repad.dev/splash remove hash from url (https://repad.dev/#/splash)

    void main(){
        // Here we set the URL strategy for our web app.
        cSetPathUrl();
        runApp(MyApp());
    }
    

for-GridView

Make a responsive gridView by using both 1 and 2

provide discardSize to minus size from calculation

  1. Based on your static design's width, calculate the responsive grid item count.

    crossAxisCount: cGetResCrossCountGrid(
        context: context,
        width: 180,
    ),
    
  2. For responsive grid item aspect ratio, it should be derived from your static design based on height and width.

    childAspectRatio: cGetResGridRatio(
        context: context,
        height: 165,
        width: 180,
    ),
    
  3. For normal grid aspect ratio > Having this aspect ratio will never break in larger or smaller devices

    crossAxisCount: 2,
    childAspectRatio: cGetGridRatio(
        crossAxisCount: 2,
        context: context,
        height: 165,
        width: 180,
    ),
    

    Your provided height and width determine how it works


for-GridView

    cFormUrlEncode({'':''});

for-duration, delay

  1. For duration and delay

        void splash() {
            // cDays, cHours, cMinutes, cSeconds, cMilliseconds
            2.cSeconds.cDelay(() {
                // code here
            });
    
            // given number in seconds
            3.cDelay(() {
                // code here
            });
        }
    

for-date time

  1. An extension for nullable `TimeOfDay` objects, providing a method to convert them to a formatted string in AM/PM format or display 'Invalid date' if the `TimeOfDay` object is null.

    cTimeOfDayToString()

    TimeOfDay? timeOfDay = TimeOfDay(hour: 14, minute: 30);
    String formattedTime = timeOfDay.cTimeOfDayToString();
    print(formattedTime); // Output: "2:30 PM"
    
    timeOfDay = null;
    formattedTime = timeOfDay.cTimeOfDayToString();
    print(formattedTime); // Output: "Invalid date"
    
  2. This method attempts to parse the input string in both 12-hour and 24-hour time formats and returns a `TimeOfDay` object if parsing is successful, or null if the string cannot be parsed as a valid time.

    cToTimeOfDay()

    String timeString = "2:30 PM";
    TimeOfDay? timeOfDay = timeString.cToTimeOfDay();
    
    if (timeOfDay != null) {
        print("Parsed time: $timeOfDay");
    } else {
        print("Invalid time format");
    }
    
  3. This method combines the date part of the current `DateTime` instance with the hour and minute components from the provided `time`.

    cApplied()

    final date = DateTime.now();
    final time = TimeOfDay(hour: 15, minute: 30);
    final combinedDateTime = date.cApplied(time);
    print(combinedDateTime); // Output: 2023-09-15:30:00.000
    
  4. Optionally, you can provide a custom `format` string to specify the desired date format. If `format` is not provided, the default format dd/MM/yyyy will be used.

    cGetFormattedDate()

    final date = DateTime.now();
    final formattedDate = date.cGetFormattedDate(format: 'MM-dd-yyyy');
    print(formattedDate); // Output: 09-13-2023
    

    OR

    String date = '2023-09-13';
    String formattedDate = date.cGetFormattedDate(format: 'MMMM d, y');
    // Result: 'September 13, 2023'
    
  5. This method calculates the difference between the current `DateTime` instance and the current date and time and provides an aging description.

    cDateToAging()

    final pastDate = DateTime(2022, 3, 10);
    final agingString = pastDate.cDateToAging();
    print(agingString); // Output: "1 year ago"
    

    OR

    String date = '2023-08-01T12:34:56';
    String agingDescription = date.cDateToAging();
    // Result: '1 month ago'
    
  6. Converts a string representation of a date and time into a `DateTime` object.

    cGetDateFromString()

    // Example date and time string
    String dateString = "2023-09-26 14:30:00";
    // Attempt to parse the date string into a DateTime object
    DateTime? dateTime = dateString.cGetDateFromString();
    // Check if parsing was successful
    if (dateTime != null) {
     print("Parsed DateTime: $dateTime");
    } else {
     print("Failed to parse the string as DateTime.");
    }
    

for-MediaQuery

  1. Get the MediaQuery
context.cIsTablet
context.cSize    // getSize(context)
context.cMQuery  // mQuery(context)
context.cWidth
context.cHeight
context.cTheme
context.cIsDarkMode
context.cIconColor
context.cTextTheme
context.cOrient   // orientation
context.cIsLand   // landscape
context.cIsPort   // portrait
context.cDevicePixelRatio

more-Utils

  1. utils

    'text'.cToCapitalized
    'text'.cToTitleCase
    'text'.cIsLowerCase
    'text'.cIsAllCap
    'text'.cReverse
    'text'.cIsDigit
    'text'.cIsEmail
    'text'.cIsAlphabetOnly
    'text'.cIsPhoneIND
    'text'.cIsURL
    'text'.cIsPhoneNumber
    'true'.cToBoolean  // 0,1 also available
    '1000'.cToCurrencyIND // ₹ 1,000.00
    '1000'.cToCurrency() // ₹ 1,000
     000.0.cToDistance  // (00 km, 00 m available)
     000.0.cToWeight  // (00 g, 00 kg available)
    
  2. cGetOffer()

     String offer = cGetOffer(offerPrice: 90,ordinalPrice: 100); // 10 %
    
  3. buildString()

     final word = cBuildString((sb) {
         for (var i = 0; i < 10; i++) {
             sb.write(i);
         }
     });  // 0123456789
    

for-list

  1. Get Random item from list

    ['aa', 'bb', 'cc', 'dd'].cRandomSelect.toString()
    
  2. Get first item from list (if list is empty then result will be null)

    ['aa', 'bb', 'cc', 'dd'].cFirst
    ['aa', 'bb', 'cc', 'dd'].cFirstWhere((e)=>(type your condition here)))
    

for-color

  1. This extension provides a method to convert a Flutter Color object to its hexadecimal representation with an optional leading hash sign. The resulting hexadecimal string includes the alpha, red, green, and blue components of the color.

    final color = Color(0xFF42A5F5);
    final hexString = color.cToHex(); // Returns: "#FF42A5F5"
    
  2. This extension provides a method to convert a hexadecimal color code represented as a String into a Flutter Color object. The color code can optionally include a leading hash sign ('#'). If the input color code has 6 or 7 characters (with or without the hash sign), the method will assume it represents a color with an alpha component and append 'ff' to the color code to make it fully opaque.

    final colorCode = '#FF42A5F5';
    final color = colorCode.cToColor(); // Returns: Color(0xFF42A5F5)
    

for-widget

  1. Allows you to handle (padding/margin)

    Text('data').cPadZero // cMargZero
    Text('data').cPadAll(10) // cMargAll
    Text('data').cPadOnly(l: 10, r: 10, t: 10, b: 10,) // cMargOnly
    Text('data').cPadSymmetric(h: 10, v: 10,), // cMargSymmetric
    
  2. Allows you to handle ClipRRect

    Container().cClipAll(10)
    Container().cClipHorizontal(l:10, r:10,)
    Container().cClipVertical(t:10, b:10,)
    Container().cClipOnly(tl: 10, tr: 10, bl: 10, br: 10,)
    
  3. Allows you to insert widgets inside a CustomScrollView

    Text('data').cToSliver
    
  4. More widgets

    Text('data').cVisible(true)
    Text('data').cOpacity(0.3)
    Text('data').cAbsorb(true)
    Text('data').cShadow()
    Text('data').cHero(tag)
    Text('data').cSizedBox(h:10,w:10)
    
  5. Allows you to handle Alignment

    Text('data').cAlignment(Alignment.topCenter)
    Text('data').cPosition(l: 10, r: 10, t: 10, b: 10,)
    Text('data').cToCenter
    Text('data').cExpand(2)
    
  6. For PreferredSize

    Text('data').cPreferSize(20)
    Text('data').cAspectRatio(1.2)
    
  7. A set of extensions on the base Widget class to add custom banner functionality.

    Widget myWidget = ...;
    Widget bannerWidget = myWidget.cBanner(
        disable: false,
        location: BannerLocation.topStart,
        message: 'Custom Banner',
        color: Colors.red
    );
    

Contributers

Alt