No MaterialLocalizations found. Easy localizations с использованием route в Flutter

Я использую 'package:easy_localization/easy_localization.dart' для перевода своего приложения, текста немного, поддержка всего двух языков. Если смотреть примеры для модуля easy_localization, то всё сводится к тому, что есть одна страница и на ней прекрасно всё работает, так и в моём случае - на одной странице всё работает, а далее - нет. Я использую именованный роутинг. При переходе по '/' - это страница авторизации, т.к. я уже вошёл, перенаправляюсь на '/home' - на этой странице всё хорошо, текст переводится. При переходе с '/home' по кнопке на '/search_plate', получаю ошибку No MaterialLocalizations found. AppBar widgets require MaterialLocalizations to be provided by a Localizations widget ancestor.

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await Firebase.initializeApp();
  await EasyLocalization.ensureInitialized();
  runApp(EasyLocalization(
    startLocale: const Locale('ua'),
    useFallbackTranslations: true,
    fallbackLocale: const Locale('ua'),
    supportedLocales: const [
      Locale('ua'),
      Locale('ru'),
    ],
    path: 'assets/languages',
    child: const FlutterApp(),
  ));
}

class FlutterApp extends StatelessWidget {
  const FlutterApp({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      localizationsDelegates: context.localizationDelegates,
      supportedLocales: context.supportedLocales,
      locale: context.locale,
      theme: ThemeData(
        primarySwatch: Colors.grey,
        primaryColorDark: const Color.fromRGBO(50, 65, 85, 1),
        //textTheme: TextTheme() надо доделать
      ),
      initialRoute: '/',
      routes: {
        '/': (context) => const SignInScreen(),
        '/home': (context) => const Home(),
        '/search_plate': (context) => const SearchPlate(),
        '/recognition': (context) => const Recognition(),
      },
    );
  }
}

Переход с '/home' на '/search_plate:

Navigator.pushNamed(context, '/search_plate');

'/search_plate'

class SearchPlate extends StatefulWidget {
  const SearchPlate({Key? key}) : super(key: key);

  @override
  State<SearchPlate> createState() => _SearchPlateState();
}

class _SearchPlateState extends State<SearchPlate> {
    return Scaffold(
      backgroundColor: const Color.fromRGBO(50, 65, 85, 1),
      appBar: AppBar(
        title: const Text('search_plate').tr(),
        centerTitle: true,
        backgroundColor: const Color.fromRGBO(50, 65, 85, 1),
      ),
      body: Builder(
        builder: (context) => Column(
          children: [
            Padding(
              padding: const EdgeInsets.all(10),
              child: Align(
                alignment: Alignment.topCenter,
                child: const Text('search').tr(),
                ),
            ),
            if (_isSearching)
              const CircularProgressIndicator(
                strokeWidth: 2.0,
                color: Colors.orange,
              ),
            if (!_isSearching) Expanded(child: carInfoWidget),
          ],
        ),
      ),
    );
  }
}

Ответы (1 шт):

Автор решения: Александр Щучко

Locale('ua') - это неверно, недостаточно просто так назвать файл, а потом указать это как локаль, существуют стандарты указания локали, правильно Locale('uk'),надо так и файл называть, тогда подтягивается локаль для всех сложных элементов, как то поле ввода, например контекстное меню: в файле это не прописано, но по uk мы получаем полный перевод из системы, теперь не будет "Paste", а будет "вставити". Вот такая мелочь, а возни на два дня.

→ Ссылка