|
- import 'package:flutter/material.dart';
- import 'package:flutter/services.dart';
- import 'package:zhiying_base_widget/pages/search_page/notifier/search_tag_notifier.dart';
- import 'package:zhiying_base_widget/pages/search_think_page/bloc/search_think_bloc.dart';
- import 'package:zhiying_base_widget/pages/search_think_page/bloc/search_think_repository.dart';
- import 'package:zhiying_comm/zhiying_comm.dart';
- import 'package:flutter_bloc/flutter_bloc.dart';
- import 'package:provider/provider.dart';
-
- import 'bloc/search_bloc.dart';
- import 'bloc/search_repository.dart';
-
- ///
- /// 搜索页
- ///
- class SearchPage extends StatelessWidget {
- final Map<String, dynamic> data;
-
- SearchPage(this.data, {Key key}) : super(key: key);
-
- @override
- Widget build(BuildContext context) {
- return MultiProvider(
- providers: [
- ChangeNotifierProvider.value(value: SearchTagNotifier())
- ],
- child: MultiProvider(
- providers: [
-
- /// 搜索页面的bloc
- BlocProvider<SearchBloc>(
- create: (_) => SearchBloc(repository: SearchRepository())..add(SearchInitEvent(model: data)),
- ),
-
- /// 输入框联想的bloc
- BlocProvider<SearchThinkBloc>(
- create: (_)=> SearchThinkBloc(SearchThinkRepository()),
- ),
-
- ],
- child: SearchPageContianer(),
- ),
- // child: BlocProvider<SearchBloc>(
- // create: (_) => SearchBloc(repository: SearchRepository())..add(SearchInitEvent(model: data)),
- // child: SearchPageContianer(),
- // ),
- );
- }
- }
-
- class SearchPageContianer extends StatefulWidget {
- @override
- _SearchPageContianerState createState() => _SearchPageContianerState();
- }
-
- class _SearchPageContianerState extends State<SearchPageContianer> {
- /// tab轮播
- TabController _tabController;
-
- @override
- void initState() {
- _tabController = TabController(length: 6, vsync: ScrollableState());
- super.initState();
- }
-
- @override
- void dispose() {
- _tabController?.dispose();
- super.dispose();
- }
-
- @override
- Widget build(BuildContext context) {
- return MediaQuery.removePadding(
- removeTop: true,
- context: context,
- child: Container(
- width: double.infinity,
- child: BlocConsumer<SearchBloc, SearchState>(
- listener: (BuildContext context, SearchState state) {
- if (state is SearchErrorState) {
- print('数据加载出错');
- }
- },
- buildWhen: (previous, current) {
- /// 数据加载出错不进行build
- if (current is SearchErrorState) {
- return false;
- }
-
- /// 搜索成功,跳转结果页面
- if (current is SearchSubmitSuccessState) {
- return false;
- }
-
- /// 搜索失败,不进行build
- if (current is SearchSubmitErrorState) {
- return false;
- }
-
- return true;
- },
- builder: (context, state) {
- print('currente state = $state');
- if (state is SearchLoadedState) {
- return _getMainWidget(state?.model);
- }
-
- /// 骨架屏幕
- return _getMainWidget(null);
- },
- ),
- ),
- );
- }
-
- /// 主视图
- Widget _getMainWidget(List<Map<String, dynamic>> datas) {
- return AnnotatedRegion<SystemUiOverlayStyle>(
- value: SystemUiOverlayStyle.dark,
- child: Scaffold(
- backgroundColor: Colors.white,
- body: Listener(
- onPointerDown: (down) => RouterUtil.hideKeyboard(context),
- child: Column(
- children: _createContentWidget(datas),
- ),
- ),
- ),
- );
- }
-
- List<Widget> _createContentWidget(List<Map<String, dynamic>> datas) {
- List<Widget> list = [];
- int length = datas?.length ?? 0;
- if (length <= 0) {
- /// 骨架屏幕?
- list.add(Container(
- height: 200,
- width: double.infinity,
- color: Colors.white,
- // child: Center(
- // child: Text('暂时无数据哦~'),
- // ),
- ));
- } else {
- for (int i = 0; i < datas.length; i++) {
- WidgetModel item = WidgetModel.fromJson(Map<String, dynamic>.from(datas[i]));
- print('item.modName ${item.modName}');
- list.addAll(WidgetFactory.create(
- item.modName,
- isSliver: false,
- model: datas[i],
- ));
- }
- }
- return list;
- }
-
- // List<Widget> _createContent(BuildContext context, List<Map<String, dynamic>> datas) {
- // List<Widget> list = List();
- //
- // int length = datas?.length ?? 0;
- //
- // if (length <= 0) {
- // list.add(SliverToBoxAdapter(
- // child: Container(
- // height: 200,
- // child: Center(
- // child: Text('暂时无数据哦~'),
- // ),
- // ),
- // ));
- // return list;
- // }
- //
- // for (int i = 0; i < 3; i++) {
- // WidgetModel item = WidgetModel.fromJson(Map<String, dynamic>.from(datas[i]));
- // print('item.modName ${item.modName}');
- // list.addAll(WidgetFactory.create(
- // item.modName,
- // isSliver: true,
- // model: datas[i],
- // ));
- // }
- //
- // return list;
- // }
- }
|