Метод override
Метод override виджета
Localizations он принимает context, новую
Locale
и child.
Делегаты берут из существующего Localizations,
меняется только язык для части экрана.
Синтаксис
Localizations.override(
context: context,
locale: const Locale('de'),
child: child,
)
Параметры
| Параметр | Описание |
|---|---|
context |
BuildContext, из которого читают delegates.
|
locale |
Новая локаль для child. Тип Locale.
|
child |
Поддерево с подменённой локалью. |
Пример
Давайте покажем немецкую локаль только в одном блоке:
import 'package:flutter/material.dart';
class MixedLocale extends StatelessWidget
{
const MixedLocale({super.key});
@override
Widget build(BuildContext context)
{
return Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text(
Localizations.localeOf(context).languageCode,
),
Localizations.override(
context: context,
locale: const Locale('de'),
child: Builder(
builder: (ctx) {
return Text(
Localizations.localeOf(ctx).languageCode,
);
},
),
),
],
);
}
}
void main()
{
runApp(
MaterialApp(
locale: const Locale('en'),
home: Scaffold(
body: Center(
child: MixedLocale(),
),
),
),
);
}
На экране сверху 'en', снизу после override - 'de'.
Пример
Давайте вернуть null в locale и снова взять язык приложения:
import 'package:flutter/material.dart';
void main()
{
runApp(
MaterialApp(
locale: const Locale('en'),
home: Scaffold(
body: Builder(
builder: (context) {
return Localizations.override(
context: context,
locale: null,
child: Builder(
builder: (ctx) {
var code =
Localizations.localeOf(ctx).languageCode;
return Center(child: Text(code));
},
),
);
},
),
),
),
);
}
На экране по центру снова 'en', как у корневого MaterialApp.
Смотрите также
-
метод
localeOf,
который читаетLocaleпослеoverride -
виджет
Localizations,
которыйoverrideвременно заменяет -
класс
Locale,
который передают вoverride -
класс
GlobalWidgetsLocalizations,
чьи строки подхватят новую локаль