stadsactiviteit_create.dart 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168
  1. // Automatic FlutterFlow imports
  2. import '/backend/schema/structs/index.dart';
  3. import '/flutter_flow/flutter_flow_theme.dart';
  4. import '/flutter_flow/flutter_flow_util.dart';
  5. import 'index.dart'; // Imports other custom actions
  6. import '/flutter_flow/custom_functions.dart'; // Imports custom functions
  7. import 'package:flutter/material.dart';
  8. // Begin custom action code
  9. // DO NOT REMOVE OR MODIFY THE CODE ABOVE!
  10. import 'dart:async';
  11. import 'dart:convert';
  12. import 'package:http/http.dart' as http;
  13. Future<dynamic> stadsactiviteitCreate(
  14. String sessionName,
  15. String sessionId,
  16. String token,
  17. String titel,
  18. String plaatsTid,
  19. String datumStart,
  20. String? datumEind,
  21. String? omschrijving,
  22. String? organisator,
  23. String? contact,
  24. String? adresStraat,
  25. String? adresPlaats,
  26. String? adresPostcode,
  27. String? entreePrijs,
  28. String? toelichtingEntree,
  29. List<String>? categorieTids,
  30. String? websiteUrl,
  31. String? logoFid,
  32. List<String>? fotosFids,
  33. String? entreeTid,
  34. ) async {
  35. if (titel.trim().isEmpty) {
  36. return {'success': false, 'error': 'Titel is verplicht'};
  37. }
  38. final plaatsTidInt = int.tryParse(plaatsTid.trim());
  39. if (plaatsTidInt == null) {
  40. return {'success': false, 'error': 'Ongeldige plaats'};
  41. }
  42. if (datumStart.trim().isEmpty) {
  43. return {'success': false, 'error': 'Datum is verplicht'};
  44. }
  45. final body = <String, dynamic>{
  46. 'titel': titel.trim(),
  47. 'plaats_tid': plaatsTidInt,
  48. 'datum_start': datumStart.trim(),
  49. };
  50. if ((datumEind ?? '').trim().isNotEmpty) {
  51. body['datum_eind'] = datumEind!.trim();
  52. }
  53. if ((omschrijving ?? '').trim().isNotEmpty) {
  54. body['omschrijving'] = omschrijving!.trim();
  55. }
  56. if ((organisator ?? '').trim().isNotEmpty) {
  57. body['organisator'] = organisator!.trim();
  58. }
  59. if ((contact ?? '').trim().isNotEmpty) {
  60. body['contact'] = contact!.trim();
  61. }
  62. if ((adresStraat ?? '').trim().isNotEmpty ||
  63. (adresPlaats ?? '').trim().isNotEmpty ||
  64. (adresPostcode ?? '').trim().isNotEmpty) {
  65. body['adres'] = {
  66. if ((adresStraat ?? '').trim().isNotEmpty)
  67. 'thoroughfare': adresStraat!.trim(),
  68. if ((adresPlaats ?? '').trim().isNotEmpty)
  69. 'locality': adresPlaats!.trim(),
  70. if ((adresPostcode ?? '').trim().isNotEmpty)
  71. 'postal_code': adresPostcode!.trim(),
  72. 'country': 'NL',
  73. };
  74. }
  75. if ((entreePrijs ?? '').trim().isNotEmpty) {
  76. body['entree_prijs'] = entreePrijs!.trim();
  77. }
  78. if ((toelichtingEntree ?? '').trim().isNotEmpty) {
  79. body['toelichting_entree'] = toelichtingEntree!.trim();
  80. }
  81. if (categorieTids != null && categorieTids.isNotEmpty) {
  82. final tids = categorieTids
  83. .map((e) => int.tryParse(e.trim()))
  84. .whereType<int>()
  85. .toList();
  86. if (tids.isNotEmpty) body['categorie_tids'] = tids;
  87. }
  88. if ((websiteUrl ?? '').trim().isNotEmpty) {
  89. body['website_url'] = websiteUrl!.trim();
  90. }
  91. if ((logoFid ?? '').trim().isNotEmpty) {
  92. final fid = int.tryParse(logoFid!.trim());
  93. if (fid != null) body['logo_fid'] = fid;
  94. }
  95. if (fotosFids != null && fotosFids.isNotEmpty) {
  96. final fids =
  97. fotosFids.map((e) => int.tryParse(e.trim())).whereType<int>().toList();
  98. if (fids.isNotEmpty) body['fotos_fids'] = fids;
  99. }
  100. if ((entreeTid ?? '').trim().isNotEmpty) {
  101. final tid = int.tryParse(entreeTid!.trim());
  102. if (tid != null) body['entree_tid'] = tid;
  103. }
  104. final headers = <String, String>{
  105. 'Accept': 'application/json',
  106. 'Content-Type': 'application/json',
  107. };
  108. if (sessionName.trim().isNotEmpty && sessionId.trim().isNotEmpty) {
  109. headers['Cookie'] = '$sessionName=$sessionId';
  110. }
  111. if (token.trim().isNotEmpty) {
  112. headers['X-CSRF-Token'] = token;
  113. }
  114. final url =
  115. 'https://uitgaanskrant.com/en/flutterdrup/stadsactiviteiten/create.json';
  116. print('========================================');
  117. print('STADSACTIVITEIT CREATE');
  118. print('URL : $url');
  119. print('BODY : ${jsonEncode(body)}');
  120. print('========================================');
  121. try {
  122. final response = await http
  123. .post(Uri.parse(url), headers: headers, body: jsonEncode(body))
  124. .timeout(const Duration(seconds: 30));
  125. print('========================================');
  126. print('STATUS : ${response.statusCode}');
  127. print('BODY');
  128. print(response.body);
  129. print('========================================');
  130. dynamic data;
  131. try {
  132. data = jsonDecode(response.body);
  133. } catch (_) {
  134. data = response.body;
  135. }
  136. if (response.statusCode >= 200 && response.statusCode < 300) {
  137. return {
  138. 'success': true,
  139. 'nid': data is Map ? (data['nid']?.toString() ?? '') : '',
  140. 'status': data is Map ? (data['status']?.toString() ?? '') : '',
  141. };
  142. }
  143. return {
  144. 'success': false,
  145. 'statusCode': response.statusCode,
  146. 'error':
  147. data is Map ? (data['message'] ?? data.toString()) : data.toString(),
  148. };
  149. } on TimeoutException {
  150. return {'success': false, 'error': 'Timeout'};
  151. } catch (e, stack) {
  152. print(e);
  153. print(stack);
  154. return {'success': false, 'error': e.toString()};
  155. }
  156. }