Flutter搜索栏插件search_appbar_tool的使用

Flutter搜索栏插件search_appbar_tool的使用

Search Appbar Tool 提供了一些易于使用的组件,用于固定搜索栏。此工具提供了可自定义的小部件。

开始使用

Search Appbar Tool 提供了四个可自定义的小部件:

  • SearchAppBar()
  • DefaultBody()
    • defaultBody
    • normalSearchBody
    • defaultSearchBody

SearchAppBar() 小部件

该小部件应该在 Scaffold 的 appBar 部分使用。

Scaffold(
  appBar: SearchAppBar(
    controller: controller,
    callBack: (value) {},
  ),
);

如上所示,你需要提供一个 TextField 控制器和 TextField 的 onChange 方法。这是让 AppBar 运行所需的全部内容,但你也可以自定义这个小部件。例如:

SearchAppBar(
  // 自定义功能
  suffixIconColor: Colors.red,
  textFieldHeight: 36,
  contentPadding: const EdgeInsets.all(8),
  leadingIconBtnColor: Colors.blue,
  prefixIconColor: Colors.green,
  fillColor: Colors.purple,
  hintText: 'Hello again!',
  prefixIcon: Icons.not_started,
  suffixIcon: Icons.not_started,
  inputBorder: InputBorder.none,
  hintTextStyle: const TextStyle(),

  // 必需参数
  controller: controller,
  callBack: (value) {},
)

DefaultBody() 小部件

该小部件应该在 Scaffold 的 body 部分使用。

Scaffold(
  body: DefaultBody(
    defaultBody: const Center(
      child: Text('默认主体'),
    ),
  ),
);

DefaultBody 小部件需要一个默认主体。同时,AppBar 需要与主体进行交互。你可以在 defaultBody 部分添加任何类型的组件,但请记住,默认主体是你应用程序的主要部分。

normalSearchBody 和 defaultSearchBody 小部件的功能

虽然你不能直接添加这些小部件,但如果添加它们,可以让你的项目更容易编写。让我们看看如何使用它们:

Scaffold(
  body: DefaultBody(
    defaultBody: const Center(
      child: Text('默认主体'),
    ),
    defaultSearchBody: const Center(
      child: Text('默认搜索主体'),
    ),
    normalSearchBody: const Center(
      child: Text('正常搜索主体'),
    ),
  ),
);

首先,我说过默认主体是你应用的主要部分。其他功能与 textField 的 onTap 和 onChange 方法有关。

如果用户点击 textField 部分,defaultSearchBody 将工作。这个小部件类似于默认主体,只有在按下时才会激活。你可以在这里添加“建议”或“过去的搜索”页面。

如果用户在 textField 中输入,normalSearchBody 将工作。这个小部件类似于默认主体,只有在改变 textField 时才会变化。你可以在“搜索结果”、“找到的结果”或“未找到的结果”页面中添加内容。

结果

默认主体视图

默认搜索主体视图

正常搜索主体视图

完整示例代码

import 'package:flutter/material.dart';
import 'package:search_appbar_tool/search_appbar_tool.dart';

void main() {
  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({Key? key}) : super(key: key);

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: const MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  const MyHomePage({Key? key}) : super(key: key);

  [@override](/user/override)
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  final controller = TextEditingController();

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      theme: ThemeData(
        appBarTheme: const AppBarTheme(),
      ),
      home: Scaffold(
        appBar: SearchAppBar(
          fillColor: Colors.green,
          prefixIconColor: Colors.black,
          suffixIconColor: Colors.black,
          leadingIconBtnColor: Colors.black,
          inputBorder: const OutlineInputBorder(
            borderRadius: BorderRadius.all(Radius.circular(20)),
          ),
          controller: controller,
          callBack: (value) {},
        ),
        body: DefaultBody(
          defaultSearchBody: Center(
            child: Column(
              mainAxisAlignment: MainAxisAlignment.center,
              children: const [
                Text(
                  '最近',
                  style: TextStyle(fontSize: 30, color: Colors.black),
                ),
                Divider(),
                Text(
                  '建议',
                  style: TextStyle(fontSize: 30, color: Colors.black),
                ),
              ],
            ),
          ),
          normalSearchBody: Center(
            child: Column(
              mainAxisAlignment: MainAxisAlignment.center,
              children: const [
                Text(
                  '搜索结果',
                  style: TextStyle(fontSize: 30, color: Colors.black),
                ),
                Divider(),
                Text(
                  '找到结果',
                  style: TextStyle(fontSize: 30, color: Colors.black),
                ),
                Divider(),
                Text(
                  '未找到结果',
                  style: TextStyle(fontSize: 30, color: Colors.black),
                ),
              ],
            ),
          ),
          defaultBody: Center(
            child: Column(
              mainAxisAlignment: MainAxisAlignment.center,
              children: const [
                Text(
                  '主页面',
                  style: TextStyle(fontSize: 30, color: Colors.black),
                ),
              ],
            ),
          ),
        ),
      ),
    );
  }
}

更多关于Flutter搜索栏插件search_appbar_tool的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter搜索栏插件search_appbar_tool的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


search_appbar_tool 是一个用于 Flutter 的搜索栏插件,它允许你在应用顶部添加一个带有搜索功能的 AppBar。这个插件非常适合于需要在应用中集成搜索功能的场景。下面是使用 search_appbar_tool 的基本步骤和示例代码。

1. 添加依赖

首先,你需要在 pubspec.yaml 文件中添加 search_appbar_tool 插件的依赖。

dependencies:
  flutter:
    sdk: flutter
  search_appbar_tool: ^1.0.0  # 请使用最新版本

然后运行 flutter pub get 来安装依赖。

2. 导入包

在需要使用搜索栏的 Dart 文件中导入 search_appbar_tool 包。

import 'package:search_appbar_tool/search_appbar_tool.dart';

3. 使用 SearchAppBar

你可以在 ScaffoldappBar 中使用 SearchAppBar 来创建一个带有搜索功能的 AppBar。

import 'package:flutter/material.dart';
import 'package:search_appbar_tool/search_appbar_tool.dart';

class SearchPage extends StatefulWidget {
  @override
  _SearchPageState createState() => _SearchPageState();
}

class _SearchPageState extends State<SearchPage> {
  List<String> items = ['Apple', 'Banana', 'Cherry', 'Date', 'Elderberry', 'Fig', 'Grape', 'Honeydew'];
  List<String> filteredItems = [];

  @override
  void initState() {
    super.initState();
    filteredItems = items;
  }

  void _search(String query) {
    setState(() {
      filteredItems = items.where((item) => item.toLowerCase().contains(query.toLowerCase())).toList();
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: SearchAppBar(
        hintText: 'Search...',
        onTextChanged: _search,
      ),
      body: ListView.builder(
        itemCount: filteredItems.length,
        itemBuilder: (context, index) {
          return ListTile(
            title: Text(filteredItems[index]),
          );
        },
      ),
    );
  }
}

4. 解释代码

  • SearchAppBar: 这是一个带有搜索功能的 AppBar,它包含一个文本输入框,用户可以在其中输入搜索关键词。
  • onTextChanged: 这是一个回调函数,当用户输入文本时触发。你可以在这个函数中根据输入的关键词过滤数据并更新 UI。
  • filteredItems: 这是一个列表,用于存储过滤后的数据。
  • ListView.builder: 用于显示过滤后的数据。

5. 运行应用

保存文件后,运行你的 Flutter 应用。你会看到顶部有一个搜索栏,当你在搜索栏中输入文本时,列表会根据输入的内容进行过滤。

6. 自定义 SearchAppBar

你可以根据需要自定义 SearchAppBar 的外观和行为。例如,可以设置 hintTexticoncolor 等属性。

SearchAppBar(
  hintText: 'Search for items...',
  icon: Icons.search,
  color: Colors.blue,
  onTextChanged: _search,
);
回到顶部