check_verbinding.dart.txt 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  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 'package:http/http.dart' as http;
  12. /// Kijkt of de server bereikbaar is en zet App State `geenVerbinding`.
  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 = await http
  25. .head(Uri.parse(basis))
  26. .timeout(const Duration(seconds: 6));
  27. // Elke echte HTTP-reactie betekent dat we de server hebben bereikt.
  28. // Alleen een 5xx rekenen we als 'niet bruikbaar'.
  29. bereikbaar = response.statusCode < 500;
  30. } catch (_) {
  31. // Geen netwerk, DNS-fout, timeout, certificaatfout: allemaal 'geen verbinding'.
  32. bereikbaar = false;
  33. }
  34. final nieuweWaarde = !bereikbaar;
  35. if (FFAppState().geenVerbinding != nieuweWaarde) {
  36. // update() roept notifyListeners() aan; zonder dat merkt de banner niets.
  37. FFAppState().update(() {
  38. FFAppState().geenVerbinding = nieuweWaarde;
  39. });
  40. }
  41. return bereikbaar;
  42. }