Widgets

TextTr

Introduzione

Il widget TextTr e' un wrapper di convenienza attorno al widget Text di Flutter che traduce automaticamente il suo contenuto usando il sistema di localizzazione di Nylo Website.

Invece di scrivere:

Text("hello_world".tr())

Puoi scrivere:

TextTr("hello_world")

Questo rende il tuo codice piu' pulito e leggibile, specialmente quando hai a che fare con molte stringhe tradotte.

Utilizzo Base

@override
Widget build(BuildContext context) {
  return Column(
    children: [
      TextTr("welcome_message"),

      TextTr(
        "app_title",
        style: TextStyle(fontSize: 24, fontWeight: FontWeight.bold),
        textAlign: TextAlign.center,
      ),
    ],
  );
}

Il widget cerchera' la chiave di traduzione nei tuoi file di lingua (es. /lang/en.json):

{
  "welcome_message": "Welcome to our app!",
  "app_title": "My Application"
}

Interpolazione di Stringhe

Usa il parametro arguments per inserire valori dinamici nelle tue traduzioni:

TextTr(
  "greeting",
  arguments: {"name": "John"},
)

Nel tuo file di lingua:

{
  "greeting": "Hello, {{name}}!"
}

Output: Hello, John!

Argomenti Multipli

TextTr(
  "order_summary",
  arguments: {
    "item": "Coffee",
    "quantity": "2",
    "total": "\$8.50",
  },
)
{
  "order_summary": "You ordered {{quantity}}x {{item}} for {{total}}"
}

Output: You ordered 2x Coffee for $8.50

Costruttori con Stile

TextTr fornisce costruttori nominati che applicano automaticamente stili di testo dal tuo tema:

displayLarge

TextTr.displayLarge("page_title")

Usa lo stile Theme.of(context).textTheme.displayLarge.

headlineLarge

TextTr.headlineLarge("section_heading")

Usa lo stile Theme.of(context).textTheme.headlineLarge.

bodyLarge

TextTr.bodyLarge("paragraph_text")

Usa lo stile Theme.of(context).textTheme.bodyLarge.

labelLarge

TextTr.labelLarge("button_label")

Usa lo stile Theme.of(context).textTheme.labelLarge.

Esempio con Costruttori con Stile

@override
Widget build(BuildContext context) {
  return Column(
    crossAxisAlignment: CrossAxisAlignment.start,
    children: [
      TextTr.headlineLarge("welcome_title"),
      SizedBox(height: 16),
      TextTr.bodyLarge(
        "welcome_description",
        arguments: {"app_name": "MyApp"},
      ),
      SizedBox(height: 24),
      TextTr.labelLarge("get_started"),
    ],
  );
}

Parametri

TextTr supporta tutti i parametri standard del widget Text:

Parametro Tipo Descrizione
data String La chiave di traduzione da cercare
arguments Map<String, String>? Coppie chiave-valore per l'interpolazione di stringhe
style TextStyle? Stile del testo
textAlign TextAlign? Come il testo deve essere allineato
maxLines int? Numero massimo di righe
overflow TextOverflow? Come gestire l'overflow
softWrap bool? Se mandare a capo il testo ai punti di interruzione morbidi
textDirection TextDirection? Direzione del testo
locale Locale? Locale per il rendering del testo
semanticsLabel String? Etichetta per l'accessibilita'

Confronto

Approccio Codice
Tradizionale Text("hello".tr())
TextTr TextTr("hello")
Con argomenti TextTr("hello", arguments: {"name": "John"})
Con stile TextTr.headlineLarge("title")