dartrosa_external_data 0.1.1 copy "dartrosa_external_data: ^0.1.1" to clipboard
dartrosa_external_data: ^0.1.1 copied to clipboard

ODK Collect's external data for DartRosa: pulldata() and search() appearances over CSV form media. A port of Collect's dynamicpreload package.

example/example.dart

// Copyright 2026 The DartRosa Authors
// SPDX-License-Identifier: Apache-2.0

// `pulldata()` over a CSV attached to the form, as in ODK Collect.
import 'dart:convert';

import 'package:dartrosa/dartrosa.dart';
import 'package:dartrosa_external_data/dartrosa_external_data.dart';

const xform = '''
<h:html xmlns="http://www.w3.org/2002/xforms"
    xmlns:h="http://www.w3.org/1999/xhtml">
  <h:head>
    <h:title>Fruit prices</h:title>
    <model>
      <instance>
        <data id="fruit-prices"><fruit/><price/></data>
      </instance>
      <bind nodeset="/data/fruit" type="string"/>
      <bind nodeset="/data/price" type="decimal"
          calculate="pulldata('fruits', 'price', 'name', /data/fruit)"/>
    </model>
  </h:head>
  <h:body>
    <input ref="/data/fruit"><label>Fruit</label></input>
    <input ref="/data/price"><label>Price</label></input>
  </h:body>
</h:html>
''';

const fruitsCsv = 'name,price\nmango,1.5\nbanana,0.25\n';

Future<void> main() async {
  final config = DartRosaConfig(
    // Form media, read as jr://file/<name>.
    resolver: MapResourceResolver({
      'jr://file/fruits.csv': utf8.encode(fruitsCsv),
    }),
    plugins: [
      ExternalDataPlugin(listMedia: (_) => ['fruits.csv']),
    ],
  );
  final definition = await FormDefinition.parse(xform, config: config);
  final session = definition.createSession();

  final [fruit, price] = session.root.children.cast<QuestionNode>();
  session.answer(fruit.index, const StringValue('mango'));
  _log('price: ${price.value?.displayText}'); // 1.5
}

// ignore: avoid_print
void _log(Object? message) => print(message);
0
likes
160
points
386
downloads

Documentation

API reference

Publisher

verified publishersudhi.in

Weekly Downloads

ODK Collect's external data for DartRosa: pulldata() and search() appearances over CSV form media. A port of Collect's dynamicpreload package.

Homepage
Repository (GitHub)
View/report issues
Contributing

Topics

#odk #xforms #csv #form #data-collection

License

Apache-2.0 (license)

Dependencies

crypto, dartrosa, logging

More

Packages that depend on dartrosa_external_data