Android studio 我如何使开关在单击时具有自己的无状态小部件类切换?
我试图使两个开关在单击时在打开和关闭之间切换。我为交换机的设计创建了一个无状态小部件类。但是,当我使用它并在用户界面类中调用该类时,开关的状态不会改变。如何更新代码以允许更改Android studio 我如何使开关在单击时具有自己的无状态小部件类切换?,android-studio,flutter,dart,uiswitch,statefulwidget,Android Studio,Flutter,Dart,Uiswitch,Statefulwidget,我试图使两个开关在单击时在打开和关闭之间切换。我为交换机的设计创建了一个无状态小部件类。但是,当我使用它并在用户界面类中调用该类时,开关的状态不会改变。如何更新代码以允许更改 import 'package:flutter/material.dart'; class NotificationItem extends StatelessWidget { NotificationItem( {@required this.title, @required this.pu
import 'package:flutter/material.dart';
class NotificationItem extends StatelessWidget {
NotificationItem(
{@required this.title,
@required this.pushStatus,
@required this.emailStatus});
String title;
bool pushStatus;
bool emailStatus;
@override
Widget build(BuildContext context) {
return Row(
children: <Widget>[
Expanded(
child: Padding(
padding: EdgeInsets.all(20),
child: Text(
title,
style: TextStyle(
fontFamily: kFontFamilyNormal,
fontSize: 17,
color: AppColor.text,
fontWeight: FontWeight.w500),
),
),
),
Expanded(
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: <Widget>[
Switch(
value: emailStatus,
onChanged: (value) {
emailStatus = value;
print(emailStatus);
},
activeTrackColor: AppColor.primaryColorDark,
activeColor: AppColor.white,
),
Switch(
value: pushStatus,
onChanged: (value) {
pushStatus = value;
print(pushStatus);
},
activeTrackColor: AppColor.primaryColorDark,
activeColor: AppColor.white,
),
],
),
),
],
);
}
}
要更改UI状态,必须使用stateful小部件 您可以将
NotificationItem
转换为StatefulWidget
或将每个开关提取为其自己的StatefulWidget
或者我建议您使用或查看MVVM模式
您的Get代码如下所示:
导入“包装:颤振/材料.省道”;
导入“package:get/get.dart”;
类NotificationItemViewModel扩展了GetxController{
bool-pushStatus=false;
bool emailStatus=false;
无效更改电子邮件状态(bool newValue){
emailStatus=newValue;
打印(电子邮件状态);
更新();
}
无效更改状态(布尔新值){
pushStatus=newValue;
打印(推送状态);
更新();
}
}
类NotificationItem扩展了无状态小部件{
const NotificationItem({@required this.title});
最后的字符串标题;
@凌驾
小部件构建(构建上下文){
返回GetBuilder(
init:NotificationItemViewModel(),
建筑商:(模型){
返回行(
儿童:[
扩大(
孩子:填充(
填充:常数边集。全部(20),
子:文本(
标题
样式:TextStyle(
fontFamily:kFontFamilyNormal,
尺寸:17,
颜色:AppColor.text,
fontWeight:fontWeight.w500,
),
),
),
),
扩大(
孩子:排(
mainAxisAlignment:mainAxisAlignment.space,
儿童:[
开关(
值:model.emailStatus,
一旦更改:model.changeMailStatus,
activeTrackColor:AppColor.primaryColorDark,
activeColor:AppColor.white,
),
开关(
值:model.pushStatus,
一旦更改:model.changePushStatus,
activeTrackColor:AppColor.primaryColorDark,
activeColor:AppColor.white,
),
],
),
),
],
);
},
);
}
}
要更改UI状态,必须使用stateful小部件
您可以将NotificationItem
转换为StatefulWidget
或将每个开关提取为其自己的StatefulWidget
或者我建议您使用或查看MVVM模式
您的Get代码如下所示:
导入“包装:颤振/材料.省道”;
导入“package:get/get.dart”;
类NotificationItemViewModel扩展了GetxController{
bool-pushStatus=false;
bool emailStatus=false;
无效更改电子邮件状态(bool newValue){
emailStatus=newValue;
打印(电子邮件状态);
更新();
}
无效更改状态(布尔新值){
pushStatus=newValue;
打印(推送状态);
更新();
}
}
类NotificationItem扩展了无状态小部件{
const NotificationItem({@required this.title});
最后的字符串标题;
@凌驾
小部件构建(构建上下文){
返回GetBuilder(
init:NotificationItemViewModel(),
建筑商:(模型){
返回行(
儿童:[
扩大(
孩子:填充(
填充:常数边集。全部(20),
子:文本(
标题
样式:TextStyle(
fontFamily:kFontFamilyNormal,
尺寸:17,
颜色:AppColor.text,
fontWeight:fontWeight.w500,
),
),
),
),
扩大(
孩子:排(
mainAxisAlignment:mainAxisAlignment.space,
儿童:[
开关(
值:model.emailStatus,
一旦更改:model.changeMailStatus,
activeTrackColor:AppColor.primaryColorDark,
activeColor:AppColor.white,
),
开关(
值:model.pushStatus,
一旦更改:model.changePushStatus,
activeTrackColor:AppColor.primaryColorDark,
activeColor:AppColor.white,
),
],
),
),
],
);
},
);
}
}
因为您正在更改状态,所以它必须是一个StatefulWidget。像这样:
class NotificationItem extends StatefulWidget {
const NotificationItem({
Key key,
@required this.title,
@required this.pushStatus,
@required this.emailStatus,
});
final String title;
final bool pushStatus;
final bool emailStatus;
@override
_NotificationItemState createState() => _NotificationItemState();
}
class _NotificationItemState extends State<NotificationItem> {
String _title;
bool _pushStatus;
bool _emailStatus;
void initState() {
super.initState();
_title = widget.title;
_pushStatus = widget.pushStatus;
_emailStatus = widget.emailStatus;
}
@override
Widget build(BuildContext context) {
return Row(
children: <Widget>[
Expanded(
child: Padding(
padding: const EdgeInsets.all(16.0),
child: Text(
_title,
),
),
),
Expanded(
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: <Widget>[
Switch(
value: _emailStatus,
onChanged: (value) {
setState(() => _emailStatus = value);
print(_emailStatus);
},
),
Switch(
value: _pushStatus,
onChanged: (value) {
setState(() => _pushStatus = value);
print(_pushStatus);
},
),
],
),
),
],
);
}
}
class NotificationItem扩展StatefulWidget{
构造通知项({
关键点,
@需要这个标题,
@需要此状态,
@需要此电子邮件状态,
});
最后的字符串标题;
最终布尔状态;
最终bool状态;
@凌驾
_NotificationItemState createState()=>\u NotificationItemState();
}
类_NotificationItemState扩展状态{
字符串标题;
布尔(bool)状态;;
bool_电子邮件状态;
void initState(){
super.initState();
_title=widget.title;
_pushStatus=widget.pushStatus;
_emailStatus=widget.emailStatus;
}
@凌驾
小部件构建(构建上下文){
返回行(
儿童:[
扩大(
孩子:填充(
填充:常数边集全部(16.0),
子:文本(
_头衔,
),
),
),
扩大(
孩子:排(
mainAxisAlignment:mainAxisAlignment.space,
C
class NotificationItem extends StatefulWidget {
const NotificationItem({
Key key,
@required this.title,
@required this.pushStatus,
@required this.emailStatus,
});
final String title;
final bool pushStatus;
final bool emailStatus;
@override
_NotificationItemState createState() => _NotificationItemState();
}
class _NotificationItemState extends State<NotificationItem> {
String _title;
bool _pushStatus;
bool _emailStatus;
void initState() {
super.initState();
_title = widget.title;
_pushStatus = widget.pushStatus;
_emailStatus = widget.emailStatus;
}
@override
Widget build(BuildContext context) {
return Row(
children: <Widget>[
Expanded(
child: Padding(
padding: const EdgeInsets.all(16.0),
child: Text(
_title,
),
),
),
Expanded(
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: <Widget>[
Switch(
value: _emailStatus,
onChanged: (value) {
setState(() => _emailStatus = value);
print(_emailStatus);
},
),
Switch(
value: _pushStatus,
onChanged: (value) {
setState(() => _pushStatus = value);
print(_pushStatus);
},
),
],
),
),
],
);
}
}