Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[TDSideBar] 如果children内的数据是通过接口获取的,则无法正常渲染 #256

Closed
carrot7454 opened this issue Jul 25, 2024 · 20 comments

Comments

@carrot7454
Copy link

tdesign-flutter 版本

0.1.5

重现链接

No response

重现步骤

  1. 使用官方案例中示例可以正常渲染

image
image
image
image
数据是从接口里拿的,而且也能打印出来,但是页面渲染不出来

期望结果

能够正常渲染

实际结果

无法正常渲染

Flutter版本

No response

设备与机型信息

No response

系统版本

No response

补充说明

No response

Copy link
Contributor

👋 @carrot7454,感谢给 TDesign 提出了 issue。
请根据 issue 模版确保背景信息的完善,我们将调查并尽快回复你。

@ccXxx1aoBai
Copy link
Contributor

可以试下把setState放到第二张图片for循环后面

@carrot7454
Copy link
Author

carrot7454 commented Jul 29, 2024

可以试下把setState放到第二张图片for循环后面

试了一下,我在用另一个listview把数据渲染出来,然后换到组件上,然后reload样式就出来了,但是一旦restart的话就咋整又出不来了

@soxft
Copy link

soxft commented Jul 30, 2024

如果是第二张图 list直接 add 可能会造成 flutter 无法检测到变更
试试用 list = [...list, SideItemProps()]

@carrot7454
Copy link
Author

如果是第二张图 list直接 add 可能会造成 flutter 无法检测到变更 试试用 list = [...list, SideItemProps()]

image
已改,但是还是restart的时候出不来

@soxft
Copy link

soxft commented Jul 30, 2024

如果是第二张图 list直接 add 可能会造成 flutter 无法检测到变更 试试用 list = [...list, SideItemProps()]

image 已改,但是还是restart的时候出不来

TDSidebar 通过在首次初始化时,在 initState 中 将 widget.children 转换成内部变量 displayChildren 后渲染 因此无法感知父组件 children 变化而 刷新子组件

displayChildren = widget.children
.asMap()
.entries
.map((entry) => SideItemProps(
index: entry.key,
disabled: entry.value.disabled,
value: entry.value.value,
icon: entry.value.icon,
label: entry.value.label,
textStyle: entry.value.textStyle,
badge: entry.value.badge))
.toList();

可以通过 didUpdateWidget 等方式,监听 widget.children 变化后,更新 displayChildren

我感觉是这样

@ccXxx1aoBai
Copy link
Contributor

restart也得调用setState()

@ccXxx1aoBai
Copy link
Contributor

flutter不像vue那样响应式数据,需要通过触发build()来更新

@soxft
Copy link

soxft commented Jul 30, 2024

restart也得调用setState()

好家伙 不太懂
能否帮忙看一下 写了个demo https://github.com/soxft/TDCascader/tree/td_sidebar 感谢

@ccXxx1aoBai
Copy link
Contributor

ccXxx1aoBai commented Jul 30, 2024

restart也得调用setState()

好家伙 不太懂 能否帮忙看一下 写了个demo https://github.com/soxft/TDCascader/tree/td_sidebar 感谢

我看demo没问题,建议可以把变量放到setState函数体里面
image

@soxft
Copy link

soxft commented Jul 30, 2024

restart也得调用setState()

好家伙 不太懂 能否帮忙看一下 写了个demo https://github.com/soxft/TDCascader/tree/td_sidebar 感谢

我看demo没问题,建议可以把变量放到setState函数体里面

运行起来确实会遇到 问题

当 picker 处于打开的状态下,再在 父组件更新数据。 picker内 没有渲染新的数据。

2024-07-30.15.33.05.mov

@ccXxx1aoBai
Copy link
Contributor

restart也得调用setState()

好家伙 不太懂 能否帮忙看一下 写了个demo https://github.com/soxft/TDCascader/tree/td_sidebar 感谢

我看demo没问题,建议可以把变量放到setState函数体里面

运行起来确实会遇到 问题

当 picker 处于打开的状态下,再在 父组件更新数据。 picker内 没有渲染新的数据。

2024-07-30.15.33.05.mov

因为这是两个页面,setState只作用于当前页

@ccXxx1aoBai
Copy link
Contributor

restart也得调用setState()

好家伙 不太懂 能否帮忙看一下 写了个demo https://github.com/soxft/TDCascader/tree/td_sidebar 感谢

我看demo没问题,建议可以把变量放到setState函数体里面

运行起来确实会遇到 问题
当 picker 处于打开的状态下,再在 父组件更新数据。 picker内 没有渲染新的数据。
2024-07-30.15.33.05.mov

因为这是两个页面,setState只作用于当前页

你这个需求是啥情景,不能先获取数据在打开吗

@soxft
Copy link

soxft commented Jul 30, 2024

restart也得调用setState()

好家伙 不太懂 能否帮忙看一下 写了个demo https://github.com/soxft/TDCascader/tree/td_sidebar 感谢

我看demo没问题,建议可以把变量放到setState函数体里面

运行起来确实会遇到 问题
当 picker 处于打开的状态下,再在 父组件更新数据。 picker内 没有渲染新的数据。
2024-07-30.15.33.05.mov

因为这是两个页面,setState只作用于当前页

你这个需求是啥情景,不能先获取数据在打开吗

主要是 按照题主的思路吧 ( 可以先 展示一个 loading 等待加载完后 再打开

@ccXxx1aoBai
Copy link
Contributor

restart也得调用setState()

好家伙 不太懂 能否帮忙看一下 写了个demo https://github.com/soxft/TDCascader/tree/td_sidebar 感谢

我看demo没问题,建议可以把变量放到setState函数体里面

运行起来确实会遇到 问题
当 picker 处于打开的状态下,再在 父组件更新数据。 picker内 没有渲染新的数据。
2024-07-30.15.33.05.mov

因为这是两个页面,setState只作用于当前页

你这个需求是啥情景,不能先获取数据在打开吗

主要是 按照题主的思路吧 ( 可以先 展示一个 loading 等待加载完后 再打开

先弹出,再显示值,这个需要改造组件

Copy link
Contributor

这个 Issue 被标记为了过时 stale ,因为它已经持续 30 天没有任何活动了。删除 stale 标签或评论,否则将在 7 天内关闭。

@github-actions github-actions bot added the Stale label Aug 30, 2024
@Luozf12345 Luozf12345 removed the Stale label Sep 3, 2024
Copy link
Contributor

github-actions bot commented Oct 4, 2024

这个 Issue 被标记为了过时 stale ,因为它已经持续 30 天没有任何活动了。删除 stale 标签或评论,否则将在 7 天内关闭。

Copy link
Contributor

github-actions bot commented Nov 9, 2024

这个 Issue 被标记为了过时 stale ,因为它已经持续 30 天没有任何活动了。删除 stale 标签或评论,否则将在 7 天内关闭。

@github-actions github-actions bot added the Stale label Nov 9, 2024
@Luozf12345 Luozf12345 removed the Stale label Nov 15, 2024
Copy link
Contributor

这个 Issue 被标记为了过时 stale ,因为它已经持续 30 天没有任何活动了。删除 stale 标签或评论,否则将在 7 天内关闭。

@github-actions github-actions bot added the Stale label Dec 17, 2024
@Luozf12345 Luozf12345 added 0.1.8 and removed Stale labels Dec 17, 2024
@Luozf12345 Luozf12345 removed the 0.1.8 label Dec 23, 2024
@Luozf12345
Copy link
Collaborator

0.1.7版本已支持

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants