好的,我正在尝试更具体。我的目标是将部分代码细分为单独的小部件,以便主树尽可能保持干净。
在以下示例中,我在 StatefulWidget 中有一个主树。我已经成功地将带有按钮的容器转换为带有Extract to Widget的自己的小部件。按钮的setState通过构造函数起作用。
现在我想对第二个装有滑块的容器做同样的事情。但我不知道如何使用构造函数处理 Slider onChanged setState,因为 setState 在提取的 Widget 中不起作用。
这是代码示例,其中工作按钮作为提取的小部件,滑块仍在主树内。
import 'package:flutter/material.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: MyStfl(),
);
}
}
class MyStfl extends StatefulWidget {
@override
_MyStflState createState() => _MyStflState();
}
class _MyStflState extends State<MyStfl> {
double sliderPos = 0.0;
@override
Widget build(BuildContext context) {
return Scaffold(
body: Container(
decoration: BoxDecoration(
color: Color(0x80061A28),
),
child: Column(
crossAxisAlignment: CrossAxisAlignment.stretch,
children: [
Expanded(
child: MyCardA(
aktion: () {
setState(() {
print('Button Pressed');
});
},
),
),
Expanded(
child: Container(
child: Slider(
divisions: 48,
value: sliderPos,
min: 0.0,
max: 24.0,
onChanged: (double newValue) {
setState(
() {
sliderPos = double.parse(newValue.toStringAsFixed(1));
print(sliderPos);
},
);
},
),
),
),
],
),
),
);
}
}
class MyCardA extends StatelessWidget {
MyCardA({this.aktion});
final Function aktion;
@override
Widget build(BuildContext context) {
return Container(
margin: EdgeInsets.all(20.0),
padding: EdgeInsets.all(20.0),
color: Color(0x80125889),
child: GestureDetector(
onTap: aktion,
child: Text(
'MY BUTTON',
style: TextStyle(
color: Color(0xFF3D3939),
fontSize: 22.0,
),
),
),
);
}
}