Flutter 滑动通过时颤振滑块未更新

Flutter 滑动通过时颤振滑块未更新,flutter,dart,Flutter,Dart,在这里,当点击“设置折扣百分比”时,我试图显示一个对话框。 但问题是,该值在外部字段中更新,而不是在滑块上更新。当点击并再次点击以显示对话框时,将显示滑块的正确值。如何使滑块在对话框容器内滑动时显示值 Container( padding: EdgeInsets.only(top: 5), width: 280, child:

在这里,当点击“设置折扣百分比”时,我试图显示一个对话框。 但问题是,该值在外部字段中更新,而不是在滑块上更新。当点击并再次点击以显示对话框时,将显示滑块的正确值。如何使滑块在对话框容器内滑动时显示值

                    Container(
                      padding: EdgeInsets.only(top: 5),
                      width: 280,
                      child: FlatButton(
                          onPressed: () {
                            showDialog(
                              context: context,
                              builder: (context) {
                                return Dialog(
                                  shape: RoundedRectangleBorder(
                                      borderRadius: BorderRadius.circular(40)),
                                  elevation: 16,
                                  child: Container(
                                      height: 180.0,
                                      width: 380.0,
                                      child: Center(
                                          child: ListView(
                                        children: [
                                          Container(
                                            padding: EdgeInsets.fromLTRB(
                                                20, 20, 40, 10),
                                            child: Text(
                                              'Discount',
                                              style: TextStyle(
                                                  fontSize: 23,
                                                  color: Color(0xFF707070)),
                                            ),
                                          ),
                                          Row(
                                            mainAxisAlignment:
                                                MainAxisAlignment.spaceEvenly,
                                            children: [
                                              ////////////////////////////////////Slider!!!!!!!
                                              Container(
                                                width: 240,
                                                child: SliderTheme(
                                                  data: SliderTheme.of(context)
                                                      .copyWith(
                                                    activeTrackColor:
                                                        Colors.red[700],
                                                    inactiveTrackColor:
                                                        Colors.red[100],
                                                    trackShape:
                                                        RoundedRectSliderTrackShape(),
                                                    trackHeight: 2.0,
                                                    thumbShape:
                                                        RoundSliderThumbShape(
                                                            enabledThumbRadius:
                                                                12.0),
                                                    thumbColor:
                                                        Colors.redAccent,
                                                    overlayColor: Colors.red
                                                        .withAlpha(32),
                                                    overlayShape:
                                                        RoundSliderOverlayShape(
                                                            overlayRadius:
                                                                28.0),
                                                    tickMarkShape:
                                                        RoundSliderTickMarkShape(),
                                                    activeTickMarkColor:
                                                        Colors.red[700],
                                                    inactiveTickMarkColor:
                                                        Colors.red[100],
                                                    valueIndicatorShape:
                                                        PaddleSliderValueIndicatorShape(),
                                                    valueIndicatorColor:
                                                        Colors.redAccent,
                                                    valueIndicatorTextStyle:
                                                        TextStyle(
                                                      color: Colors.white,
                                                    ),
                                                  ),
                                                  child: Slider(
                                                    min: 0,
                                                    max: 20,
                                                    divisions: 80,
                                                    value: percent,
                                                    label: '$percent',
                                                    //activeColor: Color(0xFFFFAE40),
                                                    //inactiveColor: Colors.black,
                                                    onChanged: (newValue) {
                                                      setState(() {
                                                        percent = newValue;
                                                      });
                                                      Dialog();
                                                    },
                                                  ),
                                                ),
                                              ),
                                              Container(
                                                  height: 30,
                                                  width: 70,
                                                  padding: EdgeInsets.only(
                                                      left: 10, right: 8),
                                                  margin: EdgeInsets.only(
                                                      right: 10),
                                                  color: Color(0xFF707070),
                                                  child: Row(
                                                    mainAxisAlignment:
                                                        MainAxisAlignment
                                                            .spaceBetween,
                                                    children: [
                                                      Text(
                                                        '$percent',
                                                        style: TextStyle(
                                                            color: Color(
                                                                0xFFE0E0E0)),
                                                      ),
                                                      Text(
                                                        '%',
                                                        style: TextStyle(
                                                            color: Color(
                                                                0xFFE0E0E0)),
                                                      ),
                                                    ],
                                                  ))
                                            ],
                                          ),
                                          Row(
                                            mainAxisAlignment:
                                                MainAxisAlignment.spaceBetween,
                                            children: [
                                              Container(
                                                width: 60,
                                                child: FlatButton(
                                                  onPressed: () {},
                                                  textColor: Color(0xFF707070),
                                                  child: Text('BACK'),
                                                ),
                                              ),
                                              FlatButton(
                                                onPressed: () {},
                                                textColor: Color(0xFFFFAE40),
                                                child: Text('ADD DISCOUNT'),
                                              ),
                                            ],
                                          )
                                        ],
                                      ))),
                                );
                              },
                            );
                          },
                          textColor: Colors.white,
                          child: AutoSizeText(
                            'Set Discount Percentage',
                            style: TextStyle(
                              fontSize: 22,
                              fontWeight: FontWeight.w400,
                            ),
                            maxLines: 1,
                          )),
                    ),

要在
对话框中执行
设置状态
,您需要一个<代码>对话框本质上是无状态的,您当前调用的
setState
实际上是父窗口小部件的
setState

您需要使用
StatefulBuilder
setState
调用中包装所有需要重建的内容。这似乎是
滑块正上方的
,因为它包含需要更新的
百分比
变量的所有实例

。。。
StatefulBuilder(builder:(context,setState){//只需将行包装在StatefulBuilder中,其他所有内容都可以保持不变
返回行(
mainAxisAlignment:mainAxisAlignment.space,
儿童:[
////////////////////////////////////滑块!!!!!!!
容器(
宽度:240,
孩子:幻灯片主题(
数据:SliderTheme.of(context).copyWith(
activeTrackColor:Colors.red[700],
颜色:颜色。红色[100],
trackShape:RoundedRectSliderTrackShape(),
轨道高度:2.0,
拇指形状:圆形滑块拇指形状(启用拇指半径:12.0),
thumbColor:Colors.redAccent,
覆盖颜色:颜色。红色。带有Alpha(32),
覆盖形状:圆形滑块覆盖形状(覆盖半径:28.0),
tickMarkShape:RoundSliderTickMarkShape(),
activeTickMarkColor:Colors.red[700],
InactivatickmarkColor:Colors.red[100],
ValueIndicator形状:桨叶滑块ValueIndicator形状(),
ValueIndicator颜色:Colors.redAccent,
valueIndicatorTextStyle:TextStyle(
颜色:颜色,白色,
),
),
子:滑块(
分:0,,
最高:20,
分区:80,
值:百分比,
标签:“$percent”,
//activeColor:Color(0xFFFFAE40),
//不活动颜色:颜色。黑色,
一旦更改:(newValue){
设置状态(){
百分比=新值;
});
//Dialog();应删除此行。它不起任何作用。
},
),
),
),
容器(
身高:30,
宽度:70,
填充:仅限边缘设置(左:10,右:8),
页边距:仅限边集(右:10),
颜色:颜色(0xFF707070),
孩子:排(
mainAxisAlignment:mainAxisAlignment.spaceBetween,
儿童:[
正文(
“$百分比”,
样式:TextStyle(颜色:颜色(0xFFE0E0)),
),
正文(
'%',
样式:TextStyle(颜色:颜色(0xFFE0E0)),
),
],
),
)
],
);
});
...

我在这里创建的
StateSetter
回调名为
setState
,就像在普通的
StatefulWidget
中一样,但是如果您想区分对话框的状态设置器和父窗口小部件,可以将其更改为任何内容。

要在
对话框中执行
setState
,您需要<代码>对话框本质上是无状态的,您当前调用的
setState
实际上是父窗口小部件的
setState

您需要使用
StatefulBuilder
setState
调用中包装所有需要重建的内容。这似乎是
滑块正上方的
,因为它包含需要更新的
百分比
变量的所有实例

。。。
StatefulBuilder(builder:(context,setState){//只需将行包装在StatefulBuilder中,其他所有内容都可以保持不变
返回行(
mainAxisAlignment:mainAxisAlignment.space,
儿童:[
////////////////////////////////////滑块!!!!!!!
容器(
宽度:240,
孩子:幻灯片主题(
数据:SliderTheme.of(context).copyWith(
activeTrackColor:Colors.red[700],
颜色:颜色。红色[100],
trackShape:RoundedRectSliderTrackShape(),
轨道高度:2.0,
拇指形状:圆形滑块拇指形状(启用拇指半径:12.0),
thumbColor:Colors.redAccent,
覆盖颜色:颜色。红色。带有Alpha(32),
覆盖形状:圆形滑块覆盖形状(覆盖半径:28.0),
tickMarkShape:RoundSliderTickMarkShape(),
activeTickMarkColor:Colors.red[700],
InactivatickmarkColor:Colors.red[100],
ValueIndicator形状:桨叶滑块ValueIndicator形状(),
ValueIndicator颜色:Colors.redAccent,
valueIndicatorTextStyle:TextStyle(
颜色:颜色,白色,
),
),
子:滑块(
分:0,,
最高:20,
分区:80,
值:百分比,
标签:“$percent”,
//activeColor:Color(0xFFFFAE40),
//不活动颜色:颜色。黑色,
一旦更改:(newValue){
设置状态(){
百分比=新值;
});
//Dialog();应删除此行。它不起任何作用。
},
),
),
),
容器(
身高:30,
宽度:70,
填充:仅限边缘设置(左:10,右:8),
页边距:仅限边集(右:10),
颜色:颜色(0xFF707070),
孩子:排(
mainAxisAlignment:mainAxisAlignment.spaceBetween,
儿童:[
正文(
“$百分比”,