首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Flutter + Provider:如何将滑块的值传递回provider?

Flutter + Provider:如何将滑块的值传递回provider?
EN

Stack Overflow用户
提问于 2019-09-27 03:51:19
回答 1查看 789关注 0票数 2

Flutter 1.9.1 Provider 3.1.0

我目前正在构建我的第一个应用程序,我决定现在就跳到状态管理上,以免在以后的构建中陷入泥潭。

我已经设置了一个width_restriction_provider;

代码语言:javascript
复制
class WidthRestrictionProvider extends ChangeNotifier {
  int _widthRestriction = 140;
  int get widthRestriction => _widthRestriction;

  set widthRestriction(int val) {
    _widthRestriction = val;
    notifyListeners();
  }

  changeWidthSlider(int newValue) {
    _widthRestriction = newValue;
    notifyListeners();
      }
    }

这是我的滑块小工具;

代码语言:javascript
复制
  class WidthSlider extends StatelessWidget {

  @override
  Widget build(BuildContext context) {
       final WidthRestrictionProvider widthRestrictionProvider =
        Provider.of<WidthRestrictionProvider>(context);
        return Container(
      child: Slider(
                      min: 140.0,
                      max: 420.0,
                      onChanged: () => widthRestrictionProvider.changeWidthSlider(newValue);
                    ),

    );
  }
}

我尝试了许多不同的方法,但在此过程中我一直遇到问题。

如何成功地将新的滑块值传递回提供程序?

我目前正在学习Flutter和Dart,所以如果这个问题有点基础的话,我很抱歉。

EN

回答 1

Stack Overflow用户

发布于 2021-07-24 09:20:32

我已经通过为范围滑块使用statefulWidget解决了这个问题。希望它能为你工作

代码语言:javascript
复制
class RangeSliderPricing extends StatefulWidget {
  const RangeSliderPricing({Key? key}) : super(key: key);

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

class _RangeSliderPricingState extends State<RangeSliderPricing> {
  RangeValues _currentRangeValues = RangeValues(20, 40);
  @override
  Widget build(BuildContext context) {
    return RangeSlider(
      values: _currentRangeValues,
      min: 0,
      max: 100,
      divisions: 5,
      labels: RangeLabels(
        _currentRangeValues.start.round().toString(),
        _currentRangeValues.end.round().toString(),
      ),
      onChanged: (RangeValues values) {
        print('on change working $values');
        setState(() {
          _currentRangeValues = values;
        });

        context.read<ProductController>().fliterByPriceRange(
            priceStart: values.start.round().toDouble(),
            priceEnd: values.end.round().toDouble());
      },
    );
  }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58123829

复制
相关文章

相似问题

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