easy_localization
easy_localization copied to clipboard
When use PageView, only first page can be reload success
I use pageview in mainPage, and in SettingPage change lungange by
await context.setLocale(const Locale("zh"));
and return to the mainPage, ony onePage has change to zh, another page still english
ps: mainPage contain three pages use pageview
var pages = [const HomePage(), const ToolPage(), const SavedPage()];
DateTime? _lastPressedAt;
@override
void initState() {
super.initState();
}
@override
Widget build(BuildContext context) {
var titles = ["tab_home".tr(), "tab_tool".tr(), "tab_vip".tr(), "tab_me".tr()];
return WillPopScope(
child: Material(
child: Column(
children: <Widget>[
Expanded(
child: PageView.builder(
physics: const NeverScrollableScrollPhysics(),
itemBuilder: itemBuilder,
itemCount: titles.length,
controller: _pageController,
),
),
SizedBox(
child: Material(
color: Colors.white,
child: SafeArea(
top: false,
child: Column(
mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.stretch,
children: <Widget>[
Divider(
height: 0.5,
color: Theme.of(context).dividerColor,
),
SizedBox(
height: 48.w,
child: Row(
children: pages.map((x) => buildTab(pages.indexOf(x))).toList(),
),
),
],
),
),
),
),
],
),
),
onWillPop: () async {
if (_currentIndex != 0) {
setState(() {
_currentIndex = 0;
});
await _pageController.animateToPage(0, duration: const Duration(milliseconds: 200), curve: Curves.ease);
return false;
}
if (_lastPressedAt == null || DateTime.now().difference(_lastPressedAt!) > const Duration(seconds: 1)) {
_lastPressedAt = DateTime.now();
showToast(context, "exit_tip".tr());
return false; // 阻止返回
}
return true;
},
);
}
Widget buildTab(int index) {
var titles = ["tab_home".tr(), "tab_tool".tr(), "tab_save".tr()];
return Expanded(
child: GestureDetector(
behavior: HitTestBehavior.opaque,
child: Container(
alignment: Alignment.center,
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: <Widget>[
SizedBox(
width: 25.w,
height: 20.w,
child: Stack(
children: <Widget>[
Positioned(
left: 2.5,
child: ImageIcon(
AssetImage(tabImages[index]),
color: _currentIndex == index ? Colors.blue : Colors.black87,
size: 20.w,
),
),
],
),
),
Padding(
padding: EdgeInsets.only(top: 1.w),
child: Text(
titles[index],
style: TextStyle(color: _currentIndex == index ? Colors.blue : Colors.black87, fontSize: 12.w),
),
)
],
),
),
onTap: () async {
setState(() {
_currentIndex = index;
});
await _pageController.animateToPage(index, duration: const Duration(milliseconds: 200), curve: Curves.ease);
},
),
);
}
Widget itemBuilder(BuildContext context, int index) {
return pages[index];
}
when i reboot app, three pages changed to zh
I also encountered this issue, which appeared on the language selection page. After testing, I found that adding a context in the tr method in pages that cannot be refreshed immediately can solve this problem. Below is an example code :
"exit_tip".tr(context: context)