首页
苏兮影视
随笔记
壁纸
更多
直播
时光轴
友联
关于
统计
Search
1
v2ray节点搭建
1,025 阅读
2
软件添加id功能按钮
937 阅读
3
QQ扫码无法登录的解决方案
849 阅读
4
网易云音乐歌单ID获取教程
719 阅读
5
typecho非常有特色的模块
664 阅读
谈天说地
建站源码
经验教程
资源分享
动漫美图
登录
Search
标签搜索
java
rust
flutter
esp32c3
springboot
安卓
linux
vue
dart
设计模式
docker
joe
快捷键
git
fish shell
maven
redis
netty
groovy
js
尽意
累计撰写
112
篇文章
累计收到
39
条评论
首页
栏目
谈天说地
建站源码
经验教程
资源分享
动漫美图
页面
苏兮影视
随笔记
壁纸
直播
时光轴
友联
关于
统计
搜索到
11
篇与
的结果
2024-05-17
记录一下flutter的值传递细节
最近在实现一个类似qq相册的功能,点击右上角图片的小圆圈框选。思路也很简单,当image控件的值发送改变时,重新rebuild渲染,当然是局部渲染,所以要封装这么一个控件,构造函数: final File file; final BottomImageChanged isChanged; final VoidCallback onPress; 图片显示使用的FileImage,传递一个回调函数,用来处理区选对应的widget,由于dart的传参对于基本变量都是值传递吗,所以也就造成了父控件值改变了,但是子组件不能监听到,所以使用类包装一下基础变量值,提供get set方法。也可以使用ValueNotifier包装基础变量,List.filled 和 List.generate 都是用于创建固定长度的列表List.filled:列表中的所有元素都是相同的对象,适用于需要多个相同对象引用的情况。List.generate:每个元素都是独立的对象,适用于需要为每个列表项创建不同对象的情况,例如为每个列表项创建独立的 ValueNotifier。
2024年05月17日
142 阅读
0 评论
0 点赞
flutter 卡在 "Running Gradle task..."
每次启用新的flutter插件都会卡一阵子,网上的说法也都是换maven下载源,即使是换了也还是会卡住。解决方案:在终端中打开flutter项目目录,cd到android目录下,使用gradlew clean清理一下,清理完成后重新build即可。
2024年05月11日
169 阅读
0 评论
1 点赞
2024-05-02
flutter实现封装控制器
在flutter中,尽管已经可以通过状态提升实现小部分的值传递,用回调函数的方法去修改父类的值,在父类调用setstate相当于重新rebuild了父类以及子组件的全部组件,而我们只需要看到子组件的内容发送改变,对此性能上无疑是浪费的。所以需要对组件进行封装,使每次更新只涉及到需要的子组件,这也是性能优化以及解耦的一种解决方案。新建一个controller类继承ChangeNotifier私有化成员变量,设置get set方法,set数据的时候调用notifyListeners函数,通知框架需要更新到新的数据通过ListenableBuilder组件监听需要更新的ChangeNotifier对象每次数据更新使调用set方法都会调用notifyListeners函数,在listenable又会监听到数据的改变,从而进行重绘。
2024年05月02日
158 阅读
0 评论
2 点赞
flutter的状态提升
2024年05月02日
191 阅读
0 评论
0 点赞
2024-05-02
在flutter中,在父组件中修改子组件的内容一般使用状态提升,也就是将子组件需要的变量在父组件的state函数中声明,通过构造函数传参到子组件可以看到这样就可以在父组件中点击按钮改变子组件的值。通过状态提升已经可以解决父组件修改子组件的问题了,那么在子组件怎么修改父组件的值呢?有一种思路是通过函数回调来实现:在dart中函数跟变量等价,允许将函数作为参数来回传递。现在就实现了子组件访问和修改父组件的变量
记录一下flutter的小细节,setState()
setState 只能更新当前widget的状态,当前widget下面还有别的widget情况下,是不会生效子widgetList<String> items = List.generate(10, (index) => "item$index"); class ChatList extends StatelessWidget { @override Widget build(BuildContext context) { return Column( children: [ Expanded( child: ListView.builder( itemCount: items.length, itemBuilder: (context, index) { return ChatItem(chat: items[index]); }, ) )]); } } class HomePage extends StatelessWidget { const HomePage({super.key}); @override Widget build(BuildContext context) { return ChatList(); } void changeChatList(){ setState(){ items.add("new data") } } }这样在Hone Page调用chagngeChatList方法,ChatList中的视图没有变化,可以将items移动到HomePage,并将值通过构造传入,这种做法可以给变量提权修改后 class ChatList extends StatelessWidget { final List<String> items; const ChatList({this.items}) @override Widget build(BuildContext context) { return Column( children: [ Expanded( child: ListView.builder( itemCount: items.length, itemBuilder: (context, index) { return ChatItem(chat: items[index]); }, ) )]); } } class HomePage extends StatelessWidget { List<String> items = List.generate(10, (index) => "item$index"); const HomePage({super.key}); @override Widget build(BuildContext context) { return ChatList(items); } void changeChatList(){ setState(){ items.add("new data") } } }
2024年04月17日
167 阅读
0 评论
1 点赞
1
2
3