Numeri da un campo di testo
Fa parte della sezione Rendere l’app interattiva del percorso Flutter di Coddy. Lezione 25 di 34.
Un campo contiene sempre una String, anche quando mostra delle cifre: '12' è testo e '12' * 7 non dà 84. Per eseguire calcoli, convertila in un int:
int.tryParse('12') // 12
int.tryParse('hello') // nullnull significa «nessun valore»: 'hello' non è un numero, quindi non c'è alcun valore. Il tipo del risultato è int?, un int oppure null. Prima di eseguire calcoli, assegnagli un valore da usare al suo posto, con ??:
int age = int.tryParse(value) ?? 0;Leggi a ?? b come «a, oppure b se a è null». Esiste anche int.parse, senza «try», ma interrompe l'app con un errore quando il testo non è un numero, e le persone digitano ogni sorta di cose.
Su un telefono, keyboardType: TextInputType.number apre una tastiera con le cifre, quindi le persone raramente digitano lettere.
Sfida
Medio- Fai in modo che il campo apra la tastiera numerica.
- In
onChanged, converti il testo in unintconint.tryParse, usando0quando non è un numero, e memorizzalo in_age. - Mostra
That is 35 in dog yearsper un'età di 5: l'età moltiplicata per 7.
Provalo tu
import 'package:flutter/material.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
@override
Widget build(BuildContext context) {
return MaterialApp(
debugShowCheckedModeBanner: false,
home: const HomePage(),
);
}
}
class HomePage extends StatefulWidget {
const HomePage({super.key});
@override
State<HomePage> createState() => _HomePageState();
}
class _HomePageState extends State<HomePage> {
String _ageText = '';
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: const Text('Dog Years')),
body: Padding(
padding: const EdgeInsets.all(24),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
TextField(
decoration: const InputDecoration(
labelText: 'Your age',
border: OutlineInputBorder(),
),
onChanged: (String value) {
setState(() {
_ageText = value;
});
},
),
const SizedBox(height: 24),
Text('That is ? in dog years', style: const TextStyle(fontSize: 24)),
],
),
),
);
}
}
Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Rendere l’app interattiva
3Widget con stato
Una classe Widget tutta tuaMostra una SnackBarsetState ridisegna lo schermoScrivi uno StatefulWidgetUn contatore che sale e scendeHot Reload mantiene lo stato6Campi di testo
Il tuo primo campo di testoReagire alla digitazioneLeggere un campo con un ControllerNumeri da un campo di testoDecimali con toStringAsFixedEsercitati da solo: Compilatore Flutter online