Ce commit boucle le travail en cours sur la branche (assistant lunettes Meta, passage du lecteur audio flottant a un onglet, ajustements scanner / liste de configurations / telechargement) et y ajoute le badge de version. Le badge, en bas de la feuille Parametres, affiche « flavor . version . commit ». Un APK pose sur une tablette du terrain n'etait rattachable a aucun commit precis : la version du pubspec ne bougeait pas d'un build a l'autre et rien n'indiquait le flavor reellement installe. kGitSha suit le meme schema que kApiBaseUrl, injecte par --dart-define, et kFlavor expose le flavor deja calcule. package_info_plus etait deja une dependance transitive ; il devient direct, puisqu'il est desormais importe. /!\ Un --dart-define modifie n'est PAS pris en compte sans `flutter clean` sur ce projet : verifie a la sentinelle, le SHA restait absent de libapp.so tant que le cache Dart n'etait pas vide. Un build de release destine au terrain doit donc toujours passer par un clean, sinon le badge affiche le SHA du build precedent. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
50 lines
1.4 KiB
Dart
50 lines
1.4 KiB
Dart
import 'dart:ui';
|
|
|
|
import 'package:flutter/material.dart';
|
|
|
|
/// Pastille circulaire en verre dépoli, posée sur une photo.
|
|
///
|
|
/// Remplace les ronds `Colors.black.withValues(alpha: 0.3)` qui s'écrasaient
|
|
/// sur les images sombres : le flou détache la pastille de n'importe quel fond,
|
|
/// le liseré clair garde un contour visible sur une photo claire.
|
|
///
|
|
/// Trois usages : réglages et lunettes sur le héros de l'accueil, badge de
|
|
/// téléchargement sur une tuile bento.
|
|
class GlassPill extends StatelessWidget {
|
|
final double size;
|
|
final Widget child;
|
|
final VoidCallback? onTap;
|
|
final VoidCallback? onLongPress;
|
|
|
|
const GlassPill({
|
|
super.key,
|
|
required this.child,
|
|
this.size = 46,
|
|
this.onTap,
|
|
this.onLongPress,
|
|
});
|
|
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
return GestureDetector(
|
|
onTap: onTap,
|
|
onLongPress: onLongPress,
|
|
child: ClipOval(
|
|
child: BackdropFilter(
|
|
filter: ImageFilter.blur(sigmaX: 12, sigmaY: 12),
|
|
child: Container(
|
|
width: size,
|
|
height: size,
|
|
decoration: BoxDecoration(
|
|
shape: BoxShape.circle,
|
|
color: Colors.black.withValues(alpha: 0.28),
|
|
border: Border.all(color: Colors.white24, width: 1),
|
|
),
|
|
child: Center(child: child),
|
|
),
|
|
),
|
|
),
|
|
);
|
|
}
|
|
}
|