| @@ -3,7 +3,7 @@ import 'dart:convert'; | |||
| import 'package:zhiying_comm/zhiying_comm.dart'; | |||
| class SearchResultItemRepository { | |||
| List<Map<String, dynamic>> _pageData; | |||
| List<Map<String, dynamic>> _pageData = []; | |||
| /// 初始化 | |||
| Future<List<Map<String, dynamic>>> fetchInitData(final Map<String, dynamic> model) async { | |||
| @@ -14,17 +14,15 @@ class SearchResultItemRepository { | |||
| if (NetUtil.isSuccess(result) && !EmptyUtil.isEmpty(result)) { | |||
| try { | |||
| List<Map<String, dynamic>> modList = List.from(result[GlobalConfig.HTTP_RESPONSE_KEY_DATA]['mod_list']); | |||
| modList.forEach((Map<String, dynamic> item) { | |||
| var data = jsonDecode(item['data']); | |||
| data['keywords'] = keywords; | |||
| item['data'] = jsonEncode(data); | |||
| _pageData.add(item); | |||
| }); | |||
| return _pageData; | |||
| } catch (e) { | |||
| Logger.error(e.toString()); | |||
| } catch (e, s) { | |||
| Logger.error('${e?.toString()} , s = ${s?.toString()}'); | |||
| } | |||
| } | |||
| return null; | |||
| @@ -49,7 +47,9 @@ class SearchResultItemRepository { | |||
| }); | |||
| return _pageData; | |||
| } | |||
| } catch (e) {} | |||
| } catch (e, s) { | |||
| Logger.error('${e?.toString()} , s = ${s?.toString()}'); | |||
| } | |||
| return null; | |||
| } | |||
| } | |||
| @@ -2,6 +2,7 @@ import 'package:sharesdk_plugin/sharesdk_interface.dart'; | |||
| import 'package:sharesdk_plugin/sharesdk_register.dart'; | |||
| import 'package:zhiying_base_widget/pages/favorite_page/favorite_page.dart'; | |||
| import 'package:zhiying_base_widget/pages/goods_details_page/goods_details_page.dart'; | |||
| import 'package:zhiying_base_widget/pages/home_page/home_page.dart'; | |||
| import 'package:zhiying_base_widget/pages/invited_friends/invited_friends.dart'; | |||
| import 'package:zhiying_base_widget/pages/launch_page/launch_page.dart'; | |||
| import 'package:zhiying_base_widget/pages/main_page/main_page.dart'; | |||
| @@ -57,6 +58,7 @@ import 'widgets/search/history_tag/search_history_tag.dart'; | |||
| import 'widgets/search/hot_tag/search_hot_tag_widget.dart'; | |||
| import 'widgets/search/input/search_input_widget.dart'; | |||
| import 'widgets/search/tabbar/search_tab_creater.dart'; | |||
| import 'widgets/search_result/goods_list/search_result_goods_list_creater.dart'; | |||
| import 'widgets/search_result/goods_list/search_result_goods_list_widget.dart'; | |||
| import 'widgets/search_result/search_input/search_result_input.dart'; | |||
| @@ -92,7 +94,8 @@ class BaseWidgetRegister { | |||
| // 注册页面 | |||
| static void registPage() { | |||
| PageFactory.regist('homePage', (model) => LaunchPage()); | |||
| PageFactory.regist('LaunchPage', (model) => LaunchPage()); | |||
| PageFactory.regist('homePage', (model) => HomePage()); | |||
| PageFactory.regist('pub.flutter.index', (model) => MainPage(model)); | |||
| PageFactory.regist('pub.flutter.profile', (model) => MainPage(model)); | |||
| PageFactory.regist( | |||
| @@ -193,42 +196,42 @@ class BaseWidgetRegister { | |||
| DefaultWidgetCreater((model) => SearchResultSortWidget(model))); | |||
| // 搜索结果的商品列表 淘宝 | |||
| WidgetFactory.regist('search_result_taobao_item', | |||
| DefaultWidgetCreater((model) => SearchResultGoodsListWidget(model))); | |||
| SearchResultGoodsListCreater()); | |||
| // 搜索结果页筛选widget 京东 | |||
| WidgetFactory.regist('search_result_jd_sort', | |||
| DefaultWidgetCreater((model) => SearchResultSortWidget(model))); | |||
| // 搜索结果的商品列表 京东 | |||
| WidgetFactory.regist('search_result_jd_item', | |||
| DefaultWidgetCreater((model) => SearchResultGoodsListWidget(model))); | |||
| SearchResultGoodsListCreater()); | |||
| // 搜索结果页筛选widget 苏宁 | |||
| WidgetFactory.regist('search_result_suning_sort', | |||
| DefaultWidgetCreater((model) => SearchResultSortWidget(model))); | |||
| // 搜索结果的商品列表 苏宁 | |||
| WidgetFactory.regist('search_result_suning_item', | |||
| DefaultWidgetCreater((model) => SearchResultGoodsListWidget(model))); | |||
| SearchResultGoodsListCreater()); | |||
| // 搜索结果页筛选widget 拼多多 | |||
| WidgetFactory.regist('search_result_pdd_sort', | |||
| DefaultWidgetCreater((model) => SearchResultSortWidget(model))); | |||
| // 搜索结果的商品列表 拼多多 | |||
| WidgetFactory.regist('search_result_pdd_item', | |||
| DefaultWidgetCreater((model) => SearchResultGoodsListWidget(model))); | |||
| SearchResultGoodsListCreater()); | |||
| // 搜索结果页筛选widget 唯品会 | |||
| WidgetFactory.regist('search_result_vip', | |||
| WidgetFactory.regist('search_result_vip_sort', | |||
| DefaultWidgetCreater((model) => SearchResultSortWidget(model))); | |||
| // 搜索结果的商品列表 唯品会 | |||
| WidgetFactory.regist('search_result_vip_item', | |||
| DefaultWidgetCreater((model) => SearchResultGoodsListWidget(model))); | |||
| SearchResultGoodsListCreater()); | |||
| // 搜索结果页筛选widget 考拉 | |||
| WidgetFactory.regist('search_result_kaola', | |||
| WidgetFactory.regist('search_result_kaola_sort', | |||
| DefaultWidgetCreater((model) => SearchResultSortWidget(model))); | |||
| // 搜索结果的商品列表 考拉 | |||
| WidgetFactory.regist('search_result_kaola_item', | |||
| DefaultWidgetCreater((model) => SearchResultGoodsListWidget(model))); | |||
| SearchResultGoodsListCreater()); | |||
| /// ==================== 商品详情 ==================== /// | |||
| // 商品详情轮播图 | |||
| @@ -1,6 +1,7 @@ | |||
| import 'dart:convert'; | |||
| import 'package:cached_network_image/cached_network_image.dart'; | |||
| import 'package:flutter/cupertino.dart'; | |||
| import 'package:flutter/material.dart'; | |||
| import 'package:zhiying_base_widget/pages/goods_details_page/goods_details_page.dart'; | |||
| import 'package:zhiying_base_widget/widgets/home/home_goods/models/home_goods_model.dart'; | |||
| @@ -24,8 +25,7 @@ class HomeGoodsItem extends StatelessWidget { | |||
| /// 跳到商品详情 | |||
| void _onJumpGoodsDetails(BuildContext context, HomeGoodsModel goods) { | |||
| Navigator.push(context, | |||
| MaterialPageRoute(builder: (_) => GoodsDetailsPage(goods.toJson()))); | |||
| Navigator.push(context, CupertinoPageRoute(builder: (_) => GoodsDetailsPage(goods.toJson()))); | |||
| } | |||
| @override | |||
| @@ -1,6 +1,7 @@ | |||
| import 'dart:convert'; | |||
| import 'package:cached_network_image/cached_network_image.dart'; | |||
| import 'package:flutter/cupertino.dart'; | |||
| import 'package:flutter/material.dart'; | |||
| import 'package:zhiying_base_widget/pages/goods_details_page/goods_details_page.dart'; | |||
| import 'package:zhiying_base_widget/widgets/home/home_goods/models/home_goods_model.dart'; | |||
| @@ -24,8 +25,7 @@ class HomeGoodsItemSingle extends StatelessWidget { | |||
| /// 跳到商品详情 | |||
| void _onJumpGoodsDetails(BuildContext context, HomeGoodsModel goods) { | |||
| Navigator.push(context, | |||
| MaterialPageRoute(builder: (_) => GoodsDetailsPage(goods.toJson()))); | |||
| Navigator.push(context, CupertinoPageRoute(builder: (_) => GoodsDetailsPage(goods.toJson()))); | |||
| } | |||
| @override | |||
| @@ -41,7 +41,7 @@ class _HomeQuickEntryContianerState extends State<HomeQuickEntryContianer> { | |||
| Widget build(BuildContext context) { | |||
| return BlocConsumer<HomeQuickEntryBloc, HomeQuickEntryState>( | |||
| listener: (context, state) { | |||
| Logger.log('数据加载出错'); | |||
| Logger.log('home_quick_entry = 数据加载出错'); | |||
| }, | |||
| buildWhen: (prev, current) { | |||
| if (current is HomeQuickEntryErrorState) { | |||
| @@ -2,6 +2,7 @@ import 'dart:convert' as convert; | |||
| import 'dart:ui'; | |||
| import 'package:cached_network_image/cached_network_image.dart'; | |||
| import 'package:flutter/cupertino.dart'; | |||
| import 'package:flutter/material.dart'; | |||
| import 'package:zhiying_base_widget/pages/search_page/search_page.dart'; | |||
| import 'package:zhiying_comm/zhiying_comm.dart'; | |||
| @@ -72,7 +73,7 @@ class _HomeSreachContainer extends StatelessWidget { | |||
| void _openSreach(BuildContext context){ | |||
| // SkipModel skipModel = SkipModel.fromJson(model); | |||
| // RouterUtil.route(skipModel, null, context); | |||
| Navigator.push(context, MaterialPageRoute( | |||
| Navigator.push(context, CupertinoPageRoute( | |||
| builder: (context) => SearchPage(null) | |||
| )); | |||
| } | |||
| @@ -1,5 +1,6 @@ | |||
| import 'dart:convert'; | |||
| import 'package:flutter/cupertino.dart'; | |||
| import 'package:flutter/material.dart'; | |||
| import 'package:shared_preferences/shared_preferences.dart'; | |||
| import 'package:zhiying_base_widget/pages/search_page/notifier/search_tag_notifier.dart'; | |||
| @@ -40,7 +41,7 @@ class _SearchHistoryTagWidgetState extends State<SearchHistoryTagWidget> { | |||
| /// 点击历史标签 | |||
| void _historyTagClick(String tag) { | |||
| if (!EmptyUtil.isEmpty(tag)) { | |||
| Navigator.push(context, MaterialPageRoute(builder: (_) => SearchResultPage({'keywords': tag ?? '', 'tag': 'search_page'}))); | |||
| Navigator.push(context, CupertinoPageRoute(builder: (_) => SearchResultPage({'keywords': tag ?? '', 'tag': 'search_page'}))); | |||
| } | |||
| } | |||
| @@ -1,5 +1,6 @@ | |||
| import 'dart:convert'; | |||
| import 'package:flutter/cupertino.dart'; | |||
| import 'package:flutter/material.dart'; | |||
| import 'package:zhiying_base_widget/pages/search_page/notifier/search_tag_notifier.dart'; | |||
| import 'package:zhiying_base_widget/pages/search_result_page/search_result_page.dart'; | |||
| @@ -31,7 +32,7 @@ class SearchHotTagWidget extends StatelessWidget { | |||
| await Provider.of<SearchTagNotifier>(context, listen: false).addTag(model.keyword); | |||
| Navigator.push(context, MaterialPageRoute(builder: (_) => SearchResultPage({'keywords': model?.keyword ?? '', 'tag': 'search_page'}))); | |||
| Navigator.push(context, CupertinoPageRoute(builder: (_) => SearchResultPage({'keywords': model?.keyword ?? '', 'tag': 'search_page'}))); | |||
| } | |||
| } | |||
| @@ -1,5 +1,6 @@ | |||
| import 'dart:convert'; | |||
| import 'dart:ui'; | |||
| import 'package:flutter/cupertino.dart'; | |||
| import 'package:flutter/material.dart'; | |||
| import 'package:zhiying_base_widget/pages/search_page/notifier/search_tag_notifier.dart'; | |||
| import 'package:zhiying_base_widget/pages/search_result_page/search_result_page.dart'; | |||
| @@ -40,7 +41,7 @@ class _SearchInputWidgetState extends State<SearchInputWidget> { | |||
| /// TODO 保存历史标签 | |||
| if (!EmptyUtil.isEmpty(content)) { | |||
| await Provider.of<SearchTagNotifier>(context, listen: false).addTag(content); | |||
| Navigator.push(context, MaterialPageRoute(builder: (_) => SearchResultPage({'keywords': content, 'tag': 'search_page'}))); | |||
| Navigator.push(context, CupertinoPageRoute(builder: (_) => SearchResultPage({'keywords': content, 'tag': 'search_page'}))); | |||
| }else{ | |||
| Fluttertoast.showToast(msg: '输入内容不能为空!'); | |||
| } | |||
| @@ -1,5 +1,6 @@ | |||
| import 'dart:convert'; | |||
| import 'package:flutter/cupertino.dart'; | |||
| import 'package:flutter/material.dart'; | |||
| import 'package:cached_network_image/cached_network_image.dart'; | |||
| import 'package:tab_indicator_styler/tab_indicator_styler.dart'; | |||
| @@ -36,7 +37,7 @@ class _SearchTabWidgetState extends State<SearchTabWidget> { | |||
| /// 联想列表的item点击事件 | |||
| _onThinkItemClick(SearchThinkModel model){ | |||
| Navigator.push(context, MaterialPageRoute( | |||
| Navigator.push(context, CupertinoPageRoute( | |||
| builder: (_)=> SearchResultPage(model.toJson()..['tag'] = 'search_page') | |||
| )); | |||
| } | |||
| @@ -55,25 +55,25 @@ class SearchResultGoodsListBloc extends Bloc<SearchResultGoodsListEvent, SearchR | |||
| yield* _mapSortEventToState(event); | |||
| } | |||
| /// 综合 | |||
| if (event is SearchResultGoodsListZHSortEvent) { | |||
| yield* _mapZhSortEventToState(event); | |||
| } | |||
| /// 补贴 | |||
| if (event is SearchResultGoodsListBtSortEvent) { | |||
| yield* _mapBTSortEventToState(event); | |||
| } | |||
| /// 优惠券 | |||
| if (event is SearchResultGoodsListYHQSortEvent) { | |||
| yield* _mapYHQSortEventToState(event); | |||
| } | |||
| /// 筛选 | |||
| if (event is SearchResultGoodsListSXSortEvent) { | |||
| yield* _mapSXSortEventToState(event); | |||
| } | |||
| // /// 综合 | |||
| // if (event is SearchResultGoodsListZHSortEvent) { | |||
| // yield* _mapZhSortEventToState(event); | |||
| // } | |||
| // | |||
| // /// 补贴 | |||
| // if (event is SearchResultGoodsListBtSortEvent) { | |||
| // yield* _mapBTSortEventToState(event); | |||
| // } | |||
| // | |||
| // /// 优惠券 | |||
| // if (event is SearchResultGoodsListYHQSortEvent) { | |||
| // yield* _mapYHQSortEventToState(event); | |||
| // } | |||
| // | |||
| // /// 筛选 | |||
| // if (event is SearchResultGoodsListSXSortEvent) { | |||
| // yield* _mapSXSortEventToState(event); | |||
| // } | |||
| } | |||
| /// 初始化事件 | |||
| @@ -136,43 +136,43 @@ class SearchResultGoodsListBloc extends Bloc<SearchResultGoodsListEvent, SearchR | |||
| } | |||
| } | |||
| /// 综合排序 | |||
| Stream<SearchResultGoodsListState> _mapZhSortEventToState(SearchResultGoodsListZHSortEvent event) async* { | |||
| var result = await repository.fetchZhSort(event.args); | |||
| if (!EmptyUtil.isEmpty(result)) { | |||
| yield SearchResultGoodsListLoadedState(model: result); | |||
| } else { | |||
| yield SearchResultGoodsListErrorState(); | |||
| } | |||
| } | |||
| /// 补贴排序 | |||
| Stream<SearchResultGoodsListState> _mapBTSortEventToState(SearchResultGoodsListBtSortEvent event) async* { | |||
| var result = await repository.fetchBt(event.args); | |||
| if (!EmptyUtil.isEmpty(result)) { | |||
| yield SearchResultGoodsListLoadedState(model: result); | |||
| } else { | |||
| yield SearchResultGoodsListErrorState(); | |||
| } | |||
| } | |||
| /// 优惠券排序 | |||
| Stream<SearchResultGoodsListState> _mapYHQSortEventToState(SearchResultGoodsListYHQSortEvent event) async* { | |||
| var result = await repository.fetchYhq(event.args); | |||
| if (!EmptyUtil.isEmpty(result)) { | |||
| yield SearchResultGoodsListLoadedState(model: result); | |||
| } else { | |||
| yield SearchResultGoodsListErrorState(); | |||
| } | |||
| } | |||
| /// 筛选排序 | |||
| Stream<SearchResultGoodsListState> _mapSXSortEventToState(SearchResultGoodsListSXSortEvent event) async* { | |||
| var result = await repository.fetchSX(event.args); | |||
| if (!EmptyUtil.isEmpty(result)) { | |||
| yield SearchResultGoodsListLoadedState(model: result); | |||
| } else { | |||
| yield SearchResultGoodsListErrorState(); | |||
| } | |||
| } | |||
| // /// 综合排序 | |||
| // Stream<SearchResultGoodsListState> _mapZhSortEventToState(SearchResultGoodsListZHSortEvent event) async* { | |||
| // var result = await repository.fetchZhSort(event.args); | |||
| // if (!EmptyUtil.isEmpty(result)) { | |||
| // yield SearchResultGoodsListLoadedState(model: result); | |||
| // } else { | |||
| // yield SearchResultGoodsListErrorState(); | |||
| // } | |||
| // } | |||
| // | |||
| // /// 补贴排序 | |||
| // Stream<SearchResultGoodsListState> _mapBTSortEventToState(SearchResultGoodsListBtSortEvent event) async* { | |||
| // var result = await repository.fetchBt(event.args); | |||
| // if (!EmptyUtil.isEmpty(result)) { | |||
| // yield SearchResultGoodsListLoadedState(model: result); | |||
| // } else { | |||
| // yield SearchResultGoodsListErrorState(); | |||
| // } | |||
| // } | |||
| // | |||
| // /// 优惠券排序 | |||
| // Stream<SearchResultGoodsListState> _mapYHQSortEventToState(SearchResultGoodsListYHQSortEvent event) async* { | |||
| // var result = await repository.fetchYhq(event.args); | |||
| // if (!EmptyUtil.isEmpty(result)) { | |||
| // yield SearchResultGoodsListLoadedState(model: result); | |||
| // } else { | |||
| // yield SearchResultGoodsListErrorState(); | |||
| // } | |||
| // } | |||
| // | |||
| // /// 筛选排序 | |||
| // Stream<SearchResultGoodsListState> _mapSXSortEventToState(SearchResultGoodsListSXSortEvent event) async* { | |||
| // var result = await repository.fetchSX(event.args); | |||
| // if (!EmptyUtil.isEmpty(result)) { | |||
| // yield SearchResultGoodsListLoadedState(model: result); | |||
| // } else { | |||
| // yield SearchResultGoodsListErrorState(); | |||
| // } | |||
| // } | |||
| } | |||
| @@ -36,41 +36,41 @@ class SearchResultGoodsListSortEvent extends SearchResultGoodsListEvent{ | |||
| } | |||
| /// 综合排序 | |||
| class SearchResultGoodsListZHSortEvent extends SearchResultGoodsListEvent{ | |||
| String args; | |||
| String id; | |||
| SearchResultGoodsListZHSortEvent(this.args, this.id); | |||
| @override | |||
| List<Object> get props => [this.args, this.id]; | |||
| } | |||
| /// 补贴排序 | |||
| class SearchResultGoodsListBtSortEvent extends SearchResultGoodsListEvent{ | |||
| String args; | |||
| String id; | |||
| SearchResultGoodsListBtSortEvent(this.args, this.id); | |||
| @override | |||
| List<Object> get props => [this.args, this.id]; | |||
| } | |||
| /// 优惠券排序 | |||
| class SearchResultGoodsListYHQSortEvent extends SearchResultGoodsListEvent{ | |||
| String args; | |||
| String id; | |||
| SearchResultGoodsListYHQSortEvent(this.args, this.id); | |||
| @override | |||
| List<Object> get props => [this.args, this.id]; | |||
| } | |||
| /// 优惠券排序 | |||
| class SearchResultGoodsListSXSortEvent extends SearchResultGoodsListEvent{ | |||
| String args; | |||
| String id; | |||
| SearchResultGoodsListSXSortEvent(this.args, this.id); | |||
| @override | |||
| List<Object> get props => [this.args, this.id]; | |||
| } | |||
| // class SearchResultGoodsListZHSortEvent extends SearchResultGoodsListEvent{ | |||
| // String args; | |||
| // String id; | |||
| // | |||
| // SearchResultGoodsListZHSortEvent(this.args, this.id); | |||
| // @override | |||
| // List<Object> get props => [this.args, this.id]; | |||
| // } | |||
| // | |||
| // /// 补贴排序 | |||
| // class SearchResultGoodsListBtSortEvent extends SearchResultGoodsListEvent{ | |||
| // String args; | |||
| // String id; | |||
| // | |||
| // SearchResultGoodsListBtSortEvent(this.args, this.id); | |||
| // @override | |||
| // List<Object> get props => [this.args, this.id]; | |||
| // } | |||
| // | |||
| // /// 优惠券排序 | |||
| // class SearchResultGoodsListYHQSortEvent extends SearchResultGoodsListEvent{ | |||
| // String args; | |||
| // String id; | |||
| // | |||
| // SearchResultGoodsListYHQSortEvent(this.args, this.id); | |||
| // @override | |||
| // List<Object> get props => [this.args, this.id]; | |||
| // } | |||
| // | |||
| // /// 优惠券排序 | |||
| // class SearchResultGoodsListSXSortEvent extends SearchResultGoodsListEvent{ | |||
| // String args; | |||
| // String id; | |||
| // | |||
| // SearchResultGoodsListSXSortEvent(this.args, this.id); | |||
| // @override | |||
| // List<Object> get props => [this.args, this.id]; | |||
| // } | |||
| @@ -78,38 +78,6 @@ class SearchResultGoodsListRepository { | |||
| return _baseInitData(true, reqData); | |||
| } | |||
| /// 综合排序 | |||
| Future<List<HomeGoodsModel>> fetchZhSort(String arg) async { | |||
| _urlArgs['zh'] = arg; | |||
| _currentPage = 1; | |||
| _hasNomore = true; | |||
| return _baseInitData(true, reqData); | |||
| } | |||
| /// 补贴 | |||
| Future<List<HomeGoodsModel>> fetchBt(String arg) async { | |||
| _urlArgs['bt'] = arg; | |||
| _currentPage = 1; | |||
| _hasNomore = true; | |||
| return _baseInitData(true, reqData); | |||
| } | |||
| /// 优惠券 | |||
| Future<List<HomeGoodsModel>> fetchYhq(String arg) async { | |||
| _urlArgs['yhq'] = arg; | |||
| _currentPage = 1; | |||
| _hasNomore = true; | |||
| return _baseInitData(true, reqData); | |||
| } | |||
| /// 筛选 | |||
| Future<List<HomeGoodsModel>> fetchSX(String arg) async { | |||
| _urlArgs['sx'] = arg; | |||
| _currentPage = 1; | |||
| _hasNomore = true; | |||
| return _baseInitData(true, reqData); | |||
| } | |||
| /// 查询 | |||
| Future<List<HomeGoodsModel>> _baseInitData(bool refresh, final Map<String, dynamic> model) async { | |||
| String keyword = model['keywords'] ?? ''; | |||
| @@ -177,4 +145,37 @@ class SearchResultGoodsListRepository { | |||
| return url; | |||
| } | |||
| } | |||
| // /// 综合排序 | |||
| // Future<List<HomeGoodsModel>> fetchZhSort(String arg) async { | |||
| // _urlArgs['zh'] = arg; | |||
| // _currentPage = 1; | |||
| // _hasNomore = true; | |||
| // return _baseInitData(true, reqData); | |||
| // } | |||
| // | |||
| // /// 补贴 | |||
| // Future<List<HomeGoodsModel>> fetchBt(String arg) async { | |||
| // _urlArgs['bt'] = arg; | |||
| // _currentPage = 1; | |||
| // _hasNomore = true; | |||
| // return _baseInitData(true, reqData); | |||
| // } | |||
| // | |||
| // /// 优惠券 | |||
| // Future<List<HomeGoodsModel>> fetchYhq(String arg) async { | |||
| // _urlArgs['yhq'] = arg; | |||
| // _currentPage = 1; | |||
| // _hasNomore = true; | |||
| // return _baseInitData(true, reqData); | |||
| // } | |||
| // | |||
| // /// 筛选 | |||
| // Future<List<HomeGoodsModel>> fetchSX(String arg) async { | |||
| // _urlArgs['sx'] = arg; | |||
| // _currentPage = 1; | |||
| // _hasNomore = true; | |||
| // return _baseInitData(true, reqData); | |||
| // } | |||
| } | |||
| @@ -0,0 +1,18 @@ | |||
| import 'package:flutter/src/widgets/framework.dart'; | |||
| import 'package:zhiying_comm/zhiying_comm.dart'; | |||
| import 'search_result_goods_list_widget.dart'; | |||
| class SearchResultGoodsListCreater extends WidgetCreater { | |||
| @override | |||
| List<Widget> createWidgets(Map<String, dynamic> model) { | |||
| return [SearchResultGoodsListWidget(model)]; | |||
| } | |||
| @override | |||
| bool isSliverChild() { | |||
| return true; | |||
| } | |||
| } | |||
| @@ -61,11 +61,6 @@ class _SearchResultGoodsListWidgetContainerState extends State<SearchResultGoods | |||
| BlocProvider.of<SearchResultGoodsListBloc>(context).add(SearchResultGoodsListOnLoadEvent()); | |||
| } | |||
| /// 跳转商品详情 | |||
| void _openGoodsDetailsPage() { | |||
| Navigator.push(context, MaterialPageRoute(builder: (_) => GoodsDetailsPage(null))); | |||
| } | |||
| @override | |||
| void initState() { | |||
| /// 初始化 | |||
| @@ -75,20 +70,35 @@ class _SearchResultGoodsListWidgetContainerState extends State<SearchResultGoods | |||
| @override | |||
| Widget build(BuildContext context) { | |||
| return BlocConsumer<SearchResultGoodsListBloc, SearchResultGoodsListState>( | |||
| listener: (BuildContext context, SearchResultGoodsListState state) { | |||
| if (state is SearchResultGoodsListErrorState) { | |||
| print('数据加载出错'); | |||
| } | |||
| }, | |||
| buildWhen: (previous, current) { | |||
| /// 数据加载出错不进行build | |||
| if (current is SearchResultGoodsListErrorState) { | |||
| return false; | |||
| } | |||
| // return BlocConsumer<SearchResultGoodsListBloc, SearchResultGoodsListState>( | |||
| // listener: (BuildContext context, SearchResultGoodsListState state) { | |||
| // if (state is SearchResultGoodsListErrorState) { | |||
| // print('search_result_goods_list_widget = 数据加载出错'); | |||
| // } | |||
| // }, | |||
| // buildWhen: (previous, current) { | |||
| // /// 数据加载出错不进行build | |||
| // if (current is SearchResultGoodsListErrorState) { | |||
| // return false; | |||
| // } | |||
| // | |||
| // return true; | |||
| // }, | |||
| // builder: (context, state) { | |||
| // if (state is SearchResultGoodsListLoadedState) { | |||
| // return _getMainWidget(state?.model, widget?.style); | |||
| // } | |||
| // if (state is SearchResultGoodsListChangeStyleState) { | |||
| // _isShowOneColumn = state.isShowOneColumn; | |||
| // return _getMainWidget(state?.model, widget?.style); | |||
| // } | |||
| // | |||
| // /// 骨架屏幕 | |||
| // return HomeGoodsSkeleton(); | |||
| // }, | |||
| // ); | |||
| return true; | |||
| }, | |||
| return BlocBuilder<SearchResultGoodsListBloc, SearchResultGoodsListState>( | |||
| builder: (context, state) { | |||
| if (state is SearchResultGoodsListLoadedState) { | |||
| return _getMainWidget(state?.model, widget?.style); | |||
| @@ -97,9 +107,7 @@ class _SearchResultGoodsListWidgetContainerState extends State<SearchResultGoods | |||
| _isShowOneColumn = state.isShowOneColumn; | |||
| return _getMainWidget(state?.model, widget?.style); | |||
| } | |||
| /// 骨架屏幕 | |||
| return HomeGoodsSkeleton(); | |||
| return SliverToBoxAdapter(child: HomeGoodsSkeleton(),); | |||
| }, | |||
| ); | |||
| } | |||
| @@ -108,11 +116,10 @@ class _SearchResultGoodsListWidgetContainerState extends State<SearchResultGoods | |||
| Widget _getMainWidget(List<HomeGoodsModel> goods, HomeGoodsStyleModel styleModel) { | |||
| int column = _isShowOneColumn ? 1 : 2; | |||
| return ListView.builder( | |||
| shrinkWrap: true, | |||
| physics: NeverScrollableScrollPhysics(), | |||
| itemCount: goods?.length ?? 0, | |||
| itemBuilder: (context, index) { | |||
| return SliverPadding( | |||
| padding: const EdgeInsets.only(top: 25), | |||
| sliver: SliverList( | |||
| delegate: SliverChildBuilderDelegate((context, index) { | |||
| if (column == 1) { | |||
| return HomeGoodsItemSingle( | |||
| goods[index], | |||
| @@ -139,54 +146,41 @@ class _SearchResultGoodsListWidgetContainerState extends State<SearchResultGoods | |||
| ), | |||
| ); | |||
| } | |||
| }); | |||
| } | |||
| }, childCount: goods.length), | |||
| ), | |||
| ); | |||
| /// 单列 | |||
| // Widget _getSignleWidget(List<HomeGoodsModel> goods, HomeGoodsStyleModel styleModel) { | |||
| // return ListView.builder( | |||
| // shrinkWrap: true, | |||
| // physics: NeverScrollableScrollPhysics(), | |||
| // itemCount: goods.length, | |||
| // itemBuilder: (context, index) { | |||
| // if (column == 1) { | |||
| // return HomeGoodsItemSingle( | |||
| // goods[index], | |||
| // styleModel, | |||
| // data: widget.data, | |||
| // ); | |||
| // } else { | |||
| // // return Container(color: Colors.red, height: 126,margin: EdgeInsets.all(10),); | |||
| // return Padding( | |||
| // padding: const EdgeInsets.only(left: 5, right: 5), | |||
| // child: Row( | |||
| // children: List.generate(column, (c) { | |||
| // int i = index * column + c; | |||
| // return Expanded( | |||
| // child: i < goods.length | |||
| // ? HomeGoodsItem( | |||
| // goods[i], | |||
| // _style, | |||
| // data: widget.data, | |||
| // ) | |||
| // : Container(), | |||
| // ); | |||
| // }).toList(), | |||
| // ), | |||
| // ); | |||
| // } | |||
| // }); | |||
| // | |||
| // return HomeGoodsItemSingle(model, styleModel); | |||
| // } | |||
| // | |||
| // /// 双列 | |||
| // Widget _getTowWidget(List<HomeGoodsModel> goods, HomeGoodsStyleModel styleModel) { | |||
| // int column = 2; | |||
| // int count = (goods.length / column).ceil(); | |||
| // | |||
| // return Container( | |||
| // child: Text('22222222'), | |||
| // ); | |||
| // } | |||
| // return ListView.builder( | |||
| // shrinkWrap: true, | |||
| // // physics: NeverScrollableScrollPhysics(), | |||
| // itemCount: goods?.length ?? 0, | |||
| // itemBuilder: (context, index) { | |||
| // if (column == 1) { | |||
| // return HomeGoodsItemSingle( | |||
| // goods[index], | |||
| // styleModel, | |||
| // data: widget.data, | |||
| // ); | |||
| // } else { | |||
| // // return Container(color: Colors.red, height: 126,margin: EdgeInsets.all(10),); | |||
| // return Padding( | |||
| // padding: const EdgeInsets.only(left: 5, right: 5), | |||
| // child: Row( | |||
| // children: List.generate(column, (c) { | |||
| // int i = index * column + c; | |||
| // return Expanded( | |||
| // child: i < goods.length | |||
| // ? HomeGoodsItem( | |||
| // goods[i], | |||
| // styleModel, | |||
| // data: widget.data, | |||
| // ) | |||
| // : Container(), | |||
| // ); | |||
| // }).toList(), | |||
| // ), | |||
| // ); | |||
| // } | |||
| // }); | |||
| } | |||
| } | |||
| @@ -330,7 +330,7 @@ class _SearchResultSortWidgetState extends State<SearchResultSortWidget> { | |||
| width: double.infinity, | |||
| child: Text( | |||
| item?.name ?? '', | |||
| style: TextStyle(fontSize: 12, color: HexColor.fromHex(item.isSelect ? widget?.model?.text_select_color ?? '' : widget?.model?.text_no_select_color ?? '')), | |||
| style: TextStyle(fontSize: 14, color: HexColor.fromHex(item.isSelect ? widget?.model?.text_select_color ?? '' : widget?.model?.text_no_select_color ?? '')), | |||
| ), | |||
| ), | |||
| )); | |||
| @@ -0,0 +1,110 @@ | |||
| import 'package:flutter/material.dart'; | |||
| import 'package:zhiying_comm/zhiying_comm.dart'; | |||
| /// | |||
| /// 我的团队 - 数据widget | |||
| /// | |||
| class TeamDataWidget extends StatefulWidget { | |||
| @override | |||
| _TeamDataWidgetState createState() => _TeamDataWidgetState(); | |||
| } | |||
| class _TeamDataWidgetState extends State<TeamDataWidget> { | |||
| @override | |||
| Widget build(BuildContext context) { | |||
| return _getMainWidget(); | |||
| } | |||
| /// 主视图 | |||
| Widget _getMainWidget() { | |||
| return Container( | |||
| margin: const EdgeInsets.only(left: 12.5, right: 12.5, top: 8), | |||
| padding: const EdgeInsets.only(left: 10.5, right: 9.5), | |||
| decoration: BoxDecoration(borderRadius: BorderRadius.circular(10), color: HexColor.fromHex('#FFFFFF')), | |||
| child: Column( | |||
| children: <Widget>[ | |||
| /// 直推人数 & 间推人数 | |||
| Row( | |||
| children: <Widget>[ | |||
| /// 直推人数 | |||
| _getCustomWidget(text: '直推人数', textColor: '#999999', textSize: 12, number: '2258', numberColor: '#333333', numberSize: 30, icon: 'sss'), | |||
| /// 分割线 | |||
| VerticalDivider(width: 40, thickness: 0.5, color: HexColor.fromHex('#F0F0F0')), | |||
| /// 间推人数 | |||
| _getCustomWidget(text: '间推人数', textColor: '#999999', textSize: 12, number: '469', numberColor: '#333333', numberSize: 30, icon: 'sss'), | |||
| ], | |||
| ), | |||
| /// 分割线 | |||
| Divider(thickness: 0.5, height: double.infinity, color: HexColor.fromHex('#F0F0F0')), | |||
| /// 全部粉丝 & 今日新增 & 昨日新增 | |||
| Row( | |||
| children: <Widget>[ | |||
| /// 全部粉丝 | |||
| _getCustomWidget( | |||
| text: '全部粉丝', | |||
| textColor: '#999999', | |||
| textSize: 11, | |||
| number: '2258', | |||
| numberColor: '#333333', | |||
| numberSize: 15, | |||
| ), | |||
| /// 分割线 | |||
| VerticalDivider(thickness: 0.5, width: 35, color: HexColor.fromHex('#F0F0F0')), | |||
| /// 今日新增 | |||
| _getCustomWidget( | |||
| text: '今日新增', | |||
| textColor: '#999999', | |||
| textSize: 11, | |||
| number: '4', | |||
| numberColor: '#333333', | |||
| numberSize: 15, | |||
| ), | |||
| /// 分割线 | |||
| VerticalDivider(thickness: 0.5, width: 35, color: HexColor.fromHex('#F0F0F0')), | |||
| /// 昨日新增 | |||
| _getCustomWidget( | |||
| text: '昨日新增', | |||
| textColor: '#999999', | |||
| textSize: 11, | |||
| number: '12', | |||
| numberColor: '#333333', | |||
| numberSize: 15, | |||
| ), | |||
| ], | |||
| ) | |||
| ], | |||
| ), | |||
| ); | |||
| } | |||
| /// 自定义Widget | |||
| Widget _getCustomWidget({String text, String textColor, double textSize, String number, String numberColor, double numberSize, String icon}) { | |||
| return Column( | |||
| children: <Widget>[ | |||
| /// Number | |||
| Row( | |||
| children: <Widget>[ | |||
| /// nummber\ | |||
| Text(number, | |||
| style: TextStyle(color: HexColor.fromHex(numberColor), fontSize: numberSize, fontWeight: FontWeight.bold, fontFamily: 'Din', package: 'zhiying_base_widget')), | |||
| const SizedBox(width: 3), | |||
| /// icon | |||
| Visibility(visible: !EmptyUtil.isEmpty(icon), child: Container(height: 7, width: 5, color: Colors.red)) | |||
| ], | |||
| ), | |||
| /// Text | |||
| Text(text, style: TextStyle(color: HexColor.fromHex(textColor), fontSize: textSize)) | |||
| ], | |||
| ); | |||
| } | |||
| } | |||
| @@ -0,0 +1,46 @@ | |||
| import 'package:flutter/material.dart'; | |||
| import 'package:zhiying_comm/zhiying_comm.dart'; | |||
| /// | |||
| /// 我的团队 - 粉丝信息 | |||
| /// | |||
| class TeamFansItem extends StatefulWidget { | |||
| @override | |||
| _TeamFansItemState createState() => _TeamFansItemState(); | |||
| } | |||
| class _TeamFansItemState extends State<TeamFansItem> { | |||
| @override | |||
| Widget build(BuildContext context) { | |||
| return Container(); | |||
| } | |||
| /// 主体视图 | |||
| Widget _getMainWidget() { | |||
| return Container( | |||
| decoration: BoxDecoration( | |||
| color: HexColor.fromHex('#FFFFFF'), | |||
| borderRadius: BorderRadius.circular(10) | |||
| ), | |||
| margin: const EdgeInsets.only(left: 12.5, right: 12.5), | |||
| padding: const EdgeInsets.only(left: 20, right: 20, top: 17.5, bottom: 15), | |||
| child: Column( | |||
| children: <Widget>[ | |||
| ], | |||
| ), | |||
| ); | |||
| } | |||
| /// 粉丝头像信息等 | |||
| Widget _getFansInfoWidget() { | |||
| } | |||
| /// 数据信息 | |||
| Widget _getDataWidget() { | |||
| } | |||
| } | |||
| @@ -0,0 +1,204 @@ | |||
| import 'package:flutter/material.dart'; | |||
| import 'package:zhiying_comm/zhiying_comm.dart'; | |||
| /// | |||
| /// 我的团队 - 我的推荐人 | |||
| /// | |||
| class TeamRecommendWidget extends StatefulWidget { | |||
| final Map<String, dynamic> data; | |||
| const TeamRecommendWidget(this.data); | |||
| @override | |||
| _TeamRecommendWidgetState createState() => _TeamRecommendWidgetState(); | |||
| } | |||
| class _TeamRecommendWidgetState extends State<TeamRecommendWidget> { | |||
| @override | |||
| Widget build(BuildContext context) { | |||
| return Container(); | |||
| } | |||
| /// 按钮点击事件 | |||
| void _onClickListener() {} | |||
| /// 主体Widget | |||
| Widget _getMainWidget() { | |||
| return Container( | |||
| decoration: BoxDecoration(borderRadius: BorderRadius.circular(10), color: Colors.white), | |||
| child: Column( | |||
| children: <Widget>[ | |||
| /// 左上角的Icon | |||
| /// 数据视图 | |||
| ], | |||
| ), | |||
| ); | |||
| } | |||
| /// 我的推荐人IconWidget(左上角的ICON) | |||
| Widget _getLeftTopWidget() { | |||
| return Container(width: 73.5, height: 23.5, color: Colors.red); | |||
| } | |||
| /// 输入框 | |||
| Widget _getInputWidget() { | |||
| return Container( | |||
| decoration: BoxDecoration( | |||
| borderRadius: BorderRadius.circular(30), | |||
| color: HexColor.fromHex('#F7F7F7'), | |||
| ), | |||
| child: Column( | |||
| children: <Widget>[ | |||
| /// 输入框 | |||
| Row( | |||
| children: <Widget>[ | |||
| /// 输入框 | |||
| Expanded( | |||
| child: TextField( | |||
| decoration: InputDecoration( | |||
| border: InputBorder.none, | |||
| focusedBorder: InputBorder.none, | |||
| focusedErrorBorder: InputBorder.none, | |||
| errorBorder: InputBorder.none, | |||
| disabledBorder: InputBorder.none, | |||
| enabledBorder: InputBorder.none, | |||
| filled: true, | |||
| fillColor: Colors.transparent), | |||
| ), | |||
| ), | |||
| /// 按钮 | |||
| _getAddButtomWidget(), | |||
| ], | |||
| ), | |||
| const SizedBox(height: 10.5), | |||
| /// 文字提示 | |||
| Text('还没有填写邀请人ID,填写后双方都可以获得奖励', style: TextStyle(color: HexColor.fromHex('#909090'), fontSize: 11)), | |||
| ], | |||
| ), | |||
| ); | |||
| } | |||
| /// 添加的按钮 | |||
| Widget _getAddButtomWidget() { | |||
| return Material( | |||
| child: Container( | |||
| height: 24, | |||
| width: double.infinity, | |||
| color: Colors.white, | |||
| child: RaisedButton( | |||
| child: Text('添加', style: TextStyle(fontSize: 13)), | |||
| textColor: HexColor.fromHex('#FFFFFF'), | |||
| color: HexColor.fromHex('#F94B47'), | |||
| disabledColor: HexColor.fromHex('#F94B47'), | |||
| disabledTextColor: HexColor.fromHex('#FFFFFF'), | |||
| elevation: 5, | |||
| shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(24 / 2)), | |||
| onPressed: () => _onClickListener(), | |||
| ), | |||
| ), | |||
| ); | |||
| } | |||
| /// 数据视图 | |||
| Widget _getDataWidget() { | |||
| return Row( | |||
| children: <Widget>[ | |||
| /// 头像widget | |||
| _getAvatarWidget(), | |||
| const SizedBox(width: 12), | |||
| /// 数据 | |||
| _getDataRightWidget(), | |||
| ], | |||
| ); | |||
| } | |||
| /// 头像widget | |||
| Widget _getAvatarWidget() { | |||
| return Container( | |||
| width: 55, | |||
| height: 55, | |||
| color: Colors.red, | |||
| ); | |||
| } | |||
| /// 数据右边视图,头像右边的widget | |||
| Widget _getDataRightWidget() { | |||
| return Column( | |||
| children: <Widget>[ | |||
| /// 昵称 | |||
| _getNickNameWidget(), | |||
| /// 手机号 | |||
| _getPhoneNumberWidget(), | |||
| /// 微信号 | |||
| _getWXWidget() | |||
| ], | |||
| ); | |||
| } | |||
| /// 昵称 | |||
| Widget _getNickNameWidget() { | |||
| return Row( | |||
| children: <Widget>[ | |||
| /// 昵称 | |||
| Text('毛毛虫', style: TextStyle(fontSize: 14, color: HexColor.fromHex('#000000'), fontWeight: FontWeight.bold)), | |||
| const SizedBox(width: 6), | |||
| Text('邀请码:', style: TextStyle(fontSize: 11, color: HexColor.fromHex('#909090'))), | |||
| Text('123456', style: TextStyle(fontSize: 11, color: HexColor.fromHex('#909090'))), | |||
| ], | |||
| ); | |||
| } | |||
| /// 手机号 | |||
| Widget _getPhoneNumberWidget() { | |||
| return Row( | |||
| children: <Widget>[ | |||
| Text('手机号:', style: TextStyle(fontSize: 11, color: HexColor.fromHex('#AFAFAF'))), | |||
| Text('12354678910', style: TextStyle(fontSize: 11, color: HexColor.fromHex('#AFAFAF'))), | |||
| const SizedBox(width: 6), | |||
| /// 拷贝按钮 | |||
| _getCustomCopyWidget(), | |||
| ], | |||
| ); | |||
| } | |||
| /// 微信号 | |||
| Widget _getWXWidget() { | |||
| return Row( | |||
| children: <Widget>[ | |||
| Text('微信号:', style: TextStyle(fontSize: 11, color: HexColor.fromHex('#AFAFAF'))), | |||
| Text('12354678910', style: TextStyle(fontSize: 11, color: HexColor.fromHex('#AFAFAF'))), | |||
| const SizedBox(width: 6), | |||
| /// 拷贝按钮 | |||
| _getCustomCopyWidget(), | |||
| ], | |||
| ); | |||
| } | |||
| /// 自定义复制按钮的Widget | |||
| Widget _getCustomCopyWidget() { | |||
| return Container( | |||
| padding: const EdgeInsets.only(left: 4, bottom: 2, top: 2, right: 6), | |||
| decoration: BoxDecoration( | |||
| color: HexColor.fromHex('#FFF2F2'), | |||
| borderRadius: BorderRadius.circular(30), | |||
| ), | |||
| child: Row( | |||
| crossAxisAlignment: CrossAxisAlignment.center, | |||
| children: <Widget>[ | |||
| Container(width: 11, height: 11, color: Colors.red), | |||
| const SizedBox(width: 4.5), | |||
| Text('复制', style: TextStyle(fontSize: 8, color: HexColor.fromHex('#F94B47'))) | |||
| ], | |||
| ), | |||
| ); | |||
| } | |||
| } | |||
| @@ -0,0 +1,29 @@ | |||
| import 'package:flutter/material.dart'; | |||
| import 'package:zhiying_comm/zhiying_comm.dart'; | |||
| /// | |||
| /// 我的团队 - 空数据视图 | |||
| /// | |||
| class TeamTempWidget extends StatefulWidget { | |||
| @override | |||
| _TeamTempWidgetState createState() => _TeamTempWidgetState(); | |||
| } | |||
| class _TeamTempWidgetState extends State<TeamTempWidget> { | |||
| @override | |||
| Widget build(BuildContext context) { | |||
| return Container( | |||
| child: Column( | |||
| children: <Widget>[ | |||
| /// 空数据图片 | |||
| Container(width: 108, height: 116.5, color: Colors.red), | |||
| const SizedBox(height: 26), | |||
| /// 文字提示 | |||
| Text('暂时木有好友呀~', style: TextStyle(color: HexColor.fromHex('#999999'), fontSize: 12)) | |||
| ], | |||
| ), | |||
| ); | |||
| } | |||
| } | |||
| @@ -161,7 +161,7 @@ class _WalletDetailState extends State<WalletDetail> | |||
| margin: EdgeInsets.only(right: 8), | |||
| decoration: BoxDecoration( | |||
| image: DecorationImage( | |||
| image: CachedNetworkImageProvider(item.leftBgImg), | |||
| image: CachedNetworkImageProvider(item?.leftBgImg ?? ''), | |||
| fit: BoxFit.fill)), | |||
| child: Center(child: Text("ddd")), | |||
| ), | |||
| @@ -172,7 +172,7 @@ class _WalletDetailState extends State<WalletDetail> | |||
| margin: EdgeInsets.only(left: 8), | |||
| decoration: BoxDecoration( | |||
| image: DecorationImage( | |||
| image: CachedNetworkImageProvider(item.rightBgImg))), | |||
| image: CachedNetworkImageProvider(item?.rightBgImg ?? ''))), | |||
| child: Center(child: Text("dddd")), | |||
| )) | |||
| ], | |||