在main.dart中,我有一个计时器和GestureDetector。 GestureDetector onTap等使用_handleUserInteraction()处理用户交互。 每次用户使用标签页时,应用都会重置计时器。我的问题是我需要将信号onTab(或类似信号)从 form_a.dart 发送到 home.dart 。
如何从嵌套的有状态小部件FormA(** form_a.dart )向home.dart发送onTab信号?**
我需要从home.dart下的任何小部件(尽可能深入地)访问_timer和_handleUserInteraction()函数
package main
import (
"fmt"
"time"
)
type UserDetail struct {
FirstName string
LastName string
Email string
User int
ReportsTo int
}
type Matter struct {
ID int
Name string
Active bool
CreatedAt time.Time
UpdatedAt time.Time
UserID int
}
func Testing(model string) interface{} {
var temp interface{}
if model == "UserDetail" {
fmt.Println("Enter for UserDetail...")
temp = &UserDetail{
FirstName: "Dev",
Email: "dev@gmail.com",
}
} else if model == "Matter" {
fmt.Println("Enter for Matter...")
temp = &Matter{
Name: "Joe",
Active: true,
CreatedAt: time.Now(),
}
}
return temp
}
func main() {
var temp interface{}
temp = Testing("UserDetail")
fmt.Println(temp) // {"Dev", "", "dev@gmail.com", 0, 0}
temp = Testing("Matter")
fmt.Println(temp) // {0, "Joe", true, current timestamp, default timestamp, 0}
}
答案 0 :(得分:2)
一种实现此目的的方法是使用InheritedWidget
的功能。
首先创建您的InheritedWidget
:
class MyInheritedWidget extends InheritedWidget {
const MyInheritedWidget({
Key key,
VoidCallBack handleOnTap,
Widget child,
}) : assert(color != null),
assert(child != null),
super(key: key, child: child);
final VoidCallBack handleOnTap;
static MyInheritedWidget of(BuildContext context) {
return context.inheritFromWidgetOfExactType(MyInheritedWidget);
}
@override
bool updateShouldNotify(MyInheritedWidget old) => handleOnTap != old.handleOnTap;
}
该小部件对于检索子小部件及其层次结构中的父小部件之间的公共数据很有用。
在主文件中,创建与VoidCallBack
签名匹配的处理程序(或根据需要更改签名)。
void _handleUserInteraction() {
// do you stuff to reset your timer
}
因此,您现在应该将PageView
和InheritedWidget
一起包装起来,以使其尽可能高地包含在层次结构中(尽可能靠近主体)并为其提供处理方法
MyInheritedWidget(child: PageView(), handleOnTap: _handleUserInteraction)
最后,在您的onTap
中调用InheritedWidget处理程序:
onTap: () {MyInheritedWidget.of(context).handleOnTap}