大家安安 晚上好~~
今天要把专案里的StatelessWidget 更改成为 StatefulWidget
我想要加入点赞的功能去计算我的宠物的赞数
首先我们先加入按赞的按钮
及显示的的赞数
程序码的部分则加入一段
IconButton(
onPressed: () => {
pet.likes++
},
icon: Icon(
Icons.thumb_up,
color: Colors.blue,
),
),
]),
SizedBox(
height: 16.0,
),
Text(
'Likes:${pet.likes}',
style: TextStyle(color: Colors.blue, fontSize: 26.0),
),
但是这样的话点击了赞的按钮并不会+1
所以我们改成 StatefulWidget来让点击时能够+1
class Petdialog extends StatefulWidget {
Petdialog({Key key, this.pet}) : super(key: key);
final Pet pet;
@override
State<StatefulWidget> createState() => _DialogState();
}
class _DialogState extends State<Petdialog> {
@override
Widget build(BuildContext context) {
ThemeData localTheme = Theme.of(context);
return SimpleDialog(
contentPadding: EdgeInsets.zero,
children: [
Image.network(widget.pet.imageUrl, fit: BoxFit.fill),
Padding(
...
child: Column(
...
children: [
...
Row(children: [
...
IconButton(
onPressed: () => {
setState(() => {widget.pet.likes++})
},
...
);
}
}
hotReload 一下
可以看到 赞数成功变更了
但是发现了位於Parent Widget(图片画面左上角)的赞数却没变更
所以我们又要来修改一下程序码
class Petdialog extends StatefulWidget {
Petdialog({Key key, this.pet, @required this.notifyParent}) : super(key: key);
final Function() notifyParent;
...
}
...
IconButton(
onPressed: () => {
setState(() => {widget.pet.likes++, widget.notifyParent()})
},
icon: Icon(
Icons.thumb_up,
color: Colors.blue,
),
),
....
class _MyPetState extends State<MyPet> {
refresh() {
setState(() {});
}
Widget _dialogBuilder(BuildContext context, Pet pet) {
return Petdialog(
pet: pet,
notifyParent: refresh,
);
}
....
MyPet也改成StatefulWidget
并传入callbackfn 去更改 清单上的赞数
成功的把赞数binding起来
详细程序码可以到我的GitHub上
点此连结
好拉下一篇就会讲解 InheritedWidget 是甚麽?
大家ㄅㄅ
<<: 老师!我想知道!如果只使用原生的终端机要怎麽客制化 Prompt 呢!
>>: Docker for Mac VPN 直通 Container IP 位址
在上一篇笔记中已经提到 Fork 的功能以及使用办法了,那本篇就来实际发个 Pull request...
单元测试基础的示范专案 HelloBank 收尾与现阶段总结 我们在Day 4-Visual Stu...
连续 30 天不中断每天上传一支教学影片,教你如何用 React 加上 Firebase 打造社群...
昨天介绍了computed的基本使用方式,今天多讲一点点有关methods的, 大家准备好了吗ε٩(...
k8s - 洗掉 kubernetes 环境重新来过 参考资料 参考资料:在 Ubuntu 上重新安...