check_verbinding.dart 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  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 'package:http/http.dart' as http;
  11. /// Kijkt of de server bereikbaar is en zet App State `geenVerbinding`.
  12. ///
  13. /// Geeft true terug als de verbinding in orde is.
  14. ///
  15. /// Bewust een HEAD-request op de site-root: die levert 0 bytes body op en
  16. /// antwoordt in ongeveer 60 ms, dus dit is verwaarloosbaar naast de gewone
  17. /// data-calls. We kijken alleen of de server antwoordt, niet wat hij zegt.
  18. Future<bool> checkVerbinding() async {
  19. final basis = FFAppState().apiBaseUrl.trim().isEmpty
  20. ? 'https://uitgaanskrant.com'
  21. : FFAppState().apiBaseUrl.trim();
  22. bool bereikbaar;
  23. try {
  24. final response =
  25. await http.head(Uri.parse(basis)).timeout(const Duration(seconds: 6));
  26. // Elke echte HTTP-reactie betekent dat we de server hebben bereikt.
  27. // Alleen een 5xx rekenen we als 'niet bruikbaar'.
  28. bereikbaar = response.statusCode < 500;
  29. } catch (_) {
  30. // Geen netwerk, DNS-fout, timeout, certificaatfout: allemaal 'geen verbinding'.
  31. bereikbaar = false;
  32. }
  33. final nieuweWaarde = !bereikbaar;
  34. if (FFAppState().geenVerbinding != nieuweWaarde) {
  35. // update() roept notifyListeners() aan; zonder dat merkt de banner niets.
  36. FFAppState().update(() {
  37. FFAppState().geenVerbinding = nieuweWaarde;
  38. });
  39. }
  40. return bereikbaar;
  41. }
  42. // Set your action name, define your arguments and return parameter,
  43. // and then add the boilerplate code using the `</>` button on the right!