如何提取此开关小部件
How do I extract this switch widget
我有一个带 ListView 的 StatefulWidget,ListView 有一堆开关,旁边有文本。
现在我想将其提取到自定义开关小部件中,因为我不止一次拥有它。
我不知道该怎么做,我还需要知道我的父小部件内部每个开关的状态。
Padding(
padding: const EdgeInsets.only(left: 16.0),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Text("Use custom dhcp server"),
Padding(
padding: const EdgeInsets.only(right: 8.0),
child: Switch(
value: _dhcp,
activeColor: Colors.blue,
onChanged: (bool value) {
setState(() {
_dhcp = value;
});
},
),
),
],
),
),
您可以像这样创建自己的无状态小部件:
class CustomSwitch extends StatelessWidget {
const CustomSwitch({
Key key,
@required this.value,
@required this.onChanged,
}) : super(key: key);
final bool value;
final void Function(bool) onChanged;
@override
Widget build(BuildContext context) {
return Switch(
value: value,
activeColor: Colors.blue,
onChanged: onChanged,
);
}
}
像这样可以在任何地方使用它的地方:
class ParentWidget extends StatefulWidget {
@override
_ParentWidgetState createState() => _ParentWidgetState();
}
class _ParentWidgetState extends State<ParentWidget> {
bool switchValue = false;
@override
Widget build(BuildContext context) {
return ListView(
children: [
CustomSwitch(
value: switchValue,
onChanged: (newValue) {
setState(() {
switchValue = newValue;
});
},
),
],
);
}
}
我有一个带 ListView 的 StatefulWidget,ListView 有一堆开关,旁边有文本。 现在我想将其提取到自定义开关小部件中,因为我不止一次拥有它。 我不知道该怎么做,我还需要知道我的父小部件内部每个开关的状态。
Padding(
padding: const EdgeInsets.only(left: 16.0),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Text("Use custom dhcp server"),
Padding(
padding: const EdgeInsets.only(right: 8.0),
child: Switch(
value: _dhcp,
activeColor: Colors.blue,
onChanged: (bool value) {
setState(() {
_dhcp = value;
});
},
),
),
],
),
),
您可以像这样创建自己的无状态小部件:
class CustomSwitch extends StatelessWidget {
const CustomSwitch({
Key key,
@required this.value,
@required this.onChanged,
}) : super(key: key);
final bool value;
final void Function(bool) onChanged;
@override
Widget build(BuildContext context) {
return Switch(
value: value,
activeColor: Colors.blue,
onChanged: onChanged,
);
}
}
像这样可以在任何地方使用它的地方:
class ParentWidget extends StatefulWidget {
@override
_ParentWidgetState createState() => _ParentWidgetState();
}
class _ParentWidgetState extends State<ParentWidget> {
bool switchValue = false;
@override
Widget build(BuildContext context) {
return ListView(
children: [
CustomSwitch(
value: switchValue,
onChanged: (newValue) {
setState(() {
switchValue = newValue;
});
},
),
],
);
}
}