Locwind
Locwind est une application qui enregistre des positions géographiques nommées, les conserve sur le téléphone et permet de les partager ou de s’y faire guider ; elle est publiée sur Google Play.
- Rôle
- Auteur unique
- Période
- De décembre 2022 à juin 2025
- État
- En service. Publiée sur Google Play, version 1.0.1
- Technologies
- Flutter, flutter_bloc, sembast, Google Maps
- Dépôts
- Deux, dont une API qui n’est pas reliée à la version publiée
Contexte
Locwind traite une position géographique comme une adresse : un point de la carte y reçoit un destinataire, un libellé et des notes, après quoi il peut être retrouvé, copié, partagé ou servir de destination à un itinéraire.
Elle est disponible sur Google Play. L’application enregistre des points et non des trajets. Le nom sous lequel elle figure sur le magasin, qui évoque un enregistreur GPS, promet donc un peu plus que ce qu’elle fait.
Problème
La position fournie par un téléphone peut s’écarter de plusieurs dizaines de mètres du lieu réel, ce qui suffit à désigner la mauvaise maison. Suivre la position en continu aurait par ailleurs demandé une autorisation plus large et consommé de la batterie, pour un besoin qui se résume à un point.
Réponse apportée
Le centre de la carte plutôt que la position brute
La position enregistrée est celle du centre de la carte, sous une épingle fixe, et non la position renvoyée par le téléphone. Celle-ci ne sert qu’à centrer la carte à l’ouverture, après quoi l’utilisateur déplace la carte jusqu’à ce que l’épingle désigne le bon endroit. Une position imprécise se corrige ainsi d’un geste.
Une localisation lue une seule fois
L’application vérifie que le service de localisation est actif et que l’autorisation est accordée, puis demande la position une fois. Elle ne déclare ni localisation en arrière-plan ni service permanent, de sorte que la question de la batterie ne se pose pas.
Un stockage réduit à un enregistrement
La liste entière des positions est conservée sous une seule clé d’un fichier local, relue puis réécrite à chaque modification. Cette simplicité convient à quelques dizaines de points et évite tout schéma à faire évoluer.
Future<List<Address>> _saveAddresses(List<Address> addresses) async {
final dbPath = await _dbPath;
final db = await dbFactory.openDatabase(dbPath);
final store = StoreRef<String, List<Object?>>.main();
await store.record('addresses').put(db, addresses.map((e) => e.toJson()).toList());
return addresses;
}
Future<Address> createAddress(Address address) async {
const uuid = Uuid();
final addresses = await loadAddresses();
addresses.add(address.copyWith(id: uuid.v1()));
await _saveAddresses(addresses);
return address;
}Le partage produit un texte qui se termine par une adresse Google Maps, et chaque position reçoit une étiquette formée du numéro de téléphone de son auteur et d’un rang. La recherche de lieux attend enfin une seconde après la dernière frappe avant d’interroger le service.
Limites et perspectives
Une API Django et un modèle de partage ont été développés en 2023, puis de nouveau en 2025 : un compte, des positions privées et une demande d’accès que le propriétaire approuve, à partir de l’étiquette. Ce travail est resté sur des branches qui n’ont pas été fusionnées, et la version publiée n’appelle aucun serveur qui m’appartienne.
L’application n’existe par ailleurs qu’en anglais dans sa version publiée, n’exporte les positions que sous la forme d’un texte et ne compte aucun test.



