flutter - 有没有办法使用 material_floating_search_bar 飞镖包在页面中心显示搜索栏而不是仅在顶部显示?
问题描述
我使用flutter进行开发,使用material_floating_search_bar包作为搜索字段。我喜欢显示搜索栏而不是文本字段小部件,但它会引发太多错误。我对相同结果的替代建议持开放态度。一旦文本字段小部件成为焦点,我将使用该包来制作材质动画效果。
static const id = "welcome_scr";
@override
_WelcomeScreenState createState() => _WelcomeScreenState();
}
class _WelcomeScreenState extends State<WelcomeScreen> {
@override
Widget build(BuildContext context) {
return Scaffold(
resizeToAvoidBottomInset: false,
backgroundColor: Colors.white,
body: Stack(
fit: StackFit.expand,
children: [
buildFloatingSearchBar(),
SafeArea(
child: Column(
mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Padding(
padding: EdgeInsets.symmetric(
horizontal: 25,
vertical: 40,
),
child: Column(
mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Row(
children: [
CircleAvatar(
backgroundColor: Colors.blue,
radius: 20.0,
),
SizedBox(
width: 15,
),
Text(
'Hi, Keshav!',
style: TextStyle(
fontWeight: FontWeight.w500, fontSize: 16),
)
],
),
SizedBox(
height: 55,
),
Text(
'Where do \nyou want to go?',
style: TextStyle(
fontSize: 31, fontWeight: FontWeight.bold),
),
SizedBox(
height: 20,
),
GestureDetector(
onTap: () {
Navigator.of(context).push(
MaterialPageRoute(builder: (context) => Demo()));
},
child:
//I WANT THE SEARCHBAR TO BE DISPLAYED HERE INSTEAD OF TEXTFIELD WITHOUT GESTURE DETECTOR AS ITS PARENT
TextField(
decoration: InputDecoration(
border: OutlineInputBorder(
borderSide: BorderSide(width: 2),
borderRadius: const BorderRadius.all(
const Radius.circular(15.0),
),
),
suffixIcon: Icon(
Icons.search,
color: Colors.grey,
size: 30.0,
),
),
keyboardType: TextInputType.text,
),
),
],
),
),
Expanded(
child: ShaderMask(
shaderCallback: (rect) {
return LinearGradient(
begin: Alignment.topCenter,
end: Alignment.center,
colors: [Colors.transparent, Colors.white],
).createShader(
Rect.fromLTRB(0, 0, rect.width, rect.height));
},
blendMode: BlendMode.dstIn,
child: Container(
decoration: BoxDecoration(
image: DecorationImage(
image: AssetImage('images/island-Caribbean.jpg'),
fit: BoxFit.cover),
),
),
),
),
],
),
),
],
),
);
}
}
Widget buildFloatingSearchBar() {
return FloatingSearchBar(
hint: 'Search...',
scrollPadding: const EdgeInsets.only(top: 16, bottom: 56),
transitionDuration: const Duration(milliseconds: 800),
transitionCurve: Curves.easeInOut,
physics: const BouncingScrollPhysics(),
axisAlignment: 0.0,
openAxisAlignment: 0.0,
width: 600,
debounceDelay: const Duration(milliseconds: 500),
onQueryChanged: (query) {
// Call your model, bloc, controller here.
},
// Specify a custom transition to be used for
// animating between opened and closed stated.
transition: CircularFloatingSearchBarTransition(),
actions: [
FloatingSearchBarAction(
showIfOpened: false,
child: CircularButton(
icon: const Icon(Icons.place),
onPressed: () {},
),
),
FloatingSearchBarAction.searchToClear(
showIfClosed: false,
),
],
builder: (context, transition) {
return ClipRRect(
borderRadius: BorderRadius.circular(15),
child: Material(
color: Colors.white,
elevation: 4.0,
child: Column(
mainAxisSize: MainAxisSize.min,
children: Colors.accents.map((color) {
return Container(height: 112, color: color);
}).toList(),
),
),
);
},
);
}
解决方案
推荐阅读
- c# - C#从checkedlistbox插入自定义值选择项到dataviewgrid
- javascript - config.json(TypeError:仅支持绝对 URL)
- sql - 将带有嵌套对象的 JSON 数据读取到 SQL Server 2016
- django-models - Django:如何为 slug 字段获得正确的数字排序?
- html - 如何在 tumblr 上将 h2 样式文本设置为两种颜色?
- google-apps-script - 我尝试了 Programmable-Hide-Unhide-Columns-from-Dropdown-Menu
- jquery - springboot thymleaf中的jquery数据表
- xcode - SwfitUI set the whole app to right to left
- javascript - 突变未提交 vuex
- c++ - 为什么我的对象会在 C++ 中被覆盖?