如何解决来自状态的颤动滑块值
我是Flutter
的新手,有两个问题。
我正在尝试通过设置Slider
的初始值来使用State
,我可以在构建后再获取。
但是我的问题是,每次移动Slider
时,Builder
都会从State
设置相同的值,而Slider
不会被更新,并且不动。
第二个问题类似于第一个问题。如您所见,在onChangeEnd()
方法下,我在Slider
中使用另一个BottomSheet
,其终值为(从第一个Slider获取)。但是同样,我不能移动第二个Slider
。我想原因是它在构建后也令人耳目一新。
如果您能说出解决方法并正确执行,那就太好了。
谢谢
class DetailPage extends StatefulWidget {
@override
_DetailPage State createState() => _DetailPage State();
}
class _DetailPage State extends State<DetailPage > {
double _currentSliderValue;
@override
Widget build(BuildContext context) {
return StoreConnector<AppState,AppState>(
converter: (store) => store.state,builder: (context,state) {
_currentSliderValue = state.progress.toDouble();
return Scaffold(
body: Container(
child: Column(
children: [
Row(
children: [
Expanded(
child: Slider(
value: _currentSliderValue,min: 0,max: 100,divisions: 100,label: _currentSliderValue.round().toString(),onChanged: (double newValue) {
setState(() {
_currentSliderValue = newValue;
});
},onChangeEnd: (double endValue) {
ModalHelper.showBottomModal(
context,_currentSliderValue.toString() + " " + endValue.toString(),Slider(
value: endValue,label: endValue.round().toString(),onChanged: (double newValue) {
setState(() {
endValue = newValue;
});
},),);
},],);
});
}
}
解决方案:
第一个问题: 我在第一个滑块的设置状态上添加了简单标志,以便在重建后不重新设置_currentSliderValue值。
第二个问题: 使showBottomModal statefull解决了该问题。
解决方法
我已经删除了bottomSheet
并更改了代码,现在可以使用了。
import 'package:flutter/material.dart';
import 'arrow.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatefulWidget {
@override
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
bool loaded = false;
double _currentSliderValue = 0;
double _currentSliderValue2 = 0;
@override
void initState() {
// TODO: implement initState
super.initState();
Future.delayed(Duration(seconds: 3)).then((value) => {
//Do more things
setState(() {
loaded = true;
})
});
}
ThemeData getTheme(BuildContext context) {
// I wanna be able to call MediaQuery.of(contex) here
return ThemeData();
}
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',theme: ThemeData(
primarySwatch: Colors.blue,visualDensity: VisualDensity.adaptivePlatformDensity,),home: Scaffold(
body: Container(
child: Column(
children: [
Row(
children: [
Expanded(
child: Slider(
value: _currentSliderValue,min: 0,max: 100,divisions: 100,label: _currentSliderValue.round().toString(),onChanged: (double newValue) {
setState(() {
_currentSliderValue = newValue;
});
},onChangeEnd: (double endValue) {
setState(() {
_currentSliderValue2=endValue;
});
},Expanded(
child: Slider(
value: _currentSliderValue2,label: _currentSliderValue2.round().toString(),onChanged: (double newValue) {
setState(() {
_currentSliderValue2 = newValue;
});
},],));
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。