BottomNavigationBar项目的Flutter定位

yquaqz18  于 2023-03-24  发布在  Flutter
关注(0)|答案(2)|浏览(101)

我正在创建一个本地化的应用程序,在主页上有一个底部导航栏。如果我更改本地化,BottomNavigationBar的项目名称不会更新,直到单击其中一个。我如何更新底部栏?我错过了什么?
代码:

@override
Widget build(BuildContext context) {
 return BottomNavigationBar(
  onTap: onTabTapped,
  type: BottomNavigationBarType.fixed,
  // new
  currentIndex: _currentIndex,
  selectedFontSize: 12,
  unselectedFontSize: 12,
  elevation: 10,
  showSelectedLabels: true,
  showUnselectedLabels: true,

  items: [
    new BottomNavigationBarItem(
      icon: Icon(MyFlutterAppIOS.share_100, color: Colors.blueGrey),
      title: Text(
        allTranslations.text("sharetitle"),
        style: TextStyle(
          color: Colors.blueGrey,
        ),
      ),
    ),
    new BottomNavigationBarItem(
      icon: Icon(MyFlutterAppIOS.protect_100, color: Colors.blueGrey),
      title: Text(
        allTranslations.text("lblprivacypolicy"),
        style: TextStyle(
          color: Colors.blueGrey,
        ),
      ),
    ),
    new BottomNavigationBarItem(
      icon: Icon(MyFlutterAppIOS.protect_100, color: Colors.blueGrey),
      title: Text(
        allTranslations.text("lblterms"),
        style: TextStyle(
          color: Colors.blueGrey,
        ),
      ),
    ),
    new BottomNavigationBarItem(
      icon: Icon(MyFlutterAppIOS.info_100, color: Colors.blueGrey),
      title: Text(
        allTranslations.text("lblinfo"),
        style: TextStyle(color: Colors.blueGrey),
      ),
    )
  ],

 );
}
wlwcrazw

wlwcrazw1#

这是因为您不会以任何方式重新构建此小部件。一旦更改语言,您需要重新构建此小部件。您可以使用任何状态管理库(如BLOC或提供程序)在更新语言后通知此小部件的更改。因此,当您单击任何项目时,它都会重新构建,然后您就会看到更改。

ChangeNotifierProvider(
      create: (context) => AppLevelProvider(),
      child: BottomNavigationBar(),
 ),

您也可以在此处使用现有提供程序并通知更改。请阅读有关状态管理here的更多信息

fcg9iug3

fcg9iug32#

我在将BottomNavigationBar Package 到Localizations.override时解决了这个问题

bottomNavigationBar: Localizations.override(
            context: context,
            locale: context.locale,
            child: CustomBottomNavigationBar(
            ),
          ),

同样重要的是,这些元素在build方法中...例如:

Widget build(BuildContext context) {
List<_BottomNavigationBarItem> items = [
  _BottomNavigationBarItem(
    iconSelectedPath: AppIcons.report_dark,
    iconNoSelectedPath: AppIcons.report_white,
    title: LocaleKeys.report.tr(),
  ),
  _BottomNavigationBarItem(
    iconSelectedPath: AppIcons.home_dark,
    iconNoSelectedPath: AppIcons.home_white,
    title: LocaleKeys.home.tr(),
  ),
  _BottomNavigationBarItem(
    iconSelectedPath: AppIcons.settings_dark,
    iconNoSelectedPath: AppIcons.settings_white,
    title: LocaleKeys.settings.tr(),
  ),
];
...

}

相关问题