首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用GETX封装颤振改变app语言后的切换开关不改变位置

使用GETX封装颤振改变app语言后的切换开关不改变位置
EN

Stack Overflow用户
提问于 2022-01-03 07:03:00
回答 2查看 711关注 0票数 -1

我在我的应用程序中有一个切换开关,用户在那里点击以改变语言。在我看来,我使用的是交换机包。我的看法如下:

代码语言:javascript
复制
    class Welcome extends GetView<WelcomeController> {
      final WelcomeController _controller = Get.put(WelcomeController());
      Welcome({Key? key}) : super(key: key);
    
      @override
      Widget build(BuildContext context) {
        var _toggleValue = 0.obs;
 
        return Scaffold(
          body: Obx(() => Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: [
              Text('Toggle Value : ${_controller.selectedLanguage.value}'),
              ToggleSwitch(
                minWidth: 90.0,
                cornerRadius: 20.0,
                activeBgColors: [[Colors.cyan], [Colors.redAccent]],
                activeFgColor: Colors.white,
                inactiveBgColor: Colors.grey,
                inactiveFgColor: Colors.white,
                totalSwitches: 2,
                labels: ['English', 'Bangla'],
                onToggle: (index) {
                  print('switched to: $index');
                  changeLanguage(index);
                },
              ),
            //some other widgets
            ],
          ))
        );
      }
    
      void changeLanguage(int value) {
        if (value == 0) {
          _controller.changeLang('en');
        } else {
          _controller.changeLang('bn');
        }
      }
    
    }

我的控制器具有changeLang函数,它执行以下操作:

代码语言:javascript
复制
class WelcomeController extends GetxController{
  var selectedLanguage = Get.locale!.languageCode.obs;

  void changeLang(String lang) {
    Locale locale = Locale(lang);
    Get.updateLocale(locale);
    selectedLanguage.value = lang;
  }
}

如果在切换onToggle函数中使用上述函数,则切换位置不会移动到选定的当前索引,颜色也不会改变,但每当我单击英语或孟加拉语时,语言就会改变。我做错了什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-01-03 10:31:40

首先在控制器中分配toggleValue,如

代码语言:javascript
复制
enter code here

然后在ToggleSwitch中添加如下行:

代码语言:javascript
复制
initialLabelIndex: _controller.toggleValue.value

添加以下更新方法

代码语言:javascript
复制
void  changeLanguage(int value) {
   _controller.toggleValue.value = value;
   if (value == 0) {
     _controller.changeLang('en');
   } else {
     _controller.changeLang('bn');
   }
}
票数 0
EN

Stack Overflow用户

发布于 2022-01-03 09:09:05

为了让开关工作,move the setState(() {}) outside of Switch in a callback function

代码语言:javascript
复制
// Switch  Widget
    Switch( value: _toggleState,
            onChanged: _attemptChange,
            ),
    
//Callback
 void _attemptChange(bool newState) {
    setState(() {
      _toggleState = newState;
      newState ? _switchCase = 'ON' : _switchCase = 'OFF';
    });

或者你可以使用CupertinoSwitch,它具有价值属性

代码语言:javascript
复制
set variable in your controller


              CupertinoSwitch(
                        value: controller.boolVal,
                        onChanged: (bool value) {
                 /// change your variable value in controller       
                  }
                );
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70562560

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档