Flutter 1.9.1 提供程序 3.1.0
我目前正在构建我的第一个应用程序,我决定现在跳入状态管理,以免在以后的构建中陷入困境。
我已经设置了一个width_restriction_provider;
class WidthRestrictionProvider extends ChangeNotifier {
int _widthRestriction = 140;
int get widthRestriction => _widthRestriction;
set widthRestriction(int val) {
_widthRestriction = val;
notifyListeners();
}
changeWidthSlider(int newValue) {
_widthRestriction = newValue;
notifyListeners();
}
}
这是我的滑块小部件;
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,所以如果这个问题有点基本,我深表歉意。
我已经通过使用范围滑块的statefulWidget
解决了这个问题。希望它能为你工作
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());
},
);
}
}
您可以使用StatefullBuilder:
StatefulBuilder(
builder: (context, setState) {
return Slider(
value: myProvider.sliderValue,
onChanged: ((double value) {
setState(() => myProvider.sliderValue = value);
}),
min: 0,
max: 100,
);
},
),