问题描述
当我点击语言切换按钮的时,跳转会跳转到首页,当从首页在进入到语言选择页面的时候,语言选择页面会重置,导致当前语言和语言选择页面对不上。
图片演示:
自己尝试过哪些方法
我尝试过 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(),
],
),
);
}
}
希望您能帮得到我,不胜感激
因为进入首页后,选择语言的Widget以及其State已经销毁。你可以把当前选择的语言保存到sharedprefrence里面。在initState的时候读取一下