Flutter package to parse iCalendar (.ics) files.

Overview

icalendar_parser

Pub Version Stars Dart Issues Coverage Status

Package to parse iCalendar (.ics) files written in pure Dart.

Implementation of AnyFetch's ics-parser in JavaScript.

Getting Started

Add icalendar_parser to your pubspec.yaml:

icalendar_parser: any

How to use

You can refer to the example/ folder for a complete example implemented in Flutter.

Constructor

ICalendar.fromString

import 'package:flutter/services.dart' show rootBundle;
import 'package:icalendar_parser/icalendar_parser.dart';

final icsString = await rootBundle.loadString('assets/your_file.ics');
final iCalendar = ICalendar.fromString(icsString);

ICalendar.fromLines

final icsLines = await File('your_file.ics').readAsLines();
final iCalendar = ICalendar.fromLines(lines);

Other methods

ICalendar.registerField

With this method you can add fields that are not already supported (check Supported Properties) to the parsing and you can specify a custom function to parse its content :

ICalendar.registerField(field: 'TEST');

ICalendar.registerField(
    field: 'TEST2',
    function: (value, params, event, lastEvent) {
        lastEvent['test2'] = 'test';
        return lastEvent;
    },
);

ICalendar.unregisterField

With this method you can remove parsed fields to ignore them in your file :

ICalendar.unregisterField('TEST');

ICalendar.toJson

Convert [ICalendar] object to a Map<String, dynamic> containing all its data, formatted into a valid JSON Map<String, dynamic> .

final icsObj = ICalendar.fromLines(File('assets/my_file.ics').readAsLinesSync());
print(jsonEncode(icsObj.toJson()));

Input

BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//hacksw/handcal//NONSGML v1.0//EN
CALSCALE:GREGORIAN
METHOD:PUBLISH
BEGIN:VEVENT
UID:[email protected]
DTSTAMP:19970714T170000Z
ORGANIZER;CN=John Doe:MAILTO:[email protected]
DTSTART:19970714T170000Z
DTEND:19970715T035959Z
SUMMARY:Bastille Day Party
GEO:48.85299;2.36885
END:VEVENT
END:VCALENDAR

Output

{
   "version":"2.0",
   "prodid":"-//hacksw/handcal//NONSGML v1.0//EN",
   "calscale":"GREGORIAN",
   "method":"PUBLISH",
   "data":[
      {
         "type":"VEVENT",
         "uid":"[email protected]",
         "dtstamp":"1997-07-14T17:00:00.000Z",
         "organizer":{
            "name":"John Doe",
            "mail":"[email protected]"
         },
         "dtstart":"1997-07-14T17:00:00.000Z",
         "dtend":"1997-07-15T03:59:59.000Z",
         "summary":"Bastille Day Party",
         "geo":{
            "latitude":48.85299,
            "longitude":2.36885
         }
      }
   ]
}

Supported Properties

  • VERSION
  • PRODID
  • CALSCALE
  • METHOD
  • COMPONENT: BEGIN
  • COMPONENT: END
  • DTSTART
  • DTEND
  • DTSTAMP
  • TRIGGER
  • LAST-MODIFIED
  • COMPLETED
  • DUE
  • UID
  • SUMMARY
  • DESCRIPTION
  • LOCATION
  • URL
  • ORGANIZER
  • GEO
  • CATEGORIES
  • ATTENDEE
  • ACTION
  • STATUS
  • SEQUENCE
  • REPEAT
  • RRULE
Comments
  • Issue with Multiline Descriptions

    Issue with Multiline Descriptions

    BEGIN:VCALENDAR
    METHOD:PUBLISH
    PRODID:-//Moodle Pty Ltd//NONSGML Moodle Version 2020061501//EN
    VERSION:2.0
    BEGIN:VEVENT
    UID:[email protected]
    SUMMARY:200925 - Einfache Schlange (Warteschlange Freizeitpark) ist fällig.
    DESCRIPTION:Bearbeitet im Net-Schulbuch auf der Seite "baab_aufgaben" die A
    	ufgabe 3.\n\nLadet eure Lösungen als zip-Datei hier hoch.\n\n
    	
    CLASS:PUBLIC
    LAST-MODIFIED:20201009T103237Z
    DTSTAMP:20201023T110413Z
    DTSTART:20201005T080000Z
    DTEND:20201005T080000Z
    CATEGORIES:Q1_GK IF 1_Kock
    END:VEVENT
    BEGIN:VEVENT
    UID:[email protected]
    SUMMARY:Testaufgabe ist fällig.
    DESCRIPTION:Agrobusiness - Lösung des Welternährungsproblems\n\n
    CLASS:PUBLIC
    LAST-MODIFIED:20201006T201443Z
    DTSTAMP:20201023T110413Z
    DTSTART:20201005T220000Z
    DTEND:20201005T220000Z
    CATEGORIES:Q1_LK_EK1_Muel
    END:VEVENT
    BEGIN:VEVENT
    UID:[email protected]
    SUMMARY:Verschiedene Übungen als Vorbereitung auf die anstehende Klausur zu
    	m Thema "sprachliche Varietäten" ist fällig.
    	
    DESCRIPTION:1. Stelle alle Positionen zum Thema "Kiezdeutsch" in einer ausf
    	ührlichen Tabelle zusammen zusammen.\n\n2. Schreibt Definitionen für die Sp
    	rachvarietäten "Dialekt" und "Soziolekt.\n\n3. Stellt tabellarisch die Vor-
    	 und Nachteile des Sprechens von Dialekten dar.\n\n4. Schreibt die Merkmale
    	 von Dialekt\, Kiezdeutsch sowie Jugendsprache auf. Beachtet dabei auch Gra
    	mmatik\, Semantik und Phonetik.\n\n
    	
    CLASS:PUBLIC
    LAST-MODIFIED:20201023T084557Z
    DTSTAMP:20201023T110413Z
    DTSTART:20201006T220000Z
    DTEND:20201006T220000Z
    CATEGORIES:Q1_GK D_Hölv
    END:VEVENT
    BEGIN:VEVENT
    UID:[email protected]
    SUMMARY:Tasks to the topic of GB ist fällig.
    DESCRIPTION:1. Send me your lectures (Referate bitte einstellen).\n\n2. Cho
    	ose one character from the movie we are going to watch soon. give reasons w
    	hy you have decided to write about this character\, why or why not you like
    	 it. Write about his/ her situation and the way he oder she is dealing with
    	 the arising conflicts. You should additionally comment on the character an
    	d maybe suggest ways that could support the character. Feel free to utter y
    	our feelings\, questions or to add criticism on some kind of behaviour\, fo
    	r example.\n\n
    	
    CLASS:PUBLIC
    LAST-MODIFIED:20201023T092950Z
    DTSTAMP:20201023T110413Z
    DTSTART:20201006T220000Z
    DTEND:20201006T220000Z
    CATEGORIES:Q1_GK E2_Hölv
    END:VEVENT
    BEGIN:VEVENT
    UID:[email protected]
    SUMMARY:Testaufgabe ist fällig.
    DESCRIPTION:Hallo zusammen\,\n\nhier kommt eine Testaufgabe für euch! Bitte
    	 fotografiert eine Steckdose und sendet mir das Foto über Logineo zu.\n\nHe
    	rzliche Grüße\n\nvon Frau Haase\n\n
    	
    CLASS:PUBLIC
    LAST-MODIFIED:20200930T181945Z
    DTSTAMP:20201023T110413Z
    DTSTART:20201007T140000Z
    DTEND:20201007T140000Z
    CATEGORIES:Q1_GK_Physik_Haase
    END:VEVENT
    BEGIN:VEVENT
    UID:[email protected]
    SUMMARY:201009 - Generische Queue (Musikwuensche) ist fällig.
    DESCRIPTION:Liebe Schülerinnen und Schüler\,\n\nbearbeitet im Net-Schulbuch
    	 auf der Seite baab_aufgabe2 die Aufgaben 1 und 2. Für Aufgabe 2 verwendet 
    	die Datei im Anhang.\n\nDiese müsst ihr herunterladen und "extrahieren". Sp
    	eichert sie beim Extrahieren in einem geeigneten Verzeichnis.\n\nHinweis: A
    	uf der Seite baab_queue findet ihr eine Erklärung zur generischen Schlange.
    	\n
    	
    CLASS:PUBLIC
    LAST-MODIFIED:20201009T103223Z
    DTSTAMP:20201023T110413Z
    DTSTART:20201011T210000Z
    DTEND:20201011T210000Z
    CATEGORIES:Q1_GK IF 1_Kock
    END:VEVENT
    END:VCALENDAR
    

    This is my full .ics and as you can see the descriptions are multiline strings but after parsing only the first line (the one after DESCRIPTION:) is stored.

    bug 
    opened by phibr0 7
  • Date is not correctly parsed

    Date is not correctly parsed

    Hi!

    DTSTART;TZID=Europe/Berlin:20210607T090000

    is being parsed as

    DateTime:<2021-10-31 01:00:00.000Z>

    As you can see the date and time is incorrectly parsed. :-( I think using "DateTime.parse(text)" is not enough.

    opened by dg76 5
  • Google Calendar ical `EXDATE not correctly parsed

    Google Calendar ical `EXDATE not correctly parsed

    Google Calendar's implementation of EXDATE does not follow the specification. Instead of comma-separated datetimes, each EXDATE is written to a new line.

    Therefore only the last EXDATE is in the parsed object.

    Example:

    BEGIN:VEVENT
    DTSTART;TZID=Europe/Berlin:20221205T000000
    DTEND;TZID=Europe/Berlin:20221205T020000
    RRULE:FREQ=DAILY
    EXDATE;TZID=Europe/Berlin:20221210T000000
    EXDATE;TZID=Europe/Berlin:20221208T000000
    DTSTAMP:20221206T203724Z
    UID:[email protected]
    CREATED:20221206T102926Z
    LAST-MODIFIED:20221206T102926Z
    LOCATION:
    SEQUENCE:0
    STATUS:CONFIRMED
    SUMMARY:Just a quick summary
    TRANSP:OPAQUE
    END:VEVENT
    
    bug 
    opened by Fix007 3
  • Exception on `ORGANIZER` field parsing

    Exception on `ORGANIZER` field parsing

    There is an issue with parsing ICS containing partial ORGANIZER field (with no email specified):

    BEGIN:VCALENDAR
    VERSION:2.0
    CALSCALE:GREGORIAN
    BEGIN:VEVENT
    UID:ac6d76d2-deb8-421d-86c6-670c06d5cd8c
    SUMMARY:Cool event
    DTSTAMP:20211004T074300Z
    DTSTART:20211006T063000Z
    DTEND:20211006T073000Z
    DESCRIPTION:Some description
    ORGANIZER;CN=Joe Jackson
    END:VEVENT
    END:VCALENDAR
    

    Produces following exception:

    type 'String' is not a subtype of type 'List<String>' of 'other'
    

    at

    #1      ICalendar.fromListToJson (package:icalendar_parser/src/model/icalendar.dart:253:35)
    
    bug 
    opened by Toshik 3
  • Error while parsing I Calendar

    Error while parsing I Calendar

    Hello, first of all this is probably the wrong place but I'm quite new, so im Sorry. I really need to parse an .ics File for my Project but for some reason it doesn't work, also your package is the only one which seems to be capable of doing that.

    My understanding is that the Method getEvents() should return a List of CalendarItem's, but it always gives the following error. Also here is my .ics file (I needed to rename it .txt just change the file extension icalexport.txt ).

    My Code:

    import 'package:flutter/services.dart' show rootBundle;
    import 'package:icalendar_parser/icalendar_parser.dart';
    
    Future getData() async {
      final icsString = await rootBundle.loadString('assets/icalexport.ics');
      final iCalendar = ICalendar.fromString(icsString);
      print(iCalendar);
      return iCalendar;
    }
    
    Future getEvents() async {
      ICalendar iCalendar = await getData();
      List<CalendarItem> items;
    
      for (var item in iCalendar.data) {
        items.add(CalendarItem.fromJson(item));
      }
      print(items);
      return items;
    }
    
    class CalendarItem {
      final String type;
      final String uid;
      final String name;
      final String description;
      final String categories;
    
      CalendarItem({
        this.type,
        this.uid,
        this.name,
        this.description,
        this.categories,
      });
    
      factory CalendarItem.fromJson(Map<String, dynamic> json) {
        return CalendarItem(
          type: json['type'] as String ?? 'empty',
          uid: json['uid'] as String ?? 'empty',
          name: json['name'] as String ?? 'empty',
          description: json['description'] as String ?? 'empty',
          categories: json['categorie'] as String ?? 'empty',
        );
      }
    }
    

    Error Message:

    E/flutter ( 9628): [ERROR:flutter/lib/ui/ui_dart_state.cc(177)] Unhandled Exception: NoSuchMethodError: The method 'add' was called on null.
    E/flutter ( 9628): Receiver: null
    E/flutter ( 9628): Tried calling: add(Instance of 'CalendarItem')
    
    bug 
    opened by phibr0 3
  • Export ics_datetime.dart

    Export ics_datetime.dart

    By exporting IcsDateTime, it gets included in documentation and users can use it as a type in their code. It also allows IDEs to auto-complete code such as icsDateTime.toDateTime().

    opened by Levi-Lesches 2
  • Error while loading in new .ics File!

    Error while loading in new .ics File!

    Many auto generated .ics Files end with an empty line under the END:VCALENDAR, but this package throws an error saying the file doesnt end with an END:VCALENDAR Statement. If i find some time in the near future i will propably open a Pull Request fixing this issue.

    enhancement 
    opened by phibr0 2
  • Bump coverage from 1.2.0 to 1.6.1

    Bump coverage from 1.2.0 to 1.6.1

    ⚠️ Dependabot is rebasing this PR ⚠️

    Rebasing might not happen immediately, so don't worry if this takes some time.

    Note: if you make any changes to this PR yourself, they will take precedence over the rebase.


    Bumps coverage from 1.2.0 to 1.6.1.

    Changelog

    Sourced from coverage's changelog.

    1.6.1

    • Handle SentinelExceptions thrown by vm_service.

    1.6.0

    • Update to vm_service 9.4.0.
    • Use IsolateRef.isolateGroupId to speed up coverage collection.
    • Ignore uncoverable abstract methods.
    • Fix bug where 'ingore-line' comments etc are applied even if they're inside string literals.
    • Change the LICENSE file to the standard Dart BSD license.

    1.5.0

    • Support passing extra arguments to test_with_coverage which are then passed to package:test.

      Example: dart run coverage:test_with_coverage -- --preset CI

    1.4.0

    • Added HitMap.parseJsonSync which takes a cache of ignored lines which can speedup calls when checkIgnoredLines is true and the function is called several times with overlapping files in the input json.
    • Bump the version of vm_service to 9.0.0.

    1.3.2

    • Fix test_with_coverage listening to an unsupported signal on windows.
    • Fix --reportOn on windows using incorrect path separators.

    1.3.1

    • Fix running dart pub global run coverage:test_with_coverage or dart run coverage:test_with_coverage

    1.3.0

    • Bump the minimum Dart SDK version to 2.15.0
    • Add a --package flag, which takes the package's root directory, instead of the .package file. Deprecate the --packages flag.
    • Deprecate the packagesPath parameter and add packagePath instead, in HitMap.parseJson, HitMap.parseFiles, createHitmap, and parseCoverage.
    • Add a new executable to the package, test_with_coverage. This simplifies the most common use case of coverage, running all the tests for a package, and generating an lcov.info file.
    • Use the libraryFilters option in getSourceReport to speed up coverage runs that use scopedOutput.
    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies 
    opened by dependabot[bot] 1
  • Bump lint from 1.10.0 to 2.0.1

    Bump lint from 1.10.0 to 2.0.1

    Bumps lint from 1.10.0 to 2.0.1.

    Changelog

    Sourced from lint's changelog.

    2.0.1

    • Update changelog

    2.0.0

    Requires Dart sdk: '>=2.18.0'

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies 
    opened by dependabot[bot] 0
  • Bump test from 1.20.2 to 1.22.0

    Bump test from 1.20.2 to 1.22.0

    Bumps test from 1.20.2 to 1.22.0.

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies 
    opened by dependabot[bot] 0
  • Bump collection from 1.16.0 to 1.17.0

    Bump collection from 1.16.0 to 1.17.0

    Bumps collection from 1.16.0 to 1.17.0.

    Changelog

    Sourced from collection's changelog.

    1.17.0

    • Add Iterable.elementAtOrNull and List.elementAtOrNull extension methods.
    • Add a top-level lastBy() function that converts an Iterable to a Map by grouping its elements using a function, keeping the last element for each computed key. Also available as an extension method on Iterable.
    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies 
    opened by dependabot[bot] 0
  • Bump test from 1.22.0 to 1.22.1

    Bump test from 1.22.0 to 1.22.1

    Bumps test from 1.22.0 to 1.22.1.

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies 
    opened by dependabot[bot] 0
Releases(1.1.0)
Owner
Guillaume Roux
Flutter Software Engineer. I like to make some personal projects and post them on Github and Gitlab.
Guillaume Roux
A Dart library to parse Portable Executable (PE) format

pefile A Dart library to parse Portable Executable (PE) format Usage A simple usage example: var pe = pefile.parse('C:\\Windows\\System32\\notepad.exe

null 4 Sep 12, 2022
Parse and compose Magnet URI extension (BEP53) ranges.

bep53-range Parse and compose Magnet URI extension (BEP53) ranges. Dart port of https://github.com/webtorrent/bep53-range Usage parse Parse Magnet URI

Chiziaruhoma Ogbonda 2 Feb 7, 2022
Parse cron string to schedule and generate previous or next schedule item

Parse cron string to schedule and generate previous or next schedule item

Pokhodyun Alexander 2 Apr 17, 2022
null 2 Apr 17, 2022
A cli tool to run Flutter applications and auto hot reload it when files are changed

Dashmon A minimalistic CLI tool to run Flutter applications and auto hot reload it when files are changed. It will watch changes your application code

Erick 31 Oct 6, 2022
A CLI for syncing Dart dependency versions between pubspec.yaml and pubspec.lock files.

lockpick A CLI for syncing Dart dependency versions between pubspec.yaml and pubspec.lock files. ?? Usage # Activate lockpick pub global activate lock

Jeroen Meijer (Jay) 34 Oct 17, 2022
A set of commands for coverage info files manipulation.

Coverage Utils A set of commands for coverage info files manipulation. Installing $ dart pub global activate

Karlo Verde 22 Oct 9, 2022
A generator to create config class from json files that support many environments

A generator to create config class from json files that support many environments. Motivation If you use a json file to config your applications, perp

Diego Cardenas 0 Oct 9, 2021
A CLI tool to help batch renaming files.

batch_rename A CLI tool to enable batch renaming of files. Installation Clone the repo and add bin/batch_rename.exe to PATH: gh repo clone POWRFULCOW8

Diego Domínguez Melo 0 Nov 3, 2021
A package that lets you include a cool, nice looking and validated Password TextFormField in your app to enhance user experience. The package is fully & easily modifiable.

A package that lets you include a cool, nice looking and validated Password TextFormField in your app to enhance user experience. The package is fully

Muhammad Hamza 20 Jun 7, 2022
A Dart package which supports checking if a current package is up-to-date.

pub_updater A Dart package which enables checking whether packages are up to date and supports updating them. Intended for use in CLIs for prompting u

Very Good Open Source 47 Oct 27, 2022
A flutter package with classes to help testing applications using the canvas

Canvas test helpers MockCanvas is a utility class for writing tests for canvas operations. It supports the same API as the regular Canvas class from d

Blue Fire 12 Jan 31, 2022
A flutter package allows you to search all universities in Brazil

Universities This package allows you to search all universities in Brazil. Usage To use this plugin, add universities as a dependency in your pubspec.

Gabriel Patrick Souza 2 Oct 24, 2021
A flutter package that allows you to transform your excel to json

excel_to_json A package that allows you to transform your excel to the following format: Excel To JSON Getting Started At current the package allows y

Vitor Amaral de Melo 0 Nov 7, 2022
Flutter package to help you lazily load and display pages of items as the user scrolls down your screen.

Flutter package to help you lazily load and display pages of items as the user scrolls down your screen.

Edson Bueno 425 Dec 13, 2022
A flutter package provides controllers and editors for complex models and lists

This package provides controllers and editors for complex models and lists and is inspired by simplicity of TextEditingController. It encapsulates sta

null 2 Sep 1, 2022
Pub Release is a package to assist in publishing dart/flutter packages to pub.dev.

description Pub Release is a package that automates publishing dart/flutter packages to pub.dev. README Pub Release is a package that automates publis

Noojee I.T. Pty Ltd 16 Oct 13, 2022
A simple package to help does handler with countries in Flutter

It's a simple package to help does handler with countries in [Dart] language and [Flutter] Framework. Usage Countries class Can access all countries s

Leonardo Rosa 1 Feb 20, 2022