directus_api_manager 1.14.0 copy "directus_api_manager: ^1.14.0" to clipboard
directus_api_manager: ^1.14.0 copied to clipboard

Communicate with a Directus server using its REST API.

example/directus_api_manager_example.dart

import 'package:directus_api_manager/directus_api_manager.dart';
import 'directus_api_manager_example.reflectable.dart';

Future<void> main() async {
  initializeReflectable();
  final apiManager = DirectusApiManager(baseURL: "http://0.0.0.0:8055/");

  // Authenticate
  final loginResult =
      await apiManager.loginDirectusUser("admin@example.com", "d1r3ctu5");
  if (loginResult.type == DirectusLoginResultType.success) {
    print("User logged in");
  } else if (loginResult.type == DirectusLoginResultType.invalidCredentials) {
    print("Please verify entered credentials");
  } else if (loginResult.type == DirectusLoginResultType.invalidOTP) {
    print("You need to provide a valid OneTimePassword code");
  } else if (loginResult.type == DirectusLoginResultType.error) {
    print("An unknown error occured");
    final additionalMessage = loginResult.message;
    if (additionalMessage != null) {
      print("More information : $additionalMessage");
    }
  }

  //Create new item
  final newPlayer = PlayerDirectusModel.newItem(nickname: "Leonard");
  final creationResult =
      await apiManager.createNewItem(objectToCreate: newPlayer);
  if (creationResult.isSuccess) {
    print("Created player!");
    final createdPlayer = creationResult.createdItem;
    // depending on your directus server authorization you might not have access to the created item
    if (createdPlayer != null) {
      print("The id of this new player is ${createdPlayer.id}");
    }
  } else {
    final error = creationResult.error;
    if (error != null) {
      print("Error while creating player : $error");
    }
  }

  //Multiple items
  final list = await apiManager.findListOfItems<PlayerDirectusModel>();
  for (final player in list) {
    print("${player.nickname} - ${player.bestScore}");
  }

  final playerId = list.first.id;
  if (playerId == null) {
    print("No player id found");
    return;
  }

  //One specific item from an ID
  final PlayerDirectusModel? fetchedPlayer =
      await apiManager.getSpecificItem(id: playerId);
  if (fetchedPlayer != null) {
    print(fetchedPlayer.nickname);

    //Update item
    fetchedPlayer.bestScore = 123;
    final updatedPlayer =
        await apiManager.updateItem(objectToUpdate: fetchedPlayer);
    print(updatedPlayer.bestScore);
  }

  // Example of using GeoJsonPolygon with intersects_bbox filter
  geoFilterExample();
}

@DirectusCollection()
@CollectionMetadata(endpointName: "player")
class PlayerDirectusModel extends DirectusItem {
  PlayerDirectusModel.newItem({required String nickname}) : super.newItem() {
    setValue(nickname, forKey: "nickname");
  }

  PlayerDirectusModel(super.rawReceivedData);

  String get nickname => getValue(forKey: "nickname");
  int? get bestScore => getValue(forKey: "best_score");
  set bestScore(int? newBestScore) =>
      setValue(newBestScore, forKey: "best_score");
}

// Example of using GeoJsonPolygon with intersects_bbox filter
void geoFilterExample() {
  print('\n=== Geo Filter Example ===');

  // Create a rectangular bounding box
  final rectangle = GeoJsonPolygon.rectangle(
    topLeft: [168.2947501099543, -17.723682144590242],
    bottomRight: [168.29840874403044, -17.727328428851507],
  );

  // Create a polygon from a list of coordinates
  // ignore: unused_local_variable
  final polygon = GeoJsonPolygon.polygon(
    points: [
      [168.2947501099543, -17.723682144590242],
      [168.29840874403044, -17.723682144590242],
      [168.29840874403044, -17.727328428851507],
      [168.2947501099543, -17.727328428851507],
    ],
  );

  // Create a square centered at a specific point
  // ignore: unused_local_variable
  final square = GeoJsonPolygon.squareFromCenter(
    center: [168.29658, -17.725505],
    distanceInMeters: 400, // distance from center in meters
  );

  // Use the GeoJSON polygon with a PropertyFilter for geospatial queries
  final locationFilter = GeoFilter(
      field: "location",
      operator: GeoFilterOperator.intersectsBbox,
      feature: rectangle);

  // You can use this filter in your API queries
  print('Filter JSON: ${locationFilter.asJSON}');

  // Or use it as a Map
  print('Filter Map: ${locationFilter.asMap}');
}
6
likes
150
points
259
downloads

Publisher

unverified uploader

Weekly Downloads

Communicate with a Directus server using its REST API.

Repository (GitHub)

Documentation

API reference

License

BSD-3-Clause (license)

Dependencies

extension_dart_tools, http, http_parser, meta, mutex, reflectable, web_socket_channel

More

Packages that depend on directus_api_manager