我是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,
min: 0,
max: 100,
divisions: 100,
label: endValue.round().toString(),
onChanged: (double newValue) {
setState(() {
endValue = newValue;
});
},
),
);
},
),
),
],
),
],
),
),
);
});
}
}
解决方案:
第一个问题: 我在第一个滑块的设置状态上添加了简单标志,以便在重建后不重新设置_currentSliderValue值。
第二个问题: 使showBottomModal statefull解决了该问题。
答案 0 :(得分:0)
我已经删除了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,
min: 0,
max: 100,
divisions: 100,
label: _currentSliderValue2.round().toString(),
onChanged: (double newValue) {
setState(() {
_currentSliderValue2 = newValue;
});
},
),
),
],
),
],
),
),
));
}
}