【问题标题】:How do implement a DropdownButton using Getx in Flutter如何在 Flutter 中使用 Getx 实现 DropdownButton
【发布时间】:2021-07-06 05:18:47
【问题描述】:

我正在尝试使用两个下拉菜单(西班牙语和英语)实现 DropdownButton。

我希望用户选择一种语言并将其发送回 getx 翻译,以更改应用程序的语言。

这是我的控制器:

import 'package:get/get.dart';

class DropdownController extends GetxController {
  String selectedValue;

  var language = <String>['English', 'Espanol'];

  void onSelected(String value) {
    selectedValue = value;
  }
}

这是我的设置页面

class SettingsScreen extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return GetBuilder<DropdownController>(builder: (controller) {
      return Scaffold(
        body: Column(children: [
          Text('Select Language: '),
          SizedBox(height: 10.0),
          DropdownButton<String>(
              hint: Text('Language'),
              value: controller.selectedValue,
              onChanged: (newValue) {
                controller.onSelected(newValue);
              },
              elevation: 10,
              items: [
                DropdownMenuItem(
                  child: Text("English"),
                  value: controller.selectedValue,
                ),
                DropdownMenuItem(
                  child: Text("ESpanol"),
                  value: controller.selectedValue,
                ),
              ]),
        ]),
      );
    });
  }
}

【问题讨论】:

    标签: flutter dart state flutter-getx


    【解决方案1】:

    控制器:

    class DropdownController extends GetxController {
        String? selectedValue;
    
        var language = <String>['English', 'Espanol'];
    
        void onSelected(String value) {
        selectedValue = value;
    
        update();
    
        print(selectedValue);
        changeLanguage(selectedValue);
      }
    
      changeLanguage(String? selectedLanguage) {
         switch (selectedLanguage) {
         case 'English':
           Get.updateLocale(Locale('en_US'));
           print('Changed to En');
           break;
         case 'Espanol':
           Get.updateLocale(Locale('en_US'));
           print('Changed to Es');
           break;
         default:
           Get.updateLocale(Locale('en_US'));
           print('Fallback to En');
           break;
        }
      }
    }
    

    设置页面:

    class SettingsScreen extends StatelessWidget {
       @override
       Widget build(BuildContext context) {
          return GetBuilder<DropdownController>(builder: (controller) {
            return Scaffold(
               body: Column(children: [
                 Text('Select Language: '),
                 SizedBox(height: 10.0),
                 DropdownButton<String>(
                   hint: Text('Language'),
                   value: controller.selectedValue,
                   onChanged: (newValue) {
                   controller.onSelected(newValue!);
                   },
                   elevation: 10,
                   items: [
                     DropdownMenuItem(
                      child: Text("English"),
                      value: 'English',
                     ),
                     DropdownMenuItem(
                       child: Text("ESpanol"),
                       value: 'Espanol',
                     ),
                  ]),
               ]),
             );
          });
        }
      }
    

    【讨论】:

      猜你喜欢
      • 2021-06-07
      • 1970-01-01
      • 2021-01-17
      • 2022-12-09
      • 2021-11-11
      • 2021-12-28
      • 1970-01-01
      • 2021-03-06
      • 2022-12-14
      相关资源
      最近更新 更多