CupertinoTabBar requiere un padre Localizations
Para proporcionar semánticas apropiadas para la configuración regional (locale), CupertinoTabBar requiere un padre Localizations.
Resumen
#Las instancias de CupertinoTabBar deben tener un
padre Localizations para proporcionar una pista de
Semantics localizada. Intentar instanciar un
CupertinoTabBar sin localizaciones
da como resultado una aserción como la siguiente:
CupertinoTabBar requires a Localizations parent in order to provide an appropriate Semantics hint
for tab indexing. A CupertinoApp provides the DefaultCupertinoLocalizations, or you can
instantiate your own Localizations.
'package:flutter/src/cupertino/bottom_tab_bar.dart':
Failed assertion: line 213 pos 7: 'localizations != null'
Contexto
#Para admitir información de semántica localizada,
el CupertinoTabBar requiere localizaciones.
Antes de este cambio, la pista de Semantics proporcionada
al CupertinoTabBar era una String embebida,
'tab, $index of $total'. El contenido de la pista de semántica
también se actualizó de esta String original
a 'Tab $index of $total' en inglés.
Si tu CupertinoTabBar está dentro del alcance
de una CupertinoApp, la DefaultCupertinoLocalizations
ya está instanciada y puede adaptarse a tus
necesidades sin tener que realizar cambios en tu código existente.
Si tu CupertinoTabBar no está dentro de una CupertinoApp,
puedes proporcionar las localizaciones que
elijas utilizando el widget Localizations.
Guía de migración
#Si estás viendo un error de aserción 'localizations != null',
asegúrate de que se esté proporcionando información de configuración regional
a tu CupertinoTabBar.
Código antes de la migración:
import 'package:flutter/cupertino.dart';
void main() => runApp(Foo());
class Foo extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MediaQuery(
data: const MediaQueryData(),
child: CupertinoTabBar(
items: const <BottomNavigationBarItem>[
BottomNavigationBarItem(
icon: Icon(CupertinoIcons.add_circled),
label: 'Tab 1',
),
BottomNavigationBarItem(
icon: Icon(CupertinoIcons.add_circled_solid),
label: 'Tab 2',
),
],
currentIndex: 1,
),
);
}
}
Código después de la migración (Proporcionando localizaciones a través de la CupertinoApp):
import 'package:flutter/cupertino.dart';
void main() => runApp(Foo());
class Foo extends StatelessWidget {
@override
Widget build(BuildContext context) {
return CupertinoApp(
home: CupertinoTabBar(
items: const <BottomNavigationBarItem>[
BottomNavigationBarItem(
icon: Icon(CupertinoIcons.add_circled),
label: 'Tab 1',
),
BottomNavigationBarItem(
icon: Icon(CupertinoIcons.add_circled_solid),
label: 'Tab 2',
),
],
currentIndex: 1,
),
);
}
}
Código después de la migración (Proporcionando localizaciones utilizando
el widget Localizations):
import 'package:flutter/cupertino.dart';
void main() => runApp(Foo());
class Foo extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Localizations(
locale: const Locale('en', 'US'),
delegates: <LocalizationsDelegate<dynamic>>[
DefaultWidgetsLocalizations.delegate,
DefaultCupertinoLocalizations.delegate,
],
child: MediaQuery(
data: const MediaQueryData(),
child: CupertinoTabBar(
items: const <BottomNavigationBarItem>[
BottomNavigationBarItem(
icon: Icon(CupertinoIcons.add_circled),
label: 'Tab 1',
),
BottomNavigationBarItem(
icon: Icon(CupertinoIcons.add_circled_solid),
label: 'Tab 2',
),
],
currentIndex: 1,
),
),
);
}
}
Timeline
#Introducido en la versión: 1.18.0-9.0.pre
En la versión estable: 1.20.0
Referencias
#Documentación de la API:
-
CupertinoTabBar -
Localizations -
DefaultCupertinoLocalizations Semantics-
CupertinoApp - Internacionalización de aplicaciones Flutter
PR relevante:
A menos que se indique lo contrario, la documentación de este sitio refleja Flutter 3.44.0. Página actualizada por última vez el 2026-05-05. Ver código fuente oreportar un problema.