You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

123 lines
3.5 KiB

import 'package:flutter/material.dart';
import 'package:flutter_easyrefresh/easy_refresh.dart';
import 'package:get/get.dart';
import 'package:aku_community/constants/application_objects.dart';
import 'package:aku_community/utils/headers.dart';
import 'package:aku_community/utils/login_util.dart';
import 'package:aku_community/widget/bee_back_button.dart';
class BeeSearch extends StatefulWidget {
BeeSearch({Key key}) : super(key: key);
@override
_BeeSearchState createState() => _BeeSearchState();
}
class _BeeSearchState extends State<BeeSearch> {
TextEditingController _textEditingController = TextEditingController();
List<AO> get _searchAppObjects {
if (_textEditingController.text.isEmpty) return [];
return appObjects
.where((element) => element.title.contains(_textEditingController.text))
.toList();
}
_renderSearchResultBox(String title, {Widget child, bool visible = true}) {
if (!visible) return SizedBox().sliverBoxAdapter();
return Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
title.text.size(28.sp).make(),
Divider(),
child,
],
).p(32.w).material(color: Colors.white).sliverBoxAdapter();
}
Widget _buildColumnIcon(AO e) {
return MaterialButton(
onPressed: () {
if (LoginUtil.isNotLogin) return;
if (!LoginUtil.haveRoom(e.title)) return;
Get.to(e.page);
},
shape: StadiumBorder(),
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Image.asset(
e.path,
height: 75.w,
width: 75.w,
),
8.hb,
e.title.text.size(24.sp).make(),
],
),
);
}
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Color(0xFFF2F2F2),
appBar: AppBar(
backgroundColor: Colors.white,
leading: BeeBackButton(),
elevation: 0,
title: Row(
children: [
40.wb,
Icon(
Icons.search,
size: 32.w,
color: Color(0xFF666666),
),
TextField(
controller: _textEditingController,
onChanged: (_) => setState(() {}),
decoration: InputDecoration(
isDense: true,
contentPadding:
EdgeInsets.symmetric(vertical: 10.w, horizontal: 10.w),
border: InputBorder.none,
hintText: '搜索商品、活动、帖子、应用',
hintStyle: TextStyle(
color: Color(0xFF999999),
fontSize: 28.sp,
),
),
).expand(),
],
)
.box
.color(Color(0xFFF3F3F3))
.withRounded(value: 36.w)
.height(72.w)
.alignment(Alignment.center)
.make(),
),
body: EasyRefresh(
child: CustomScrollView(
slivers: [
32.hb.sliverBoxAdapter(),
_renderSearchResultBox(
'应用',
child: GridView.count(
crossAxisCount: 4,
shrinkWrap: true,
physics: NeverScrollableScrollPhysics(),
children:
_searchAppObjects.map((e) => _buildColumnIcon(e)).toList(),
),
visible: _searchAppObjects.isNotEmpty,
),
],
),
),
);
}
}