easy_localization icon indicating copy to clipboard operation
easy_localization copied to clipboard

When use PageView, only first page can be reload success

Open badboy-tian opened this issue 2 years ago • 2 comments

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];
  }

badboy-tian avatar Mar 13 '23 07:03 badboy-tian

when i reboot app, three pages changed to zh

badboy-tian avatar Mar 13 '23 07:03 badboy-tian

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)

InTheClodus avatar Apr 03 '24 05:04 InTheClodus