Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 如何返回StatefulWidget包含的值以在ListView.builder中使用它?_Flutter_Dart - Fatal编程技术网

Flutter 如何返回StatefulWidget包含的值以在ListView.builder中使用它?

Flutter 如何返回StatefulWidget包含的值以在ListView.builder中使用它?,flutter,dart,Flutter,Dart,我有一个问题,碰巧我有一个StatefulWidget,其方法返回一个ListView.builder ListView.builder,它有一列和两个子项:textField,还有一行和两个收音机 RadioButton是在另一个StatefulWidget中构建的,对于这个StatefulWidget,我对已选择的值感兴趣,但我需要在以前的StatefulWidget中使用这个返回值 我不知道除了返回一个widget来返回另一个值之外,是否还有一种方法可以让一个StatefulWidgetw

我有一个问题,碰巧我有一个
StatefulWidget
,其方法返回一个
ListView.builder

ListView.builder
,它有一列和两个子项:
textField
,还有一行和两个
收音机

RadioButton是在另一个
StatefulWidget
中构建的,对于这个StatefulWidget,我对已选择的值感兴趣,但我需要在以前的
StatefulWidget
中使用这个返回值

我不知道除了返回一个widget来返回另一个值之外,是否还有一种方法可以让一个
StatefulWidget
wigdet返回另一个值,请帮助我

以下是ListView.builder:

ListView.builder(
滚动方向:轴垂直,
收缩膜:对,
itemCount:preguntas.secciones[0]。preguntas.length,
itemBuilder:(构建上下文,int i){
最终预测=问题列表[i];
返回列(
crossAxisAlignment:crossAxisAlignment.start,
儿童:[
文本(pregunta.description,
样式:TextStyle(fontFamily:“OpenSans粗体”),
RadioButtom(),
TextFormField(
启用:
(!\u radioValue&&pregunta.respuestas[0]。pregunta.obligatoria)
?错误
:没错,
验证器:(值){
if(pregunta.respuestas[0]。pregunta.obligatoria==true&&
值(i空){
返回“Por-favor Ingree texto”;
}
返回null;
},
装饰:输入装饰(
Hintmaxline:500,
hintText:pregunta.respuestas[0]。pregunta.Description,
辛茨风格:
TextStyle(fontFamily:“OpenSans常规”,fontSize:14.0),
),
一旦更改:(值){
preguntasGlobal=preguntas;
//preguntasGlobal[i]。respuestas[0]。comentario=value;
//preguntasGlobal[i]。respuestas[0]。respuesta=true;
},
),
尺寸箱(高度:20.0)
],
);
},
);
这是RadioButtom StatefulWidget

class RadioButtom扩展StatefulWidget{
@凌驾
_RadioButtomState createState();
}
类_RadioButtomState扩展状态{
布尔值=
false;//美国东南部
@凌驾
小部件构建(构建上下文){
返回行(
mainAxisAlignment:mainAxisAlignment.center,
儿童:[
无线电(
价值观:正确,
groupValue:_radioValue,
一旦更改:(值){
设置状态(){
_放射性值=放射性值;
});
}),
正文(
“是的”,
样式:TextStyle(
字体大小:12.0,
fontFamily:“OpenSans常规”,
),
),
无线电(
值:false,
groupValue:_radioValue,
一旦更改:(值){
设置状态(){
_放射性值=放射性值;
});
}),
正文(
“不”,
样式:TextStyle(
字体大小:12.0,
fontFamily:“OpenSans常规”,
),
)
],
);
}
}

您可以提升状态。您不需要将状态存储在
RadioButtom
中,而是将状态存储在包含
ListView
的小部件中,例如
ListViewBuilder

  • 更改
    RadioButtom
    的构造函数以接受值和回调
  • class RadioButtom扩展StatefulWidget{
    @凌驾
    _RadioButtomState createState();
    RadioButtom({this.value,this.onChanged});
    最终布尔值;
    变更后的最终价值;
    }
    
  • 使用
    状态中的字段
  • 收音机(
    价值观:正确,
    groupValue:widget.value,
    onChanged:widget.onChanged,
    ),
    
  • 将您的状态存储在
    ListViewBuilder
  • //例如
    列表_答案=[];//使用所需的元素数初始化它
    
  • 项目生成器中使用它
  • radiobutom(
    值:_回答[i],
    一旦更改:(值){
    设置状态(){
    _答案[i]=价值;
    });
    }),
    ),
    
    非常感谢您的回答,但我有一个问题,如果我将设置状态放在我的list.builder中,当我从radioButtom中选择一个选项时,它会自动刷新屏幕,并且没有明显的选项标记。你能帮我做这个吗?看看这个例子。如果它刷新了您的屏幕,那么您必须找出您的小部件中的其他组件导致了它。我非常感谢您的时间和好意,您的帮助对我很有帮助。我发现解决问题的另一种方法是使用函数(x),它帮助我让Radiobuttom与我的ListView.builder通信。