Auto-sync: 20260429_160000
This commit is contained in:
parent
997adafb8d
commit
1ae7671495
2 changed files with 9 additions and 8 deletions
|
|
@ -13,7 +13,7 @@ class PaywallScreen extends StatefulWidget {
|
||||||
}
|
}
|
||||||
|
|
||||||
class _PaywallScreenState extends State<PaywallScreen> with SingleTickerProviderStateMixin {
|
class _PaywallScreenState extends State<PaywallScreen> with SingleTickerProviderStateMixin {
|
||||||
Package? _yearlyPackage;
|
Package? _monthlyPackage;
|
||||||
bool _isLoading = true;
|
bool _isLoading = true;
|
||||||
bool _isPurchasing = false;
|
bool _isPurchasing = false;
|
||||||
late AnimationController _animationController;
|
late AnimationController _animationController;
|
||||||
|
|
@ -32,8 +32,8 @@ class _PaywallScreenState extends State<PaywallScreen> with SingleTickerProvider
|
||||||
final offerings = await SubscriptionService.fetchOfferings();
|
final offerings = await SubscriptionService.fetchOfferings();
|
||||||
if (offerings != null && offerings.current != null) {
|
if (offerings != null && offerings.current != null) {
|
||||||
setState(() {
|
setState(() {
|
||||||
// Cerchiamo il pacchetto annuale
|
// Cerchiamo il pacchetto mensile
|
||||||
_yearlyPackage = offerings.current!.annual;
|
_monthlyPackage = offerings.current!.monthly;
|
||||||
_isLoading = false;
|
_isLoading = false;
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
|
|
@ -44,12 +44,12 @@ class _PaywallScreenState extends State<PaywallScreen> with SingleTickerProvider
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<void> _buyPackage() async {
|
Future<void> _buyPackage() async {
|
||||||
if (_yearlyPackage == null) return;
|
if (_monthlyPackage == null) return;
|
||||||
setState(() {
|
setState(() {
|
||||||
_isPurchasing = true;
|
_isPurchasing = true;
|
||||||
});
|
});
|
||||||
|
|
||||||
final success = await SubscriptionService.purchasePackage(_yearlyPackage!);
|
final success = await SubscriptionService.purchasePackage(_monthlyPackage!);
|
||||||
|
|
||||||
if (mounted) {
|
if (mounted) {
|
||||||
setState(() {
|
setState(() {
|
||||||
|
|
@ -215,7 +215,7 @@ class _PaywallScreenState extends State<PaywallScreen> with SingleTickerProvider
|
||||||
// Bottone Acquisto
|
// Bottone Acquisto
|
||||||
if (_isLoading)
|
if (_isLoading)
|
||||||
const CircularProgressIndicator(color: Colors.white)
|
const CircularProgressIndicator(color: Colors.white)
|
||||||
else if (_yearlyPackage != null)
|
else if (_monthlyPackage != null)
|
||||||
Padding(
|
Padding(
|
||||||
padding: const EdgeInsets.symmetric(horizontal: 30),
|
padding: const EdgeInsets.symmetric(horizontal: 30),
|
||||||
child: ElevatedButton(
|
child: ElevatedButton(
|
||||||
|
|
@ -237,7 +237,7 @@ class _PaywallScreenState extends State<PaywallScreen> with SingleTickerProvider
|
||||||
child: CircularProgressIndicator(color: Colors.white, strokeWidth: 2),
|
child: CircularProgressIndicator(color: Colors.white, strokeWidth: 2),
|
||||||
)
|
)
|
||||||
: Text(
|
: Text(
|
||||||
'Passa a PRO - ${_yearlyPackage!.storeProduct.priceString} / anno',
|
'Sblocca per 1 mese - ${_monthlyPackage!.storeProduct.priceString}',
|
||||||
style: const TextStyle(fontSize: 18, fontWeight: FontWeight.bold),
|
style: const TextStyle(fontSize: 18, fontWeight: FontWeight.bold),
|
||||||
textAlign: TextAlign.center,
|
textAlign: TextAlign.center,
|
||||||
),
|
),
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,8 @@
|
||||||
- **2026-04-28**: Modificato il campo "Telefono / Email" in due campi separati in `comp_6-7.dart` (Contraente) e `comp_9.dart` (Conducente) con implementazione Regex per formati internazionali ed email. Aggiornata logica `pdf_engine.dart` per stampare la stringa concatenata nel PDF e aggiornato il salvataggio locale `profilo_service.dart`. **Eseguito e validato test end-to-end** (`full_flow_test.dart`) verificando l'autocompilazione delle email, il bypass OTP e la generazione integra del file PDF.
|
- **2026-04-28**: Modificato il campo "Telefono / Email" in due campi separati in `comp_6-7.dart` (Contraente) e `comp_9.dart` (Conducente) con implementazione Regex per formati internazionali ed email. Aggiornata logica `pdf_engine.dart` per stampare la stringa concatenata nel PDF e aggiornato il salvataggio locale `profilo_service.dart`. **Eseguito e validato test end-to-end** (`full_flow_test.dart`) verificando l'autocompilazione delle email, il bypass OTP e la generazione integra del file PDF.
|
||||||
- **2026-04-28**: Risolti i bug del Paywall: aggiunto `SingleChildScrollView` per evitare il "bottom overflow" su schermi piccoli (es. iOS) e rimosso l'escape errato dell'interpolazione stringhe che nascondeva il prezzo (`\${_yearlyPackage...}`).
|
- **2026-04-28**: Risolti i bug del Paywall: aggiunto `SingleChildScrollView` per evitare il "bottom overflow" su schermi piccoli (es. iOS) e rimosso l'escape errato dell'interpolazione stringhe che nascondeva il prezzo (`\${_yearlyPackage...}`).
|
||||||
- **2026-04-28**: Separata l'inizializzazione dell'SDK RevenueCat (`subscription_service.dart`) in due chiavi API distinte per piattaforma: una per iOS (`appl_dIdoPn...`) configurata con il certificato P8 di App Store Connect, e una per Android (`goog_DsVh...`).
|
- **2026-04-28**: Separata l'inizializzazione dell'SDK RevenueCat (`subscription_service.dart`) in due chiavi API distinte per piattaforma: una per iOS (`appl_dIdoPn...`) configurata con il certificato P8 di App Store Connect, e una per Android (`goog_DsVh...`).
|
||||||
- **2026-04-29**: Avviata fase di debug per la visibilità dei pacchetti su Android ("Pacchetti non disponibili"). Analisi dei requisiti Google Play Console (Track di test interno, Entitlements RevenueCat, e Product ID).
|
- **2026-04-29**: Modificato il Paywall (`paywall_screen.dart`) per abbandonare il modello ad "Abbonamento Ricorrente". Sostituito con un modello "Una-Tantum/Prepagato" da 1 mese (0,99€). Aggiornata la UI del bottone in "Sblocca per 1 mese - [prezzo]" per riflettere un pagamento singolo non rinnovabile.
|
||||||
|
- **2026-04-29**: Avviata fase di debug per la visibilità dei pacchetti su Android ("Pacchetti non disponibili"). Analisi dei requisiti Google Play Console (Track di test interno, Entitlements RevenueCat, e Product ID). Caricata la release `1.0.8 (7)` sul Play Console interno per sbloccare la creazione abbonamenti.
|
||||||
- **2026-04-28**: Implementata Autocompilazione (Ricorda i miei dati). Creato `ProfiloService` con persistenza locale via `shared_preferences`. Aggiunto popup "Vuoi usare i dati salvati?" su `comp_6-7.dart` e workflow "silenzioso" su `comp_9.dart`.
|
- **2026-04-28**: Implementata Autocompilazione (Ricorda i miei dati). Creato `ProfiloService` con persistenza locale via `shared_preferences`. Aggiunto popup "Vuoi usare i dati salvati?" su `comp_6-7.dart` e workflow "silenzioso" su `comp_9.dart`.
|
||||||
- **2026-04-24**: Implementazione In-App Purchases (RevenueCat) con aggiunta del plugin `purchases_flutter`. Creato `SubscriptionService`, aggiunto campo `isPro` in `GlobalData`, e costruito il Paywall Custom (Glassmorphism) per bloccare la funzionalità "Scambio Dati" agli utenti non paganti.
|
- **2026-04-24**: Implementazione In-App Purchases (RevenueCat) con aggiunta del plugin `purchases_flutter`. Creato `SubscriptionService`, aggiunto campo `isPro` in `GlobalData`, e costruito il Paywall Custom (Glassmorphism) per bloccare la funzionalità "Scambio Dati" agli utenti non paganti.
|
||||||
- **2026-04-24**: Sostituiti tutti i metodi deprecati `.withOpacity(...)` con `.withValues(alpha: ...)` in 12 file dell'app, rimuovendo 36 avvisi dal compilatore Dart.
|
- **2026-04-24**: Sostituiti tutti i metodi deprecati `.withOpacity(...)` con `.withValues(alpha: ...)` in 12 file dell'app, rimuovendo 36 avvisi dal compilatore Dart.
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue