首页 > 解决方案 > 在 SearchDelegate Flutter 上添加 TabBar

问题描述

我正在尝试在 Search Delegate 上添加一个标签栏。我想在同一个搜索屏幕上显示产品和用户配置文件的结果。我试图从父类中获取一个控制器并在委托类中实现,但没有发生任何事情(我没有收到任何错误)

目前,我的问题是我想重建构建建议小部件,但我不知道如何做到这一点。因为选项卡按钮小部件具有不同的构建上下文,所以我无法重建 Suggestion 小部件。希望你理解请忽略我的语法错误

class CustomSearchDelegate extends SearchDelegate {
  final TabController tabController;
  CustomSearchDelegate(this.tabController);

  var currentIndex = 0;
  List<Widget> tabs = [Text("Tab 1"), Text("Tab 2")];

  @override
  List<Widget> buildActions(BuildContext context) {
    return [
      Icon(Icons.clear),
    ];
    // TODO: implement buildActions
    throw UnimplementedError();
  }

  @override
  Widget buildLeading(BuildContext context) {
    return Container();
    // TODO: implement buildLeading
    throw UnimplementedError();
  }

  @override
  Widget buildResults(BuildContext context) {
    return Container();
    // TODO: implement buildResults
    throw UnimplementedError();
  }

  @override
  PreferredSizeWidget buildBottom(BuildContext context) {
    return PreferredSize(
        preferredSize: const Size.fromHeight(50.0),
        child: StatefulBuilder(
          builder: (context, setState) => DefaultTabController(
            length: 2,
            child: TabBar(
              onTap: (index) {
                setState(() {
                  currentIndex = index;
                });
              },
              indicatorColor: Colors.red,
              tabs: [
                Padding(
                  padding: const EdgeInsets.symmetric(vertical: 15),
                  child: Text(
                    "Products",
                    style: Theme.of(context).textTheme.headline6,
                  ),
                ),
                Padding(
                  padding: const EdgeInsets.symmetric(vertical: 15),
                  child: Text(
                    "Users",
                    style: Theme.of(context).textTheme.headline6,
                  ),
                ),
              ],
            ),
          ),
        ));
  }

  @override
  Widget buildSuggestions(BuildContext context) {
    final categoriesList =
        Provider.of<PopularServiceList>(context).dummy.where((element) {
      return element.title.toLowerCase().contains(query.toLowerCase());
    });
    return StatefulBuilder(
      builder: (context, setState) {
        return tabs[currentIndex];
      },
    );
    throw UnimplementedError();
  }
}

标签: androidflutterdartflutter-layout

解决方案


推荐阅读