pub package Null Safety Codecov Dart CI GitHub Tag New Commits Last Commits Pull Requests Code size License FOSSA Status

Async fields that can be stored or fetched from any source (databases, web services, local storage or other thread/isolate), with observable values, caches and stale versions.


A simple usage example:

import 'dart:convert' as convert;
import 'dart:io';

import 'package:async_field/async_field.dart';

void main() async {
  // The fields storage:
  var storage = AsyncStorage();

  // Get field 'btc_usd',
  var field = storage.getField<double>('btc_usd')
    ..defaultValue = double.nan // default value (before fetch).
    ..withFetcher(_fetchBtcUsd) // the field fetcher.
    ..onChange.listen((field) => print('onChange> $field')); // change listener.

  print('BTX-USD: $field');
  print(' ${}');

  // Get the field value:
  var btcUsd = await field.get();

  print('field.get(): $btcUsd');

  print('BTX-USD: $field');
  print(' ${}');

/// Function that fetches the BTS-USD price.
Future<double> _fetchBtcUsd(AsyncField<double> field) async {
  return _getURL('')
          .resolveMapped((body) {
    var json = convert.json.decode(body) as Map<String, dynamic>;
    var rate = json['bpi']['USD']['rate_float'];
    return double.parse('$rate');

/// Simple HTTP get URL function.
Future<String> _getURL(String url) async {
  var uri = Uri.parse(url);
  var httpClient = HttpClient();

  var response =
  await httpClient.getUrl(uri).then((request) => request.close());

  var data = await response.transform(convert.Utf8Decoder()).toList();
  var body = data.join();
  return body;


BTX-USD: NaN { "id": "btc_usd" , "storage": 1 }
field.get(): 34498.9417
BTX-USD: 34498.9417 { "value": 34498.9417 , "id": "btc_usd" , "valueTime": 1624846823650 , "storage": 1 }
onChange> 34498.9417


The official source code is hosted @ GitHub:

Features and bugs

Please file feature requests and bugs at the issue tracker.


Any help from the open-source community is always welcome and needed:

  • Found an issue?
    • Please fill a bug report with details.
  • Wish a feature?
    • Open a feature request with use cases.
  • Are you using and liking the project?
    • Promote the project: create an article, do a post or make a donation.
  • Are you a developer?
    • Fix a bug and send a pull request.
    • Implement a new feature.
    • Improve the Unit Tests.
  • Have you already helped in any way?
    • Many thanks from me, the contributors and everybody that uses this project!

If you donate 1 hour of your time, you can contribute a lot, because others will do the same, just be part and start with your 1 hour.


Graciliano M. Passos: gmpassos@GitHub.


Apache License - Version 2.0

FOSSA Status


Async Field Library