首页 新闻 会员 周边

vscode 插件加载 view 的奇怪问题

0
悬赏园豆:100 [已解决问题] 解决于 2023-08-30 20:05

园子的 vscode 插件一直存在一个奇怪的视图加载问题,虽然已经是登录状态,但每次启动 vscode 之后进入插件,总是先出现登录界面

然后再出现已登录的界面

package.json 中对应的视图配置

插件的实现代码开源在 github 上 https://github.com/cnblogs/vscode-cnb

extension activate 部分的实现见 extension.ts

请问如何解决这个问题?

问题补充:

vscode-cnb.isAuthed 的值是通过下面的代码设置的

await commands.executeCommand('setContext', `${globalCtx.extName}.isAuthed`, isAuthed)
dudu的主页 dudu | 高人七级 | 园豆:30994
提问于:2023-08-29 10:27
< >
分享
最佳答案
0

问题原因

虽然在 extension.ts 中通过 setContext 设置了 vscode-cnb.isAuthed 的值,但是在 extension 启动过程中的某一段时间,setContext 还没生效,会使用默认值 false,从而满足 "when": "!vscode-cnb.isAuthed" 造成 cnblogs-authorize view (登录界面)显示出来。

解决办法

反其道行之,相对于 isAuthed 引入 isUnauthorized

await execCmd('setContext', `${globalCtx.extName}.isUnauthorized`, !isAuthed)

从而促成默认值时 when 条件不满足,以实现登录界面不显示

{
    "id": "cnblogs-authorize",
    "name": "登录/授权",
    "when": "vscode-cnb.isUnauthorized",
    "visibility": "visible"
}

带来的新问题

采用上面的解决问题后,发现一个新问题,在 extenion 启动过程中 setContext 生效之前,由于没有任何 view 的 when 满足条件,vscode 就不会在侧边栏显示这个 extension 的图标,直到至少一个 view 的 when 满足条件才会显示,从而造成 extension 图标的延迟显示,影响用户体验。

于是采用一个变通方法,正好有一个 view 可以在未登录/已登录情况下都可以显示,就用它作为启动过程中 setContext 生效之前的默认 view

{
    "id": "vscode-cnb-workspace",
    "name": "工作空间",
    "when": "!vscode-cnb.isUnauthorized",
    "visibility": "collapsed"
}

更好的解决方法是做一个专门的启动界面。

应该还有更更好的解决,Figma 插件没有这个问题。

dudu | 高人七级 |园豆:30994 | 2023-08-30 18:50
其他回答(1)
0

可能是 treeview 已经注册了, 但是 vscode-cnb.isAuthed 后面才更新, 导致前面会先显示 when=!vscode-cnb.isAuthed 的 view

收获园豆:100
游仙好梦 | 园豆:302 (菜鸟二级) | 2023-08-29 11:04
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册