Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 如何防止应用程序的状态发生更改?_Flutter_Dart - Fatal编程技术网

Flutter 如何防止应用程序的状态发生更改?

Flutter 如何防止应用程序的状态发生更改?,flutter,dart,Flutter,Dart,我目前正在开发这个应用程序,但我刚刚意识到,当复选框被选中并上下滚动时,它会自动取消选中。这意味着应用程序的状态正在更改 我在gridview中使用了gridview.builder,它工作得非常好,只是当我选中那些框时,上下滚动,框本身没有选中。请快速修复将不胜感激。多谢各位 请问我该如何解决这个问题?下面是我的代码: class GridViewPage extends StatefulWidget { @override _GridViewPageState createStat

我目前正在开发这个应用程序,但我刚刚意识到,当复选框被选中并上下滚动时,它会自动取消选中。这意味着应用程序的状态正在更改

我在gridview中使用了gridview.builder,它工作得非常好,只是当我选中那些框时,上下滚动,框本身没有选中。请快速修复将不胜感激。多谢各位

请问我该如何解决这个问题?下面是我的代码:


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,
                ));
          })