我想在我的无状态小部件gridview上添加Keep alive,而mixindg不能在无状态小部件上使用,当我尝试添加Keep alive或AlwaysKeepAlive小部件时,它给出以下Assert:
应用父级数据时引发了以下Assert。:ParentDataWidget使用不当。
父数据小部件保持活动(保持活动:true)希望将KeepAliveParentDataMixin类型的ParentData应用于RenderObject,该RenderObject已设置为接受不兼容类型ParentData的ParentData。
通常,这意味着KeepAlive小部件有错误的祖先RenderObjectWidget。通常,KeepAlive小部件直接放置在SliverWithKeepAliveWidget小部件中。有问题的KeepAlive当前放置在语义小部件中。
任何帮助都将不胜感激
小部件构建(BuildContext上下文){响应初始化(上下文);return保持活动状态(保持活动状态:是的,孩子:Obx((){返回脚手架(appBar:应用程序栏(图标主题:图标主题数据(颜色:Colors.black),标题:文本(控制器.目录ID!=空?控制器.目录ID!.目录名称:“所有产品”,款式:文本样式(颜色:Colors.black)、)、背景颜色:颜色:白色,立面:0,操作:[可见性(子项:图标按钮(按下:(){控制器.显示或隐藏搜索小工具(真);},图标:图标(Icons.search)),可见:控制器.是搜索小部件.是假,)],),
// appBar: AppBar(
// title: Text(contorller.cateid != null
// ? contorller.cateid!.cateName
// : 'All products'),
// ),
body: contorller.isloading.value
? Center(
child: CircularProgressIndicator(),
)
: Column(
children: [
SizedBox(
height: Responsive.safeBlockVerticalWAB * 2,
),
Expanded(
child: GridView.builder(
shrinkWrap: true,
primary: false,
// physics: const NeverScrollableScrollPhysics(),
gridDelegate: const SliverGridDelegateWithFixedCrossAxisCount(
crossAxisCount: 2, childAspectRatio: .83
// childAspectRatio: MediaQuery.of(context).size.width /
// (MediaQuery.of(context).size.height / 1.01),
),
itemCount: contorller.productlisrt.length,
itemBuilder: (context, index) {
return GestureDetector(
onTap: () => Get.to(() => ItemDetails(
product: contorller.productlisrt[index])),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisSize: MainAxisSize.min,
children: [
Stack(
children: [
Container(
margin: const EdgeInsets.symmetric(
horizontal: 10),
child: ClipRRect(
borderRadius:
BorderRadius.circular(8.0),
child: Image.network(
'$mainurl/${contorller.productlisrt[index].image}',
fit: BoxFit.cover,
),
),
),
Obx(() {
return Positioned(
right:
-Responsive.safeBlockHorizontal *
1,
bottom:
Responsive.safeBlockHorizontal,
child: RawMaterialButton(
onPressed: () {
_favoriteController.toggle(
contorller
.productlisrt[index]);
},
fillColor: Colors.white,
shape: CircleBorder(),
elevation: 4.0,
child: Padding(
padding: EdgeInsets.all(5),
child: _favoriteController
.hasProduct(contorller
.productlisrt[index])
? Icon(
Icons
.favorite, // : Icons.favorite_border,
color: Colors.red,
size: 17,
)
: Icon(
Icons.favorite_border,
color: Colors.red,
size: 17,
),
),
),
);
})
],
),
Padding(
padding: const EdgeInsets.only(
left: 10, top: 8.0),
child: Text(
contorller.productlisrt[index].itemName,
style: const TextStyle(
fontSize: 12.0,
fontWeight: FontWeight.w900,
),
),
),
Padding(
padding: const EdgeInsets.only(
left: 20, top: 4.0),
child: Text(
contorller.productlisrt[index].itemDesc,
overflow: TextOverflow.ellipsis,
style: const TextStyle(
fontSize: 10.0,
fontWeight: FontWeight.w400,
color: Colors.grey),
maxLines: 1,
),
),
],
),
);
},
),
),
],
));
}),
);
}
1条答案
按热度按时间fdbelqdn1#
可以肯定的是,问题在于您试图在无状态小部件上使用
keepAlive
。在无状态的小部件上没有“保持活动”的状态,因此它不会工作。但是,你应该能够在有状态的小部件上使用它。
那只是我的直觉!