【问题标题】:flutter: pass FAB click listener to Tabbar widget颤振:将 FAB 点击监听器传递给 Tabbar 小部件
【发布时间】:2021-03-04 12:45:37
【问题描述】:

我有一个带有标签栏和 FAB 按钮的主屏幕。我需要将 FAB 点击监听器传递给我的标签栏小部件。但我找不到任何方法来实现这一目标。我是新来的。有人,请帮我找出解决方案。

这是我的HomeScreen 标签栏,我想将 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,
      ),
    ),

这是MyContactTab.dart

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
  }
  ...
}

【问题讨论】:

    标签: android flutter interface floating-action-button tabbar


    【解决方案1】:

    最简洁的方法是使用 Model-View-Controller 变体之一。 flutter_bloc 包是一个受欢迎的选择。它本质上将模型分解为多个块。您可以通过 FAB 构建上下文获取一个块的句柄。您可以在 FAB 和 MyContactTab 上方的小部件树中注册 bloc。在 FAB onPressed() 回调中,您通过上下文检索 bloc,然后使用它来更新 MyContactTab 使用的状态。 MyContactTab 的 build 方法可以监听 bloc 状态更新并在响应中重建。

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

    【讨论】:

      猜你喜欢
      • 2020-12-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-17
      • 2020-08-10
      • 1970-01-01
      • 2021-08-22
      • 1970-01-01
      相关资源
      最近更新 更多