为了账号安全,请及时绑定邮箱和手机立即绑定

如何扩展 fyne BaseWidget - go 给出错误“type *

如何扩展 fyne BaseWidget - go 给出错误“type *

Go
哔哔one 2023-02-21 19:08:49
我正在尝试扩展 fyne 小部件以具有带背景的简单可点击内容。我搜索了 fyne 小部件以找到一个可以用作入门的示例,并在 List/ListItem 中找到了类似的东西。我基本上复制了列表项代码并稍微调整了一下。它看起来确实类似于fyne 文档中的简单示例。但是由于某些未知原因,go 给了我一个错误,我不知道原因是什么,也不知道如何解决:custom_widget/simple_card.go:80:24: c.card.super undefined (type *SimpleCard has no field or method super)这是模块的代码(custom_widget/simple_card.go):package custom_widgetimport (    "fyne.io/fyne/v2"    "fyne.io/fyne/v2/canvas"    "fyne.io/fyne/v2/theme"    "fyne.io/fyne/v2/widget"    "log")// Declare conformity with interfaces.var _ fyne.Widget = (*SimpleCard)(nil)var _ fyne.Tappable = (*SimpleCard)(nil)type SimpleCard struct {    widget.BaseWidget    onTapped   func()    background *canvas.Rectangle    content    fyne.CanvasObject    selected   bool}func NewSimpleCard(content fyne.CanvasObject, tapped func()) *SimpleCard {    card := &SimpleCard{onTapped: tapped, content: content}    card.ExtendBaseWidget(card)    return card}// CreateRenderer is a private method to Fyne which links this custom_widget to its renderer.func (c *SimpleCard) CreateRenderer() fyne.WidgetRenderer {    c.ExtendBaseWidget(c)    c.background = canvas.NewRectangle(theme.SelectionColor())    c.background.Hide()    objects := []fyne.CanvasObject{c.background, c.content}    // NewBaseRenderer and BaseRenderer are copied from    // https://github.com/fyne-io/fyne/blob/master/internal/widget/base_renderer.go    // because the functionality is marked internal in fyne !?    return &SimpleCardRenderer{NewBaseRenderer(objects), c}}func (c *SimpleCard) Tapped(_ *fyne.PointEvent) {    log.Println("I have been tapped")    if c.onTapped != nil {        c.selected = true        c.Refresh()        c.onTapped()    }}// Declare conformity with the WidgetRenderer interface.var _ fyne.WidgetRenderer = (*SimpleCardRenderer)(nil)type SimpleCardRenderer struct {    BaseRenderer    card *SimpleCard}
查看完整描述

1 回答

?
UYOU

TA贡献1878条经验 获得超4个赞

删除您创建的所有渲染器类型并在CreateRenderer刚刚的 return中widget.NewSimpleRenderer(container .NewMax(c.background, c.content))。它比你想象的要简单。

从主要小部件中复制代码通常不是最好的方法,因为我们有快捷方式和/或必须支持比您自己的小部件更多的功能。


查看完整回答
反对 回复 2023-02-21
  • 1 回答
  • 0 关注
  • 107 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号