import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'bloc/search_bloc.dart'; import 'bloc/search_repository.dart'; import 'package:zhiying_comm/zhiying_comm.dart'; class SearchPage3 extends StatelessWidget { final Map data; const SearchPage3(this.data); @override Widget build(BuildContext context) { return BlocProvider( create: (_) => SearchBloc(repository: SearchRepository())..add(SearchInitEvent(model: data)), child: SearchPage3Container(), ); } } class SearchPage3Container extends StatefulWidget { @override _SearchPage3ContainerState createState() => _SearchPage3ContainerState(); } class _SearchPage3ContainerState extends State { @override Widget build(BuildContext context) { return MediaQuery.removePadding( removeTop: true, context: context, child: Container( width: double.infinity, child: BlocConsumer( 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> datas){ return Scaffold( backgroundColor: Colors.white, body: NestedScrollView( headerSliverBuilder: (context, bool){ return _createHeadWidget(context, datas); }, body: Container( child: Text('testssfee'), ), ), ); } /// 头部视图 List _createHeadWidget(BuildContext context, List> datas){ 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.from(datas[i])); print('item.modName ${item.modName}'); list.addAll(WidgetFactory.create( item.modName, isSliver: true, model: datas[i], )); } return list; } /// 子视图 List _createContent(BuildContext context, List> datas) { List list = List(); /// datas.length - 1 为最后一个在底部 for (int i = 0; i < datas.length; i++) { WidgetModel item = WidgetModel.fromJson(Map.from(datas[i])); print('item.modName ${item.modName}'); list.addAll(WidgetFactory.create( item.modName, isSliver: true, model: datas[i], )); } if (list.length <= 0) { list.add(SliverToBoxAdapter( child: Container( height: 200, child: Center( child: Text('暂时无数据哦~'), ), ), )); } return list; } }