import 'dart:async'; import 'package:http/http.dart' as http; import '../models/pending_upload.dart'; class Uploader { Uploader(this.accessToken, this.onSuccess); final String accessToken; final void Function() onSuccess; Future upload(PendingUpload p) async { try { // 1. open changeset final csXml = ''' '''; final csResp = await _post('/api/0.6/changeset/create', csXml); if (csResp.statusCode != 200) return false; final csId = csResp.body; // 2. create node final nodeXml = ''' '''; final nodeResp = await _put('/api/0.6/node/create', nodeXml); if (nodeResp.statusCode != 200) return false; // 3. close changeset await _put('/api/0.6/changeset/$csId/close', ''); onSuccess(); return true; } catch (_) { return false; } } Future _post(String path, String body) => http.post( Uri.https('api.openstreetmap.org', path), headers: _headers, body: body, ); Future _put(String path, String body) => http.put( Uri.https('api.openstreetmap.org', path), headers: _headers, body: body, ); Map get _headers => { 'Authorization': 'Bearer $accessToken', 'Content-Type': 'text/xml', }; }