Flutter 颤振状态窗口小部件获取下拉按钮的值

Flutter 颤振状态窗口小部件获取下拉按钮的值,flutter,dart,Flutter,Dart,我是Dart新手,试图从DropdownButton小部件中提取值,但遇到了问题。我肯定我错过了什么 class ChooseBagNum extends StatefulWidget{ @override _ChooseBagNumState createState(){ return _ChooseBagNumState(); } String get sValue{ return _ChooseBagNumState.selectedValue; }

我是Dart新手,试图从DropdownButton小部件中提取值,但遇到了问题。我肯定我错过了什么

class ChooseBagNum extends StatefulWidget{

  @override
  _ChooseBagNumState createState(){
    return _ChooseBagNumState();
  }
  String get sValue{
    return _ChooseBagNumState.selectedValue;
  }
}

class _ChooseBagNumState extends State<ChooseBagNum> {
  String _value;
  String selectedValue='test';

  @override
  Widget build(BuildContext context) {
    return Center(
      child: DropdownButton<String>(
        items: [
          DropdownMenuItem<String>(
            child: Text('1'),
            value: '1',
          ),
          DropdownMenuItem<String>(
            child: Text('2'),
            value: '2',
          ),
          DropdownMenuItem<String>(
            child: Text('3'),
            value: '3',
          ),
          DropdownMenuItem<String>(
            child: Text('4'),
            value: '4',
          ),
        ],
        onChanged: (String value) {
          setState(() {
            _value = value;
            selectedValue= value;
          });
        },
        hint: Text('Enter number of bags'),
        value: _value,
      ),
    );
  }

}
我得到这个错误:
错误:无法使用静态访问访问实例成员“selectedValue”。

列表_categories=['b','a']; 字符串\u选择的类别

在正文中添加此代码\

下拉按钮窗体字段( 提示:文本( “添加您的标题” ), 装饰:输入装饰( 是的, ), 值:\ u选择的类别, 项目:_categories.map((位置){ 返回下拉菜单项( 子:文本( 位置, ), 价值:位置, ); }).toList(), 一旦更改:(newValue){ 设置状态(){ _selectedCategories=新值; }); },
),

列出类别=['b','a']; 字符串\u选择的类别

在正文中添加此代码\

下拉按钮窗体字段( 提示:文本( “添加您的标题” ), 装饰:输入装饰( 是的, ), 值:\ u选择的类别, 项目:_categories.map((位置){ 返回下拉菜单项( 子:文本( 位置, ), 价值:位置, ); }).toList(), 一旦更改:(newValue){ 设置状态(){ _selectedCategories=新值; }); },
),

根据我的理解,您需要从父窗口小部件获取所选值。在这种情况下,您应该在接收字符串时传递回调函数。然后在
onChanged
事件中调用该函数

大概是这样的:

class ChooseBagNum extends StatefulWidget {
  // pass a callback to your widget to be able to get the selected value from a parent
  final Function(string) onValueSelected;

  ChooseBagNum({this.onValueSelected});

  @override
  _ChooseBagNumState createState() => _ChooseBagNumState();
}

class _ChooseBagNumState extends State<ChooseBagNum> {
  String _value;

  @override
  Widget build(BuildContext context) {
    return Center(
      child: DropdownButton<String>(
        items: [
          DropdownMenuItem<String>(
            child: Text('1'),
            value: '1',
          ),
          DropdownMenuItem<String>(
            child: Text('2'),
            value: '2',
          ),
          DropdownMenuItem<String>(
            child: Text('3'),
            value: '3',
          ),
          DropdownMenuItem<String>(
            child: Text('4'),
            value: '4',
          ),
        ],
        onChanged: (String value) {
          setState(() {
            _value = value;
            widget.onValueSelected(value); // call the function passing the value
          });
        },
        hint: Text('Enter number of bags'),
        value: _value,
      ),
    );
  }
}
class ChooseBagNum扩展StatefulWidget{
//将回调传递给小部件,以便能够从父级获取所选值
最终函数(字符串)onValueSelected;
选择agnum({this.onValueSelected});
@凌驾
_ChooseBagNumState createState()=>\u ChooseBagNumState();
}
类_ChooseBagNumState扩展状态{
字符串_值;
@凌驾
小部件构建(构建上下文){
返回中心(
孩子:下拉按钮(
项目:[
下拉菜单项(
子项:文本('1'),
值:“1”,
),
下拉菜单项(
子项:文本('2'),
值:“2”,
),
下拉菜单项(
子项:文本('3'),
值:“3”,
),
下拉菜单项(
子项:文本('4'),
值:“4”,
),
],
onChanged:(字符串值){
设置状态(){
_价值=价值;
widget.onValueSelected(value);//调用传递值的函数
});
},
提示:文本(“输入行李数量”),
值:_值,
),
);
}
}

根据我的理解,您需要从父窗口小部件获取所选值。在这种情况下,您应该在接收字符串时传递回调函数。然后在
onChanged
事件中调用该函数

大概是这样的:

class ChooseBagNum extends StatefulWidget {
  // pass a callback to your widget to be able to get the selected value from a parent
  final Function(string) onValueSelected;

  ChooseBagNum({this.onValueSelected});

  @override
  _ChooseBagNumState createState() => _ChooseBagNumState();
}

class _ChooseBagNumState extends State<ChooseBagNum> {
  String _value;

  @override
  Widget build(BuildContext context) {
    return Center(
      child: DropdownButton<String>(
        items: [
          DropdownMenuItem<String>(
            child: Text('1'),
            value: '1',
          ),
          DropdownMenuItem<String>(
            child: Text('2'),
            value: '2',
          ),
          DropdownMenuItem<String>(
            child: Text('3'),
            value: '3',
          ),
          DropdownMenuItem<String>(
            child: Text('4'),
            value: '4',
          ),
        ],
        onChanged: (String value) {
          setState(() {
            _value = value;
            widget.onValueSelected(value); // call the function passing the value
          });
        },
        hint: Text('Enter number of bags'),
        value: _value,
      ),
    );
  }
}
class ChooseBagNum扩展StatefulWidget{
//将回调传递给小部件,以便能够从父级获取所选值
最终函数(字符串)onValueSelected;
选择agnum({this.onValueSelected});
@凌驾
_ChooseBagNumState createState()=>\u ChooseBagNumState();
}
类_ChooseBagNumState扩展状态{
字符串_值;
@凌驾
小部件构建(构建上下文){
返回中心(
孩子:下拉按钮(
项目:[
下拉菜单项(
子项:文本('1'),
值:“1”,
),
下拉菜单项(
子项:文本('2'),
值:“2”,
),
下拉菜单项(
子项:文本('3'),
值:“3”,
),
下拉菜单项(
子项:文本('4'),
值:“4”,
),
],
onChanged:(字符串值){
设置状态(){
_价值=价值;
widget.onValueSelected(value);//调用传递值的函数
});
},
提示:文本(“输入行李数量”),
值:_值,
),
);
}
}

我想我正在使用回调功能,但仍有以下错误。这就是我得到的错误:E/flatter(28636):[error:flatter/lib/ui/ui\u dart\u state.cc(157)]未处理的异常:NoSuchMethodError:方法“call”在null上被调用。E/flatter(28636):接收器:空E/flatter(28636):尝试呼叫:呼叫(“2”)E/flatter(28636):#0 Object.noSuchMethod(dart:core patch/Object_patch.dart:53:5)嗨!如果您还没有解决这个问题,您能告诉我们如何使用
ChooseBagNum
小部件吗?我想我正在使用回调功能,但我仍然有以下错误。这就是我得到的错误:E/flatter(28636):[error:flatter/lib/ui/ui\u dart\u state.cc(157)]未处理的异常:NoSuchMethodError:方法“call”在null上被调用。E/flatter(28636):接收器:空E/flatter(28636):尝试呼叫:呼叫(“2”)E/flatter(28636):#0 Object.noSuchMethod(dart:core patch/Object_patch.dart:53:5)嗨!如果你还没有解决这个问题,你能告诉我们你是怎么解决的吗