Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/simc/awesome-flutter-packages

A curated list of awesome Flutter packages.
https://github.com/simc/awesome-flutter-packages

List: awesome-flutter-packages

android awesome dart flutter ios

Last synced: 3 months ago
JSON representation

A curated list of awesome Flutter packages.

Awesome Lists containing this project

README

        

# List of Awesome Flutter Packages
[![Awesome](https://cdn.rawgit.com/sindresorhus/awesome/d7305f38d29fed78fa85652e3a63e154dd8e8829/media/badge.svg)](https://github.com/leisim/awesome-flutter-packages) [![Travis](https://travis-ci.com/leisim/awesome-flutter-packages.svg?branch=master)](https://travis-ci.com/leisim/awesome-flutter-packages)

A curated list πŸ“„ of awesome 🌟 Flutter packages. These are some of the most valuable gems πŸ’Ž of the Flutter community.

Is your favourite 😍 package missing? Let me know or create a pull request...

*Please read the [contribution guidelines](CONTRIBUTING.md) before opening a pull request* πŸ‘

## Index
- [Widgets](#Widgets)
- [Animations](#Animations)
- [Images](#Images)
- [Swipe & Slide](#Swipe--Slide)
- [Dialogs & Pickers](#Dialogs--Pickers)
- [Input & Forms](#Input--Forms)
- [Device](#Device)
- [Networking](#Networking)
- [Bluetooth & Wifi](#Bluetooth--Wifi)
- [Utils](#Utils)
- [Frameworks & Design Patterns](#Frameworks--Design-Patterns)
- [Audio & Video](#Audio--Video)
- [Files](#Files)
- [Persistance](#Persistance)
- [Logging & Error Handling](#Logging--Error-Handling)


# Widgets

WebView for Flutter (Flutter Team) v0.3.9+1

A Flutter plugin that provides a WebView widget on Android and iOS.

On iOS the WebView widget is backed by a `WKWebView`; On Android the WebView widget is backed by a `WebView`.

---

auto_size_text v2.0.1

Flutter widget that automatically resizes text to fit perfectly within its bounds.

---

Splash Screen v1.2.0

Easy to use splash screen package.

---

Flutter Sticky Headers v0.1.8

Lets you place headers on scrollable content that will stick to the top of the container whilst the content is scrolled.

---

Flutter Speed Dial v1.2.1

Flutter plugin to implement a beautiful and dynamic Material Design Speed Dial, with labels, animated icons and hide on scrolling.

![](images/flutter_speed_dial1.gif)

---

FancyBottomNavigation v0.3.2

An animated Bottom Navigation Bar for Flutter apps, icon animates into place, colors are customisable.

![](images/fancy_bottom_navigation1.gif)

---

Flutter Platform Widgets v0.10.0

Simplifying the use of both Material and Cupertino widgets with a single widget.

```dart
PlatformWidget(
ios: (_) => Icon(CupertinoIcons.flag),
android: (_) => Icon(Icons.flag),
);
```

```dart
PlatformButton(
onPressed: () => print('send'),
child: PlatformText('Send'),
);
```

```dart
PlatformAlertDialog(
title: Text('Alert'),
content: Text('Some content'),
actions: [
PlatformDialogAction(),
PlatformDialogAction(),
],
);
```
etc.

---

Liquid Pull To Refresh v1.1.1

A beautiful and custom refresh indicator with some cool animations and transitions for flutter.

![](images/liquid_pull_to_refresh1.gif)

---

flutter_tags v0.3.1

Flutter tags let you create a list of tags or insert them dynamically with the input.

![](images/flutter_tags1.gif)

---

BubbleBottomBar v1.2.0

BubbleBottomBar is a Flutter widget designed by cubertodesign and developed by westdabestdb.

![](images/bubble_bottom_bar1.gif)

---

folding_cell v0.1.2

Simple folding cell widget implemented in Flutter. Its a widget so add it to any container widget as a child.

![](images/folding_cell1.gif)

---

Fluid Slider v1.0.0

A fluid design slider that works just like the Slider material widget.

![](images/flutter_fluid_slider1.gif)

---

snaplist v0.1.8

Small cozy library that allows you to make snappable list views.

![](images/snaplist1.gif)

---

Zefyr v0.5.0

Clean, minimalistic and collaboration-ready rich text editor for Flutter.

![](images/zefyr1.png)

---

Infinite ListView v1.0.0

ListView with items that can be scrolled infinitely in both directions.

![](images/infinite_listview1.gif)

---

Draggable Scrollbar v0.0.4

A scrollbar that can be dragged for quickly navigating through a vertical list. Additionally it can show a label next to the scrollthumb with information about the current item.

![](images/draggable_scrollbar1.gif)

---

Passcode Lock Screen v1.0.1

A platform agnostic Flutter package for showing passcode input screen, similar to Native iOS. Screen customizable with a colors, sizes, fonts etc.

![](images/passcode_screen1.png)

---

ProgressButton v0.0.2

A Material Flutter Button that supports progress and error visuals.

---

stepper_touch v0.0.1

A Flutter stepper widget with nice aniamtion.

![](images/stepper_touch1.gif)

---

flutter_staggered_grid_view v0.3.0

A Flutter staggered grid view which supports multiple columns with rows of varying sizes.

![](images/flutter_staggered_grid_view1.png)


# Animations

✨Flutter Spinkit v3.1.0

A collection of loading indicators animated with flutter.

![](images/flutter_spinkit1.gif)

---

Shimmer v1.0.0

A package provides an easy way to add shimmer effect in Flutter project.

![](images/shimmer1.gif)

---

Flutter Page Transition Package v1.1.0

This package gives you beautiful page transitions.

![](images/page_transition1.gif)

---

Animated Text Kit v1.3.1

A flutter package project which contains a collection of cool and beautiful text animations.






---

flutter_sequence_animation v3.0.1

Composite together any animation with this robust and simple to use package.




---

flip_card v0.3.0

A component that provides flip card animation. It could be used for hide and show details of a product.




---

Wave v0.0.8

Widget for displaying waves with custom color, duration, floating and blur effects.

![](images/wave1.gif)

---

spritewidget v0.9.18

SpriteWidget is a toolkit for building complex, high performance animations and 2D games with Flutter. Your sprite render tree lives inside a widget that mixes seamlessly with other Flutter and Material widgets. You can use SpriteWidget to create anything from an animated icon to a full fledged game.

---

flutter_villains v1.2.0

Page transitions with just a few lines of code. What are heroes without villains?

---

fluttie: Lottie for flutter v0.3.2

Fluttie allows you to easily display stunning Lottie animations in flutter.

![](images/fluttie1.gif)

---

Hidden Drawer Menu v1.0.1

Hidden Drawer Menu is a library for adding a beautiful drawer mode menu feature with perspective animation.

![](images/hidden_drawer_menu1.gif)

---

flip_panel v1.0.0

A package for flip panel with built-in animation.




---

drawing_animation v0.1.1

An dart-only library for gradually painting SVG path objects on canvas (drawing line animation).

![](images/drawing_animation1.gif)

---

WaveProgress v0.0.1

A custom wave progress widget.

![](images/wave_progress_widget1.gif)

---

Path Morph v1.0.1

This package lets you create path tween animations. In other words, it lets you morph one path into another.

![](images/path_morph1.gif)

---

Text to Path Maker v0.5.7

Tis is a pure Flutter and Dart package that allows you to convert text (both characters and icons) into paths and animate them.

![](images/text_to_path_maker1.gif)

---

flame v0.12.0

A minimalist Flutter game engine, provides a nice set of somewhat independent modules you can choose from.

```dart
import 'package:flame/components/component.dart';

Sprite sprite = new Sprite('player.png');

const size = 128.0;
final player = new SpriteComponent.fromSprite(size, size, sprite); // width, height, sprite

player.x = ... // 0 by default
player.y = ... // 0 by default
player.angle = ... // 0 by default

// on your render method...
player.render(canvas);
```


# Images

Image Picker (Flutter Team) v0.6.0+9

A Flutter plugin for iOS and Android for picking images from the image library, and taking new pictures with the camera.

---

CachedNetworkImage v0.8.0

A flutter library to show images from the internet and keep them in the cache directory.

```dart
CachedNetworkImage(
imageUrl: "http://via.placeholder.com/350x150",
placeholder: (context, url) => CircularProgressIndicator(),
errorWidget: (context, url, error) => Icon(Icons.error),
)
```

---

image v2.1.4

Provides server and web apps the ability to load, manipulate, and save images with various image file formats including PNG, JPEG, GIF, WebP, TIFF, TGA, PSD, PVR, and OpenEXR.

```dart
Image image = decodeImage(Io.File('test.webp').readAsBytesSync());

// Resize the image to a 120x? thumbnail (maintaining the aspect ratio).
Image thumbnail = copyResize(image, 120);

// Save the thumbnail as a PNG.
Io.File('thumbnail.png')
..writeAsBytesSync(encodePng(thumbnail));
```

---

Image Cropper v1.0.2

A Flutter plugin for Android and iOS supports cropping images.




---

Flutter Advanced Network Image v0.4.15

An advanced image provider provides caching and retrying for flutter app. Now with zoomable widget and transition to image widget

```dart
Image(
image: AdvancedNetworkImage(
url,
header: header,
useDiskCache: true,
cacheRule: CacheRule(maxAge: const Duration(days: 7)),
),
fit: BoxFit.cover,
)
```

---

flutter_image_compress v0.5.2

Compress images with native code (objc kotlin), it's faster. This package supports Android and iOS.

```dart
var result = await FlutterImageCompress.compressWithFile(
file.absolute.path,
minWidth: 2300,
minHeight: 1500,
quality: 94,
rotate: 90,
);
```

---

Flutter Multi Image Picker v4.3.3

Flutter plugin that allows you to display multi image picker on iOS and Android.

![](images/multi_image_picker1.png)

---

Material Design Icons v3.2.3695

The Material Design Icons from the community for Flutter.

---

Image Cropping plugin v0.3.0


A flutter plugin to crop image on iOS and Android. It processes image files off main thread natively. The plugin provides a Crop widget to display image cropping to a user.




---

flutter_svg v0.13.0+2

An SVG rendering and widget library for Flutter, which allows painting and displaying Scalable Vector Graphics 1.1 files.

```dart
final String assetName = 'assets/image.svg';
final Widget svg = new SvgPicture.asset(
assetName,
semanticsLabel: 'Acme Logo'
);
```

---

Flutter Photo View v0.4.0

A simple zoomable image widget for Flutter.

Resolves a image provider and shows the result with useful gestures support, such as pinch to zoom and pan.


# Swipe & Slide

flutter_swiper v1.1.6

The best swiper for flutter, with multiple layouts, infinite loop. Compatible with Android & iOS.

---

carousel_slider v1.3.0

A carousel slider widget, support infinite scroll and custom child widget, with auto play feature.

---

flutter_slidable v0.5.3

A Flutter implementation of slidable list item with directional slide actions that can be dismissed.

![](images/flutter_slidable1.gif)

---

intro_slider v2.2.1

A plugin to help you make intro slider screen to show the major features of your app. You can change the image, button, text style, color, and more things.

---

intro_views_flutter v2.6.0

A Flutter package for simple material design app intro screens with some cool animations.

![](images/intro_views_flutter1.gif)

---

Rubber v0.3.2

Rubber is an elastic bottom sheet widget with the customizable material spring animation.

![](images/rubber1.gif)

---

smooth_star_rating v1.0.3

A Star rating with touch and swipe rate enabled
- Supports half rate and full rate (1.0 or 0.5)
- Swipe for incrementing/decrementing rate amount
- Change star body and boundary colors independently

![](images/smooth_star_rating1.gif)

---

Flushbar v1.7.0

A flexible widget for user notification. Customize your text, button, duration, animations and much more. For Android devs, it is made to replace Snackbars and Toasts.

![](images/flushbar1.gif)


# Dialogs & Pickers

file_picker v1.3.5

A plugin that allows you to pick absolute paths from different file types.

![](images/file_picker1.gif)

---

modal_progress_hud v0.1.3

A modal progress indicator widget (HUD = heads-up display). Wrap around another widget to block access to widget during an async call. Also accepts a custom spinner.

![](images/modal_progress_hud1.gif)

---

NumberPicker v1.0.0

`NumberPicker` is a custom widget designed for choosing an integer or decimal number by scrolling spinners.

It is possible to use `NumberPicker` as a standalone widget as well as in `NumberPickerDialog`.

![](images/numberpicker1.gif)

---

country_pickers v1.1.0

Countries, codes, flags and several ways of picking them at your service...




---

progress_dialog v1.1.0+1

A light weight library to easily manage a progress dialog with simple steps whenever you need to do it. You can easily show and hide it.

![](images/progress_dialog1.gif)

---

Date Range Picker v1.0.6

Date Range Pickers use a dialog window to select a range of date on mobile.

![](images/date_range_picker1.gif)


# Input & Forms

Flutter TypeAhead v1.6.1

A highly customizable typeahead (autocomplete) text input field.

![](images/flutter_typeahead1.gif)

---

flutter_form_builder v3.2.0

Package to build Material Form with components such as TextField (With number, url, email validation), DropDown, TypeAhead, Radios, Checkboxes

```dart
FormBuilder(
context,
autovalidate: true,
controls: [
FormBuilderInput.textField(
type: FormBuilderInput.TYPE_TEXT,
attribute: "name",
label: "Name",
require: true,
min: 3,
),
FormBuilderInput.password(
attribute: "password",
label: "Password",
//require: true,
),
],
onChanged: () {
print("Form Changed");
},
onSubmit: (formValue) {
if (formValue != null) {
print(formValue);
} else {
print("Form invalid");
}
},
),
```

---

stripe_payment v0.1.0

A flutter plugin to integrate the stripe plugin for iOS and Android. Currently only adding a credit card as source is implemented.




---

Email validator v1.0.0

A simple (but correct) dart class for validating email addresses.

```dart
var email = "[email protected]";

assert(EmailValidator.validate(email) == true);
```


# Device

package_info (Flutter Team) v0.4.0+4

Flutter plugin for querying information about the application package, such as CFBundleVersion on iOS or versionCode on Android.

```dart
import 'package:package_info/package_info.dart';

PackageInfo packageInfo = await PackageInfo.fromPlatform();

String appName = packageInfo.appName;
String packageName = packageInfo.packageName;
String version = packageInfo.version;
String buildNumber = packageInfo.buildNumber;
```

---

device_info (Flutter Team) v0.4.0+2

Flutter plugin providing detailed information about the device (make, model, etc.), and Android or iOS version the app is running on.

```dart
import 'package:device_info/device_info.dart';

DeviceInfoPlugin deviceInfo = DeviceInfoPlugin();
AndroidDeviceInfo androidInfo = await deviceInfo.androidInfo;
print('Running on ${androidInfo.model}'); // e.g. "Moto G (4)"

IosDeviceInfo iosInfo = await deviceInfo.iosInfo;
print('Running on ${iosInfo.utsname.machine}'); // e.g. "iPod7,1"
```

---

share (Flutter Team) v0.6.1+1

Flutter plugin for sharing content via the platform share UI, using the ACTION_SEND intent on Android and UIActivityViewController on iOS.

```dart
import 'package:share/share.dart';
Share.share('check out my website https://example.com');
```

---

Flutter Geolocator v5.0.0

Geolocation plugin for Flutter. This plugin provides a cross-platform (iOS, Android) API for generic location (GPS etc.) functions.

```dart
import 'package:geolocator/geolocator.dart';

Position position = await Geolocator().getCurrentPosition(desiredAccuracy: LocationAccuracy.high);
```

---

contacts_service v0.2.7

A Flutter plugin to retrieve and manage contacts on Android and iOS devices.

```dart
import 'package:contacts_service/contacts_service.dart';

// Get all contacts
Iterable contacts = await ContactsService.getContacts();

// Get contacts matching a string
Iterable johns = await ContactsService.getContacts(query : "john");

await ContactsService.addContact(newContact);
await ContactsService.deleteContact(contact);
```

---

Screen v0.0.5

A Flutter plugin to manage the device's screen on Android and iOS.

```dart
import 'package:screen/screen.dart';

// Get the current brightness:
double brightness = await Screen.brightness;

// Set the brightness:
Screen.setBrightness(0.5);

// Check if the screen is kept on:
bool isKeptOn = await Screen.isKeptOn;

// Prevent screen from going into sleep mode:
Screen.keepOn(true);
```

---

battery v0.3.0+3

Flutter plugin for accessing information about the battery state (full, charging, discharging) on Android and iOS.

```dart
import 'package:battery/battery.dart';

var battery = Battery();
print(battery.batteryLevel); // Access current battery level

// Be informed when the state (full, charging, discharging) changes
_battery.onBatteryStateChanged.listen((BatteryState state) {
// Do something with new state
});
```


# Networking

http (Flutter Team) v0.12.0+2

A composable, cross-platform, Future-based API for making HTTP requests.

```dart
import 'package:http/http.dart' as http;

http.read("http://example.com/foobar.txt").then(print);
```

---

url_launcher (Flutter Team) v5.0.3

Flutter plugin for launching a URL on Android and iOS. Supports web, phone, SMS, and email schemes.

```dart
import 'package:url_launcher/url_launcher.dart';

const url = 'https://flutter.io';
if (await canLaunch(url)) {
await launch(url);
} else {
throw 'Could not launch $url';
}
```

---

dio v2.1.7

A powerful Http client for Dart, which supports Interceptors, FormData, Request Cancellation, File Downloading, Timeout etc.

```dart
import 'package:dio/dio.dart';
void getHttp() async {
try {
Response response = await Dio().get("http://www.google.com");
return print(response);
} catch (e) {
return print(e);
}
}
```

---

Flutter Downloader v1.1.7

A plugin for creating and managing download tasks. Supports iOS and Android.

This plugin is based on `WorkManager` in Android and `NSURLSessionDownloadTask` in iOS to run download task in background mode.

```dart
final taskId = await FlutterDownloader.enqueue(
url: 'your download link',
savedDir: 'the path of directory where you want to save downloaded files',
showNotification: true, // show download progress in status bar (for Android)
openFileFromNotification: true, // click on notification to open downloaded file (for Android)
);

FlutterDownloader.registerCallback((id, status, progress) {
// code to update your UI
});
```


# Bluetooth & Wifi

connectivity (Flutter Team) v0.4.3+2

This plugin allows Flutter apps to discover network connectivity and configure themselves accordingly. It can distinguish between cellular vs WiFi connection. This plugin works for iOS and Android.

```dart
import 'package:connectivity/connectivity.dart';

var connectivityResult = await (Connectivity().checkConnectivity());
if (connectivityResult == ConnectivityResult.mobile) {
// I am connected to a mobile network.
} else if (connectivityResult == ConnectivityResult.wifi) {
// I am connected to a wifi network.
}
```

---

flutter_offline v0.2.4+1

A tidy utility to handle offline/online connectivity like a Boss. It provides support for both iOS and Android platforms.

```dart
OfflineBuilder(
connectivityBuilder: (
BuildContext context,
ConnectivityResult connectivity,
Widget child,
) {
final bool connected = connectivity != ConnectivityResult.none;
return Text(connected ? "online" : "offline");
},
);
```

---

FlutterBlue v0.5.0

Popular Bluetooth plugin for Flutter

FlutterBlue aims to offer the most from both platforms (iOS and Android).

Using the `FlutterBlue` instance, you can scan for and connect to nearby devices. Once connected to a device, the `BluetoothDevice` object can discover services, characteristics, and descriptors. The `BluetoothDevice` object is then used to directly interact with characteristics and descriptors.

---

Flutter NFC Reader v0.0.23

A new flutter plugin to help developers looking to use internal hardware inside iOS or Android devices for reading NFC tags.

The system activate a pooling reading session that stops automatically once a tag has been recognised. You can also trigger the stop event manually using a dedicated function.

```dart
Future startNFC() async {
NfcData response;

try {
response = await FlutterNfcReader.read;
} on PlatformException {
//Something went wrong
}

return response;
}
```


# Utils

fluro v1.4.0

Fluro is a Flutter routing library that adds flexible routing options like wildcards, named parameters and clear route definitions.

```dart
var usersHandler = Handler(handlerFunc: (BuildContext context, Map params) {
return UsersScreen(params["id"][0]);
});

final router = Router();
router.define("/users/:id", handler: usersHandler);
```

---

json_serialize (Flutter Team) v3.0.0

Generates utilities to aid in serializing to/from JSON.

```dart
import 'package:json_annotation/json_annotation.dart';

part 'example.g.dart';

@JsonSerializable(nullable: false)
class Person {
final String firstName;
final String lastName;
final DateTime dateOfBirth;

Person({this.firstName, this.lastName, this.dateOfBirth});

factory Person.fromJson(Map json) => _$PersonFromJson(json);

Map toJson() => _$PersonToJson(this);
}
```

---

after_layout v1.0.7+1

Brings functionality to execute code after the first layout of a widget has been performed, i.e. after the first frame has been displayed.

```dart
class HomeScreen extends StatefulWidget {
@override
HomeScreenState createState() => new HomeScreenState();
}

class HomeScreenState extends State with AfterLayoutMixin {
@override
Widget build(BuildContext context) {
return new Scaffold(body: new Container(color: Colors.red));
}

@override
void afterFirstLayout(BuildContext context) {
showDialog(
context: context,
builder: (context) => AlertDialog(
content: Text('Hello World'),
),
);
}
}
```

---

RxDart v0.22.0


RxDart is a reactive functional programming library for Google Dart, based on ReactiveX.

#Reading the Konami Code

```dart
const konamiKeyCodes = const [
KeyCode.UP, KeyCode.UP,
KeyCode.DOWN, KeyCode.DOWN,
KeyCode.LEFT, KeyCode.RIGHT,
KeyCode.LEFT, KeyCode.RIGHT,
KeyCode.B, KeyCode.A
];

final result = querySelector('#result');
final keyUp = new Observable(document.onKeyUp);

keyUp
.map((event) => event.keyCode)
.bufferCount(10, 1)
.where((lastTenKeyCodes) => const IterableEquality().equals(lastTenKeyCodes, konamiKeyCodes))
.listen((_) => result.innerHtml = 'KONAMI!');
```

---

fluwx WeChatSDK v0.6.3

A implement of WeChatSDK on Flutter. Enjoy sharing or payments in Flutter.

```dart
import 'package:fluwx/fluwx.dart' as fluwx;

fluwx.register(appId:"wxd930ea5d5a258f4f");

fluwx.share(
WeChatShareTextModel(
text: "text from fluwx",
transaction: "transaction",
scene: WeChatScene.SESSION,
),
);
```

---

tuple v1.0.2

Tuple data structure.

```dart
var t = const Tuple2('a', 10);

print(t.item1); // prints 'a'
print(t.item2); // prints '10'
```

---

rosetta v0.1.2

This is a localization library to simplify Flutter localization with the help of code generation.

`i18n/en.json`
```json
{
"hello_there": "Hello there!",
"see_you_soon": "See you soon!"
}
```

```dart
part 'translation.g.dart';

@Stone(path: 'i18n')
class Translation with _$TranslationHelper {
static LocalizationsDelegate delegate = _$TranslationDelegate();

static Translation of(BuildContext context) {
return Localizations.of(context, Translation);
}
}
```

---

superpower v0.4.0

Lists, Iterables and Maps on steroids! πŸ¦„ Extends Lists with negative indices, sort, group, distinct, slice, flatten etc. Inspired by Kotlin.

Just wrap your existing List with $(myList) or create a new empty list with $() and you are good to go.

```dart
var superList = $([0, 10, 100, 1000]);
var sum = superList.sum(); // 1110
var last = superList[-1]; // 1000
var lastTwo = superList.slice(-2); // [100, 1000]
```


# Frameworks & Design Patterns

scoped_model v1.0.1

A Widget that passes a Reactive Model to all of it's children.

A set of utilities that allow you to easily pass a data Model from a parent Widget down to it's descendants. In addition, it also rebuilds all of the children that use the model when the model is updated. This library was originally extracted from the Fuchsia codebase.

```dart
class CounterModel extends Model {
int _counter = 0;
int get counter => _counter;

void increment() {
_counter++; // First, increment the counter
notifyListeners(); // Then notify all the listeners.
}
}

class CounterApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
// Create a `ScopedModel` widget. This will provide the `model` to the children that request it.
return ScopedModel(
model: CounterModel(),
child: Column(children: [
// Create a ScopedModelDescendant. This widget will get the CounterModel from the nearest
// ScopedModel. It will rebuild any time the CounterModel changes
ScopedModelDescendant(
builder: (context, child, model) => Text('${model.counter}'),
),
Text("Another widget that doesn't depend on the CounterModel")
]),
);
}
}
```

---

flutter_bloc v0.15.1

Flutter Widgets that make it easy to implement the BLoC (Business Logic Component) design pattern. Built to be used with the bloc state management package.

---

flutter_redux v0.5.3

A set of utilities that allow you to easily consume a Redux Store to build Flutter Widgets.

#Redux Widgets
- `StoreProvider` - The base Widget. It will pass the given Redux Store to all descendants that request it.
- `StoreBuilder` - A descendant Widget that gets the Store from a StoreProvider and passes it to a Widget builder function.
- `StoreConnector` - A descendant Widget that gets the Store from the nearest StoreProvider ancestor, converts the Store into a ViewModel with the given converter function, and passes the ViewModel to a builder function. Any time the Store emits a change event, the Widget will automatically be rebuilt. No need to manage subscriptions!

---

synchronized v2.1.0

Lock mechanism to prevent concurrent access to asynchronous code.

```dart
import 'package:synchronized/synchronized.dart';

main() async {
// Use this object to prevent concurrent access to data
var lock = new Lock();
...
await lock.synchronized(() async {
// Only this block can run (once) until done
...
});
}
```

---

Flutter MobX v0.2.1+1

MobX is a library for reactively managing the state of your applications. Use the power of observables, actions, and reactions to supercharge your Dart and Flutter apps.

```dart
part 'counter.g.dart';

class Counter = _Counter with _$Counter;

abstract class _Counter implements Store {
@observable
int value = 0;

@action
void increment() {
value++;
}
}
```

```dart
class CounterExample extends StatefulWidget {
@override
_CounterExampleState createState() => _CounterExampleState();
}

class _CounterExampleState extends State {
final _counter = Counter();

@override
Widget build(BuildContext context) {
return Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Observer(
builder: (_) => Text('${_counter.value}'),
),
Button(
onPressed: _counter.increment,
child: const Icon(Icons.add),
)
],
);
}
}
```

---

Flutter Hooks v0.5.0

A flutter implementation of React hooks. It adds a new kind of widget with enhanced code reuse.

```dart
class Example extends HookWidget {
final Duration duration;

const Example({@required this.duration});

@override
Widget build(BuildContext context) {
final controller = useAnimationController(duration: duration);
return Container();
}
}
```


# Audio & Video

Video Player (Flutter Team) v0.10.1+3

A Flutter plugin for iOS and Android for playing back video on a Widget surface.

![](images/video_player1.jpg)

---

audioplayers v0.12.1

A Flutter plugin to play multiple audio files simultaneously (Android/iOS).





---

chewie v0.9.7

The video player for Flutter with a heart of gold.

The video_player plugin provides low-level access to video playback. Chewie uses the video_player under the hood and wraps it in a friendly Material or Cupertino UI!

![](images/chewie1.jpg)

---

Flutter Sound v1.4.1

This plugin provides simple recorder and player functionalities for both Android and iOS.

![](images/flutter_sound1.gif)

---

audioplayer v0.5.2

A flutter plugin to play audio files

```dart
AudioPlayer audioPlugin = new AudioPlayer();

audioPlayer.play(kUrl);

audioPlayer.pause();

audioPlayer.stop();
```


# Files

path_provider (Flutter Team) v1.1.0

A Flutter plugin for finding commonly used locations on the filesystem. Supports iOS and Android.

```dart
Directory tempDir = await getTemporaryDirectory();
String tempPath = tempDir.path;

Directory appDocDir = await getApplicationDocumentsDirectory();
String appDocPath = appDocDir.path;
```

---

open_file v2.0.3

A plug-in that can call native apps to open files with string result in flutter. Supports iOS (UTI) and Android (Intent)

```dart
import 'package:open_file/open_file.dart';

OpenFile.open("/sdcard/example.txt");
```


# Persistance

Shared preferences (Flutter Team) v0.5.3+1

Flutter plugin for reading and writing simple key-value pairs. Wraps NSUserDefaults on iOS and SharedPreferences on Android.

```dart
incrementCounter() async {
SharedPreferences prefs = await SharedPreferences.getInstance();

int counter = (prefs.getInt('counter') ?? 0) + 1;
print('Pressed $counter times.');

await prefs.setInt('counter', counter);
}
```

---

sqflite v1.1.5


SQLite plugin for Flutter. Supports both iOS and Android.

- Support transactions and batches
- Automatic version management during open
- Helpers for insert/query/update/delete queries
- DB operation executed in a background thread on iOS and Android

---

sembast v1.15.4+1

NoSQL persistent embedded file system document-based database for Dart VM and Flutter with encryption support.

```dart
await db.put('Simple application', 'title');
await db.put(10, 'version');
await db.put({'offline': true}, 'settings');

// read values
String title = await db.get('title') as String;
int version = await db.get('version') as int;
Map settings = await db.get('settings') as Map;

// ...and delete
await db.delete('version');
```

---

redux_persist v0.8.2


Persist Redux state across app restarts in Flutter, Web, or custom storage engines.

Features:
- Save and load from multiple engine (Flutter, Web, File, custom)
- Fully type safe
- Transform state and raw on load/save
- Custom serializers
- Easy to use, integrate into your codebase in a few minutes!

---

CookieJar v1.0.0


A cookie manager for http requests in Dart, by which you can deal with the complex cookie policy and persist cookies easily.

```dart
import 'package:cookie_jar/cookie_jar.dart';
void main() async {
List cookies = [new Cookie("name", "wendux"), new Cookie("location", "china")];
var cj = new CookieJar();
//Save cookies
cj.saveFromResponse(Uri.parse("https://www.baidu.com/"), cookies);
//Get cookies
List results = cj.loadForRequest(Uri.parse("https://www.baidu.com/xx"));
print(results);
}
```

---

mmkv_flutter v1.0.10

Plugin that allow Flutter to read value from persistent storage or save value to persistent storage based on MMKV framework.

```dart
MmkvFlutter mmkv = await MmkvFlutter.getInstance();

mmkv.setBool('boolKey', true);
print('get bool value is ${ await mmkv.getBool('boolKey')}');

String stringtest = await mmkv.getString('stringKey') + '1';
print('GetSetStringTest value is $stringtest');
await mmkv.setString('stringKey', stringtest);
```

---

hydrated v1.2.3

Hydrated provides a BehaviorSubject that automatically persists to Flutter's local storage and hydrates on creation!

All values are persisted with shared_preferences and restored with automatic hydration.

```dart
final count$ = HydratedSubject("count", seedValue: 0);

/// count$ will automatically be hydrated with 42 next time it is created
count$.add(42);
```

---

objectdb_flutter v0.0.4


Reactive ObjectDB helper.

```dart
db = ObjectDB(File(dbFilePath));
db.open();
// insert sample data
db.insert({
'name': {'first': 'Alex', 'last': 'Boyle'},
'message': 'abc',
'active': true,
'count': 0,
});
```


# Logging & Error Handling

logging (Flutter Team) v0.11.3+2

Provides APIs for debugging and error logging. This library introduces abstractions similar to those used in other languages, such as the Closure JS Logger and java.util.logging.Logger.

```dart
Logger.root.level = Level.ALL;
Logger.root.onRecord.listen((LogRecord rec) {
print('${rec.level.name}: ${rec.time}: ${rec.message}');
});
```

---

catcher v0.1.5

Plugin for error catching. Allows handling errors when they're not catched by developer. Plugin provides multiple handlers for errors.

```dart
main() {
var debugOptions = CatcherOptions(
DialogReportMode(),
[ConsoleHandler()],
);
var releaseOptions = CatcherOptions(
DialogReportMode(),
[EmailManualHandler(["[email protected]"])],
);

Catcher(MyApp(), debugConfig: debugOptions, releaseConfig: releaseOptions);
}
```

# License

[![CC0](http://mirrors.creativecommons.org/presskit/buttons/88x31/svg/cc-zero.svg)](https://creativecommons.org/publicdomain/zero/1.0/)

To the extent possible under law, Simon Leier has waived all copyright and related or neighboring rights to this work.