关于flutter如何保存页面选择状态的问题

问题描述

当我点击语言切换按钮的时,跳转会跳转到首页,当从首页在进入到语言选择页面的时候,语言选择页面会重置,导致当前语言和语言选择页面对不上。
图片演示:

clipboard.png

clipboard.png

clipboard.png

clipboard.png

自己尝试过哪些方法

我尝试过 with AutomaticKeepAliveClientMixin bool get wantKeepAlive => true;来保存页面的状态,但是无效
我尝试过用IndexedStack,无效
我尝试过Offstage,无效

相关代码

// 请把代码文本粘贴到下方(请勿用图片代替代码)
此代码为语言切换页面:

class Language extends StatefulWidget {
  Language({
    Key key
  }): super(key: key);
  static final String sName = "language";
  // createState() => new LanguageState();
  _LanguageState createState() => _LanguageState();
}
class _LanguageState extends State < Language > with AutomaticKeepAliveClientMixin {
  var englishivisible = false; //控制中英文切换按钮的显示隐藏
  var chinesevisible = true; //控制中英文切换按钮的显示隐藏
  @override
  bool get wantKeepAlive => true;
  @override
  Widget build(BuildContext context) {
    // TODO: implement build
    return Scaffold(
      appBar: AppBar(
        title: Text(Translations.of(context).text("language_setting"), style: TextStyle(color: Colors.grey[700]), ),
        centerTitle: true,
        backgroundColor: Colors.white,
      ),
      body:
      Column(
        ///主轴居中,即是竖直向居中
        mainAxisAlignment: MainAxisAlignment.start,
        ///大小按照最小显示
        mainAxisSize: MainAxisSize.min,
        ///横向也居中
        crossAxisAlignment: CrossAxisAlignment.start,
        children: < Widget > [
          Padding(padding: EdgeInsets.only(top: 10.0), ),
          new ListTile(
            onTap: () {
              applic.onLocaleChanged(new Locale('en', '')); //转换英文
              Navigator.pushNamed(context, "home"); //回到首页
              setState(() {
                englishivisible = false;
                chinesevisible = true;
              });
            },
            title: new Text(
              'English',
            ),
            leading: new Icon(
              Icons.format_align_left,
              color: Color(0XFF599FB4)
            ),
            trailing: new Icon(Icons.done, color: Color(chinesevisible ? 0XFF599FB4 : 0xffffff), ),
          ),
          new Divider(),
          new ListTile(
            onTap: () {
              applic.onLocaleChanged(new Locale('fr', '')); //转换成中文
              Navigator.pushNamed(context, "home");
              setState(() {
                englishivisible = true;
                chinesevisible = false;
              });
            },
            title: new Text(
              '简体中文(中国)',
            ),
            leading: new Icon(
              Icons.format_align_left,
              color: Color(0XFF599FB4)
            ),
            trailing: Icon(Icons.done, color: Color(englishivisible ? 0XFF599FB4 : 0xffffff), ),
          ),
          new Divider(),
        ],
      ),
    );

  }
}

希望您能帮得到我,不胜感激

阅读 4.7k
1 个回答
新手上路,请多包涵

因为进入首页后,选择语言的Widget以及其State已经销毁。你可以把当前选择的语言保存到sharedprefrence里面。在initState的时候读取一下

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题