[英]Does anyone know how to implement a search bar with tabs like that similar to instagram using flutter?
我想知道如何构建一个搜索栏,它将用户搜索输入过滤到组或选项卡中,例如人、标签、地点,就像 instagram 一样,但我不知道该怎么做!
它可能看起来像这样:
import 'package:flutter/material.dart';
main() => runApp(
MaterialApp(
// home: Scaffold(
// body: Container(child: SearchButton()),
home: Body()),
);
class Body extends StatefulWidget {
@override
_BodyState createState() => _BodyState();
}
class _BodyState extends State<Body> {
TextEditingController controller;
@override
void initState() {
super.initState();
controller = TextEditingController();
}
@override
Widget build(BuildContext context) {
return DefaultTabController(
length: 2,
child: Scaffold(
appBar: AppBar(
leading: Icon(Icons.search),
title: TextField(
controller: controller,
cursorColor: Colors.white,
style: TextStyle(color: Colors.white),
),
bottom: TabBar(tabs: [
Tab(icon: Icon(Icons.people)),
Tab(icon: Icon(Icons.location_city)),
]),
),
body: TabBarView(children: [Container(), Container()]),
),
);
}
}
为此使用 UniqueKey()
脚手架(背景颜色:ColorConstant.colorWhite,身体:容器(高度:大小。高度,孩子:列(孩子:[容器(装饰:BoxDecoration(颜色:ColorConstant.colorWhite,//边框:Border.all(),),孩子:填充(填充:const EdgeInsets.only(底部:15),孩子:列(孩子:[填充(填充:const EdgeInsets.only(顶部:50.0,左侧:15,右侧:15,底部:15),孩子: Stack( clipBehavior: Clip.none, children: [ Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Container( width: 265, decoration: BoxDecoration( borderRadius: BorderRadius.circular(5), color: ColorConstant.colorIntroBG.withOpacity( 0.1), ), child: TextFormField( controller: _searchController, onChanged: (text) { if (text,= null) { setState(() { // callFriendSuggestionListApi(0, text; true); // print("inside" ); // DiscoveryPostTabScreen(text); searchText = text。 // _Controller;animateTo(2); }), } }: style: TextStyle( fontSize, 16: color.ColorConstant,textColor2: fontFam iily, 'HK Medium'): decoration: new InputDecoration( hintText, "Search Friend": isDense, true: // 添加了这个 contentPadding。 EdgeInsets,all(8): hintStyle: TextStyle( fontSize, 16: color.ColorConstant,hintColor: fontFamily, 'HK Medium'): focusedBorder: OutlineInputBorder( borderRadius.BorderRadius,circular(5): borderSide: BorderSide( color.ColorConstant. colorIntroBG.withOpacity(0,1): width.0,1), ): enableBorder: OutlineInputBorder( borderRadius.BorderRadius,circular(5): borderSide: BorderSide( color.ColorConstant.colorIntroBG.withOpacity(0,1): width. 0,1), ): 前缀图标。 图标( Icons,search: // color.ColorConstant,errorIconColor: size, 27, ): suffixIcon: GestureDetector( onTap; () { print("object"), }: child.Icon( Icons,close: color.ColorConstant, colorIntroBG: size, 25, ), ), ), ), ), Text("取消": style: TextStyle( fontFamily, "HK Bold": fontSize, 16: color.ColorConstant,colorIntroBG)), ], ), ] , ), ): SizedBox( 高度, 10, ): 容器( 高度, 30,
// height: 50,
child: TabBar(
controller: _Controller,
// controller: _controller,
unselectedLabelColor: ColorConstant.colorIntroBG,
tabs: [
Container(
child: Tab(
child: Text("Posts",
style: TextStyle(
fontFamily: "HK Medium", fontSize: 16)),
),
),
Container(
child: Tab(
child: Text("Friends",
style: TextStyle(
fontFamily: "HK Medium", fontSize: 16)),
),
),
Container(
child: Tab(
child: Text("Places",
style: TextStyle(
fontFamily: "HK Medium", fontSize: 16)),
),
),
Container(
child: Tab(
child: Text("Tags",
style: TextStyle(
fontFamily: "HK Medium", fontSize: 16)),
),
),
],
labelPadding: EdgeInsets.symmetric(horizontal: 0.0),
labelColor: ColorConstant.colorIntroBG,
// indicatorWeight: 5,
indicatorColor: ColorConstant.colorBlack,
// indicatorSize: TabBarIndicatorSize.label,
indicator: UnderlineTabIndicator(
borderSide: BorderSide(
color: ColorConstant.colorIntroBG, width: 2),
// insets: EdgeInsets.fromLTRB(60.0, 0.0, 60.0, 40.0),
),
)),
Container(
height: 1,
color: ColorConstant.borderColorOTP,
),
],
),
),
),
Expanded(
child: TabBarView(
controller: _Controller,
key: UniqueKey(),
children: [
DiscoveryPostTabScreen(_searchController.text),
DiscoveryFriendsScreen(_searchController.text),
DiscoveryPlacesScreen(_searchController.text),
DiscoveryTagsScreen(_searchController.text),
],
)),
],
),
),
);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.