Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 颤振:将FAB click listener传递到Tabbar小部件_Android_Flutter_Interface_Floating Action Button_Tabbar - Fatal编程技术网

Android 颤振:将FAB click listener传递到Tabbar小部件

Android 颤振:将FAB click listener传递到Tabbar小部件,android,flutter,interface,floating-action-button,tabbar,Android,Flutter,Interface,Floating Action Button,Tabbar,我有一个带有tabbar和FAB按钮的主屏幕。我需要将FAB click listener传递给我在Flatter中的tabbar小部件。但我找不到任何方法来实现这一点。我是个新手。有人,请帮我找到解决办法 这是我的主屏幕选项卡栏,我想通过点击FAb进入MyContactTab.dart ... child: TabBarView( children: [ ChatTab().buildChatScreen(),

我有一个带有tabbar和FAB按钮的主屏幕。我需要将FAB click listener传递给我在Flatter中的tabbar小部件。但我找不到任何方法来实现这一点。我是个新手。有人,请帮我找到解决办法

这是我的
主屏幕
选项卡栏,我想通过点击FAb进入
MyContactTab.dart

     ...
        child: TabBarView(
          children: [
            ChatTab().buildChatScreen(),
            GroupTab().buildGroupScreen(),
            MyContactsTab(permissionStatus: _permissionStatus)
          ],
          controller: _tabController,
        ), 
    ...
    floatingActionButton: FloatingActionButton(
      onPressed: () {
        //should call MyContactTab's onRefreshClick()
      },
      child: Icon(
        Icons.sync,
      ),
    ),
class MyContactsTab extends StatefulWidget {
  final PermissionStatus permissionStatus;

  MyContactsTab({Key key, @required this.permissionStatus});

  @override
  State<StatefulWidget> createState() {
    return MyContactState(permissionStatus);
  }
}

class MyContactState extends State<MyContactsTab>
    with AutomaticKeepAliveClientMixin<MyContactsTab> {
  void onRefreshClick() {
    //todo refresh contacts
  }
  ...
}
这是MyContactTab.dart

     ...
        child: TabBarView(
          children: [
            ChatTab().buildChatScreen(),
            GroupTab().buildGroupScreen(),
            MyContactsTab(permissionStatus: _permissionStatus)
          ],
          controller: _tabController,
        ), 
    ...
    floatingActionButton: FloatingActionButton(
      onPressed: () {
        //should call MyContactTab's onRefreshClick()
      },
      child: Icon(
        Icons.sync,
      ),
    ),
class MyContactsTab extends StatefulWidget {
  final PermissionStatus permissionStatus;

  MyContactsTab({Key key, @required this.permissionStatus});

  @override
  State<StatefulWidget> createState() {
    return MyContactState(permissionStatus);
  }
}

class MyContactState extends State<MyContactsTab>
    with AutomaticKeepAliveClientMixin<MyContactsTab> {
  void onRefreshClick() {
    //todo refresh contacts
  }
  ...
}
类MyContactsTab扩展StatefulWidget{
最终许可状态许可状态;
MyContactsTab({Key Key,@required this.permissionStatus});
@凌驾
状态createState(){
返回MyContactState(permissionStatus);
}
}
类MyContactState扩展状态
使用AutomaticEpaLiveClientMixin{
void onRefreshClick(){
//todo刷新联系人
}
...
}

最干净的方法是使用一种模型视图控制器变体。这个包裹很受欢迎。它从本质上把模型分成了几个小组。您可以通过FAB构建上下文获得一个bloc的句柄。您可以在FAB和MyContactTab上方的小部件树中注册bloc。在FAB onPressed()回调中,通过上下文检索bloc,然后使用它更新MyContactTab使用的状态。MyContactTab的构建方法可以侦听bloc状态更新并响应重建

这可能看起来很复杂,但它是干净的、可维护的。您可能可以使用GlobalKeys来从FAB获取特定小部件的句柄,但是在具有不确定生存期的小部件之间传输状态并不容易推理或维护