Flutter 如何防止应用程序的状态发生更改?
我目前正在开发这个应用程序,但我刚刚意识到,当复选框被选中并上下滚动时,它会自动取消选中。这意味着应用程序的状态正在更改 我在gridview中使用了gridview.builder,它工作得非常好,只是当我选中那些框时,上下滚动,框本身没有选中。请快速修复将不胜感激。多谢各位 请问我该如何解决这个问题?下面是我的代码:Flutter 如何防止应用程序的状态发生更改?,flutter,dart,Flutter,Dart,我目前正在开发这个应用程序,但我刚刚意识到,当复选框被选中并上下滚动时,它会自动取消选中。这意味着应用程序的状态正在更改 我在gridview中使用了gridview.builder,它工作得非常好,只是当我选中那些框时,上下滚动,框本身没有选中。请快速修复将不胜感激。多谢各位 请问我该如何解决这个问题?下面是我的代码: class GridViewPage extends StatefulWidget { @override _GridViewPageState createStat
class GridViewPage extends StatefulWidget {
@override
_GridViewPageState createState() => _GridViewPageState();
}
class _GridViewPageState extends State<GridViewPage> {
@override
Widget build(BuildContext context) {
return Scaffold(
body: Stack(
children: [
SafeArea(
child: Padding(
padding: const EdgeInsets.only(top: 125.0),
child: Product(),
),
),
HeaderWiget(),
Center(
child: Container(
width: MediaQuery.of(context).size.width,
height: 64.0,
decoration: BoxDecoration(
color: Color(0XFF161F51).withOpacity(0.4),
),
child: Center(
child: Text(
'Next',
style: TextStyle(
color: Colors.white,
fontFamily: 'Work Sans',
fontSize: 22.0,
fontWeight: FontWeight.w500),
),
),
))
],
),
);
}
}
class HeaderWiget extends StatelessWidget {
final Color colors = Color(0XFF161F51);
@override
Widget build(BuildContext context) {
return Container(
width: MediaQuery.of(context).size.width,
height: 128,
decoration: BoxDecoration(
color: colors,
),
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Row(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Column(
children: [
Text(
'What do you do?',
style: TextStyle(
fontSize: 28.0,
color: Colors.white,
),
),
RichText(
text: TextSpan(
text: 'You can select multiple options',
style: TextStyle(
fontSize: 16.0,
color: Colors.white,
),
)),
],
),
SizedBox(
width: 50.0,
),
GestureDetector(
onTap: () {},
child: RichText(
text: TextSpan(
children: [
TextSpan(
text: 'SKIP',
style: TextStyle(
fontFamily: 'Work Sans',
fontWeight: FontWeight.w400,
fontSize: 18.0,
decorationColor: Colors.white,
decoration: TextDecoration.underline,
))
],
))),
],
),
],
),
);
}
}
class Product extends StatefulWidget {
@override
_ProductState createState() => _ProductState();
}
class _ProductState extends State<Product> {
final listItem = [
{'Name': 'Hair & Beauty', 'image': 'assets/images/Rectangle15.png'},
{'Name': 'Wedding planner', 'image': 'assets/images/Rectangle16.png'},
{'Name': 'Bridal Attire', 'image': 'assets/images/Rectangle17.png'},
{'Name': 'Catering_1', 'image': 'assets/images/Rectangle18.png'},
{'Name': 'DJ', 'image': 'assets/images/Rectangle19.png'},
{'Name': 'Florist', 'image': 'assets/images/Rectangle20.png'},
{'Name': 'Jewelry', 'image': 'assets/images/Rectangle21.png'},
{'Name': 'Props', 'image': 'assets/images/Rectangle22.png'},
{'Name': 'Bridal_Attire', 'image': 'assets/images/Rectangle17.png'},
{'Name': 'Catering', 'image': 'assets/images/Rectangle18.png'},
];
@override
Widget build(BuildContext context) {
return Container(
child: GridView.builder(
itemCount: listItem.length,
gridDelegate:
SliverGridDelegateWithFixedCrossAxisCount(crossAxisCount: 2),
itemBuilder: (BuildContext context, int index) {
return Container(
padding: EdgeInsets.all(5.0),
child: ProductApp(
businessName: listItem[index]['Name'],
businessImage: listItem[index]['image'],
));
}),
);
}
}
class ProductApp extends StatefulWidget {
final businessName;
final businessImage;
ProductApp({this.businessName, this.businessImage});
@override
_ProductAppState createState() => _ProductAppState();
}
class _ProductAppState extends State<ProductApp> {
Color color;
var isToggle = false;
ColorFilter filterColor = ColorFilter.mode(Colors.grey, BlendMode.saturation);
ColorFilter normalFilter;
@override
Widget build(BuildContext context) {
return Card(
child: Hero(
tag: widget.businessName,
child: Material(
child: InkWell(
onTap: () {
setState(() {
isToggle = isToggle ? false : true;
});
},
child: GridTile(
child: Container(
decoration: BoxDecoration(
image: DecorationImage(
image: ExactAssetImage(widget.businessImage),
fit: BoxFit.fitWidth,
colorFilter: isToggle ? normalFilter : filterColor),
)),
header: Container(
child: ListTile(
trailing: SelectedDot(
colors: isToggle
? Colors.pink
: Colors.black.withOpacity(0.0)),
title: Text(
widget.businessName,
style: TextStyle(
fontWeight: FontWeight.w500,
color: Colors.white,
fontSize: 12.0),
),
),
),
),
),
)),
);
}
}
类GridViewPage扩展StatefulWidget{
@凌驾
_GridViewPageState createState()=>\u GridViewPageState();
}
类_GridViewPageState扩展状态{
@凌驾
小部件构建(构建上下文){
返回脚手架(
主体:堆栈(
儿童:[
安全区(
孩子:填充(
填充:仅限常量边集(顶部:125.0),
子项:Product(),
),
),
头像(),
居中(
子:容器(
宽度:MediaQuery.of(context).size.width,
身高:64.0,
装饰:盒子装饰(
颜色:颜色(0XFF161F51)。不透明度(0.4),
),
儿童:中心(
子:文本(
“下一个”,
样式:TextStyle(
颜色:颜色,白色,
fontFamily:“无需工作”,
字体大小:22.0,
fontWeight:fontWeight.w500),
),
),
))
],
),
);
}
}
类HeaderWiget扩展了无状态小部件{
最终颜色=颜色(0XFF161F51);
@凌驾
小部件构建(构建上下文){
返回容器(
宽度:MediaQuery.of(context).size.width,
身高:128,
装饰:盒子装饰(
颜色:颜色,
),
子:列(
mainAxisAlignment:mainAxisAlignment.center,
crossAxisAlignment:crossAxisAlignment.center,
儿童:[
划船(
mainAxisAlignment:mainAxisAlignment.center,
crossAxisAlignment:crossAxisAlignment.center,
儿童:[
纵队(
儿童:[
正文(
“你是干什么的?”,
样式:TextStyle(
字体大小:28.0,
颜色:颜色,白色,
),
),
RichText(
text:TextSpan(
文本:“您可以选择多个选项”,
样式:TextStyle(
字体大小:16.0,
颜色:颜色,白色,
),
)),
],
),
大小盒子(
宽度:50.0,
),
手势检测器(
onTap:(){},
孩子:RichText(
text:TextSpan(
儿童:[
TextSpan(
文本:“跳过”,
样式:TextStyle(
fontFamily:“无需工作”,
fontWeight:fontWeight.w400,
字体大小:18.0,
装饰颜色:颜色。白色,
装饰:textEdition.underline,
))
],
))),
],
),
],
),
);
}
}
类产品扩展了StatefulWidget{
@凌驾
_ProductState createState()=>\u ProductState();
}
类_ProductState扩展了状态{
最终清单项目=[
{'Name':'Hair&Beauty','image':'assets/images/Rectangle15.png'},
{'Name':'Wedding planner','image':'assets/images/Rectangle16.png'},
{'Name':'Bridal Attire','image':'assets/images/Rectangle17.png'},
{'Name':'Catering_1','image':'assets/images/Rectangle18.png'},
{'Name':'DJ','image':'assets/images/Rectangle19.png'},
{'Name':'Florist','image':'assets/images/Rectangle20.png'},
{'Name':'Jewelry','image':'assets/images/Rectangle21.png'},
{'Name':'Props','image':'assets/images/Rectangle22.png'},
{'Name':'Bridal_Attire','image':'assets/images/Rectangle17.png'},
{'Name':'Catering','image':'assets/images/Rectangle18.png'},
];
@凌驾
小部件构建(构建上下文){
返回容器(
子项:GridView.builder(
itemCount:listItem.length,
gridDelegate:
SliverGridDelegateWithFixedCrossAxisCount(crossAxisCount:2),
itemBuilder:(构建上下文,int索引){
返回容器(
填充:所有边缘设置(5.0),
孩子:ProductApp(
businessName:listItem[索引]['Name'],
businessImage:listItem[索引]['image'],
));
}),
);
}
}
类ProductApp扩展了StatefulWidget{
最终商业名称;
最终商业形象;
ProductApp({this.businessName,this.businessImage});
@凌驾
_ProductAppState createState()=>\u ProductAppState();
}
类_ProductAppState扩展状态{
颜色;
var-isToggle=false;
ColorFilter filterColor=ColorFilter.mode(Colors.grey,BlendMode.saturation);
彩色滤光片;普通滤光片;
@凌驾
小部件构建(构建上下文){
回程卡(
孩子:英雄(
标记:widget.businessName,
儿童:材料(
孩子:InkWell(
onTap:(){
设置状态(){
isToggle=isToggle?false:true;
});
},
孩子:格子(
子:容器(
装饰:盒子装饰(
图像:装饰图像(
图像:ExactAssetImage(widget.businessImage),
适合:BoxFit.fitWidth,
GridView.builder(
itemCount: listItem.length,
gridDelegate:
SliverGridDelegateWithFixedCrossAxisCount(crossAxisCount: 2),
itemBuilder: (BuildContext context, int index) {
return Container(
padding: EdgeInsets.all(5.0),
child: ProductApp(
isToggled: YourItemObject.isToggled,
onChange: YourItemObject.onChange,
businessName: YourItemObject.name,
businessImage: YourItemObject.image,
));
})