@@ -35,11 +35,11 @@ class FavoritesBloc extends Bloc<FavoritesEvent, FavoritesState> { | |||
/// 初始化 | |||
Stream<FavoritesState> _mapInitEventToState(FavoritesInitEvent event) async* { | |||
var cache = await repository.fetchCachedStyle(); | |||
var cache = await repository.fetchCachedStyle(event?.model); | |||
if (!EmptyUtil.isEmpty(cache)) { | |||
yield FavoritesLoadedState(model: cache); | |||
} | |||
var result = await repository.fetchNetStyle(); | |||
var result = await repository.fetchNetStyle(event?.model); | |||
if (!EmptyUtil.isEmpty(result)) { | |||
yield FavoritesLoadedState(model: result); | |||
} else { | |||
@@ -4,4 +4,8 @@ part of 'favorites_bloc.dart'; | |||
abstract class FavoritesEvent {} | |||
/// 初始化数据 | |||
class FavoritesInitEvent extends FavoritesEvent {} | |||
class FavoritesInitEvent extends FavoritesEvent { | |||
final Map<String, dynamic> model; | |||
FavoritesInitEvent({this.model}); | |||
} |
@@ -6,12 +6,14 @@ import 'package:zhiying_comm/zhiying_comm.dart'; | |||
class FavoritesRepository { | |||
/// 请求网络样式 | |||
Future<FavoritesStyleModel> fetchNetStyle() async { | |||
Future<FavoritesStyleModel> fetchNetStyle(final Map<String, dynamic> data) async { | |||
try { | |||
var result = await NetUtil.post('/api/v1/mod/pub.flutter.my_fav', cache: true, method: NetMethod.GET); | |||
String skip_identifier = | |||
!EmptyUtil.isEmpty(data) && data.containsKey('skip_identifier') && !EmptyUtil.isEmpty(data['skip_identifier']) ? data['skip_identifier'] : 'pub.flutter.my_fav'; | |||
var result = await NetUtil.post('/api/v1/mod/$skip_identifier', cache: true, method: NetMethod.GET); | |||
if (NetUtil.isSuccess(result) && !EmptyUtil.isEmpty(result[GlobalConfig.HTTP_RESPONSE_KEY_DATA])) { | |||
var modListData = result[GlobalConfig.HTTP_RESPONSE_KEY_DATA]['mod_list'][0]['data']; | |||
if(!EmptyUtil.isEmpty(modListData)){ | |||
if (!EmptyUtil.isEmpty(modListData)) { | |||
return FavoritesStyleModel.fromJson(jsonDecode(modListData)); | |||
} | |||
} | |||
@@ -22,12 +24,14 @@ class FavoritesRepository { | |||
} | |||
/// 获取缓存样式 | |||
Future<FavoritesStyleModel> fetchCachedStyle() async { | |||
Future<FavoritesStyleModel> fetchCachedStyle(final Map<String, dynamic> data) async { | |||
try { | |||
var result = await NetUtil.getRequestCachedData('/api/v1/mod/pub.flutter.my_fav'); | |||
if(!EmptyUtil.isEmpty(result)){ | |||
String skip_identifier = | |||
!EmptyUtil.isEmpty(data) && data.containsKey('skip_identifier') && !EmptyUtil.isEmpty(data['skip_identifier']) ? data['skip_identifier'] : 'pub.flutter.my_fav'; | |||
var result = await NetUtil.getRequestCachedData('/api/v1/mod/$skip_identifier'); | |||
if (!EmptyUtil.isEmpty(result)) { | |||
var modListData = result['mod_list'][0]['data']; | |||
if(!EmptyUtil.isEmpty(modListData)){ | |||
if (!EmptyUtil.isEmpty(modListData)) { | |||
return FavoritesStyleModel.fromJson(jsonDecode(modListData)); | |||
} | |||
} | |||
@@ -30,7 +30,7 @@ class FavoritesPage extends StatelessWidget { | |||
ChangeNotifierProvider.value(value: FavoritesPageNotifier()), | |||
], | |||
child: BlocProvider<FavoritesBloc>( | |||
create: (_) => FavoritesBloc(FavoritesRepository())..add(FavoritesInitEvent()), | |||
create: (_) => FavoritesBloc(FavoritesRepository())..add(FavoritesInitEvent(model: data)), | |||
child: _FavoritesPageContainer(), | |||
), | |||
); | |||
@@ -8,9 +8,12 @@ import 'package:zhiying_base_widget/pages/goods_details_page/bloc/goods_details_ | |||
import 'package:zhiying_base_widget/pages/goods_details_page/bloc/goods_details_page_repository.dart'; | |||
import 'package:zhiying_base_widget/pages/goods_details_page/goods_details_page_sk.dart'; | |||
import 'package:zhiying_base_widget/pages/goods_details_page/notifier/goods_details_page_notifier.dart'; | |||
import 'package:zhiying_base_widget/widgets/goods_details/appbar/goods_details_appbar_widget.dart'; | |||
import 'package:zhiying_base_widget/widgets/goods_details/footer/goods_details_footer_widget.dart'; | |||
import 'package:zhiying_comm/zhiying_comm.dart'; | |||
import 'notifier/goods_details_appbar_color_notifier.dart'; | |||
class GoodsDetailsPage extends StatefulWidget { | |||
final Map<String, dynamic> data; | |||
@@ -33,10 +36,10 @@ class _GoodsDetailsPageState extends State<GoodsDetailsPage> { | |||
providers: [ | |||
/// 滑动通知 | |||
ChangeNotifierProvider.value(value: GoodsDetailsPageNotifier()), | |||
ChangeNotifierProvider.value(value: GoodsDetailsAppBarColorNotifier()), | |||
], | |||
child: BlocProvider<GoodsDetailsPageBloc>( | |||
create: (_) => | |||
GoodsDetailsPageBloc(repository: GoodsDetailsPageRepository())..add(GoodsDetailsPageInitEvent(model: widget?.data)), | |||
create: (_) => GoodsDetailsPageBloc(repository: GoodsDetailsPageRepository())..add(GoodsDetailsPageInitEvent(model: widget?.data)), | |||
child: GoodsDetailsContainer(widget?.data), | |||
), | |||
); | |||
@@ -54,9 +57,9 @@ class GoodsDetailsContainer extends StatefulWidget { | |||
class _GoodsDetailsContainerState extends State<GoodsDetailsContainer> { | |||
bool _isEnded = false; | |||
ScrollController _controller = ScrollController(); | |||
RefreshController _refreshController = | |||
RefreshController(initialRefresh: false); | |||
ScrollController _controller; | |||
RefreshController _refreshController; | |||
final int BANNER_HEIGHT = 375 - 40; | |||
void _onLoading() async { | |||
// await Future.delayed(Duration(milliseconds: 1000)); | |||
@@ -71,60 +74,60 @@ class _GoodsDetailsContainerState extends State<GoodsDetailsContainer> { | |||
Navigator.maybePop(context); | |||
} | |||
@override | |||
void dispose() { | |||
_controller.dispose(); | |||
super.dispose(); | |||
} | |||
@override | |||
void initState() { | |||
_refreshController = RefreshController(initialRefresh: false); | |||
_controller = ScrollController(); | |||
_controller.addListener(() { | |||
// print('${_controller.offset} ${_controller.position.maxScrollExtent}'); | |||
if (_controller.offset >= _controller.position.maxScrollExtent && | |||
!_isEnded) { | |||
if (_controller.offset >= _controller.position.maxScrollExtent && !_isEnded) { | |||
// 滑动到底部 | |||
_isEnded = true; | |||
Provider.of<GoodsDetailsPageNotifier>(context, listen: false) | |||
.loadMore(); | |||
} else if (_controller.offset < _controller.position.maxScrollExtent && | |||
_isEnded) { | |||
Provider.of<GoodsDetailsPageNotifier>(context, listen: false).loadMore(); | |||
} else if (_controller.offset < _controller.position.maxScrollExtent && _isEnded) { | |||
_isEnded = false; | |||
Provider.of<GoodsDetailsPageNotifier>(context, listen: false).reset(); | |||
} | |||
if (_controller.offset >= 0 && _controller.offset <= BANNER_HEIGHT) { | |||
double percent = _controller.offset == 0 ? 0.0 : _controller.offset / BANNER_HEIGHT; | |||
Provider.of<GoodsDetailsAppBarColorNotifier>(context, listen: false).setPercent(percent); | |||
} else if (_controller.offset > BANNER_HEIGHT && _controller.offset <= BANNER_HEIGHT + 300) { | |||
Provider.of<GoodsDetailsAppBarColorNotifier>(context, listen: false).setPercent(1); | |||
} | |||
}); | |||
super.initState(); | |||
} | |||
@override | |||
void dispose() { | |||
_controller?.dispose(); | |||
_refreshController?.dispose(); | |||
super.dispose(); | |||
} | |||
@override | |||
Widget build(BuildContext context) { | |||
return MediaQuery.removePadding( | |||
removeTop: true, | |||
context: context, | |||
child: Container( | |||
width: double.infinity, | |||
child: BlocConsumer<GoodsDetailsPageBloc, GoodsDetailsPageState>( | |||
listener: (BuildContext context, GoodsDetailsPageState state) { | |||
if (state is GoodsDetailsPageErrorState) { | |||
print('数据加载出错'); | |||
} | |||
}, | |||
buildWhen: (previous, current) { | |||
/// 数据加载出错不进行build | |||
if (current is GoodsDetailsPageErrorState) { | |||
return false; | |||
} | |||
return true; | |||
}, | |||
builder: (context, state) { | |||
print('GoodsDetailsPage currente state = $state'); | |||
if (state is GoodsDetailsPageLoadedState) { | |||
return _getMainWidget(state?.model); | |||
} | |||
return GoodsDetailsPageSkeleton(); | |||
}, | |||
), | |||
), | |||
return BlocConsumer<GoodsDetailsPageBloc, GoodsDetailsPageState>( | |||
listener: (BuildContext context, GoodsDetailsPageState state) { | |||
if (state is GoodsDetailsPageErrorState) { | |||
print('数据加载出错'); | |||
} | |||
}, | |||
buildWhen: (previous, current) { | |||
/// 数据加载出错不进行build | |||
if (current is GoodsDetailsPageErrorState) { | |||
return false; | |||
} | |||
return true; | |||
}, | |||
builder: (context, state) { | |||
print('GoodsDetailsPage currente state = $state'); | |||
if (state is GoodsDetailsPageLoadedState) { | |||
return _getMainWidget(state?.model); | |||
} | |||
return GoodsDetailsPageSkeleton(); | |||
}, | |||
); | |||
} | |||
@@ -140,27 +143,21 @@ class _GoodsDetailsContainerState extends State<GoodsDetailsContainer> { | |||
controller: _controller, | |||
slivers: _createContent(context, datas ?? []), | |||
), | |||
_getAppBarWidget(), | |||
Align(alignment: Alignment.topCenter, child: GoodsDetailsAppBarWidget()), | |||
], | |||
)), | |||
/// appBar | |||
// Align(alignment: Alignment.topCenter, child: _getAppBarWidget()), | |||
/// 底部 | |||
bottomNavigationBar: GoodsDetailsFooterWidget( | |||
!EmptyUtil.isEmpty(datas) ? datas[datas.length - 1] : null), | |||
bottomNavigationBar: GoodsDetailsFooterWidget(!EmptyUtil.isEmpty(datas) ? datas[datas.length - 1] : null), | |||
); | |||
} | |||
List<Widget> _createContent( | |||
BuildContext context, List<Map<String, dynamic>> datas) { | |||
List<Widget> _createContent(BuildContext context, List<Map<String, dynamic>> datas) { | |||
List<Widget> list = List(); | |||
/// datas.length - 1 为最后一个在底部 | |||
for (int i = 0; i < datas.length - 1; i++) { | |||
WidgetModel item = | |||
WidgetModel.fromJson(Map<String, dynamic>.from(datas[i])); | |||
WidgetModel item = WidgetModel.fromJson(Map<String, dynamic>.from(datas[i])); | |||
print('item.modName ${item.modName}'); | |||
list.addAll(WidgetFactory.create( | |||
@@ -186,21 +183,57 @@ class _GoodsDetailsContainerState extends State<GoodsDetailsContainer> { | |||
Widget _getAppBarWidget() { | |||
return Container( | |||
width: double.infinity, | |||
height: 40, | |||
margin: | |||
EdgeInsets.only(top: MediaQueryData.fromWindow(window).padding.top), | |||
child: AppBar( | |||
backgroundColor: Colors.transparent, | |||
elevation: 0, | |||
leading: IconButton( | |||
icon: Icon( | |||
Icons.arrow_back_ios, | |||
size: 22, | |||
color: HexColor.fromHex('#FFFFFF'), | |||
color: HexColor.fromHex('#FF4242'), | |||
height: MediaQueryData.fromWindow(window).padding.top + 44, | |||
padding: EdgeInsets.only(top: MediaQueryData.fromWindow(window).padding.top), | |||
child: Row( | |||
crossAxisAlignment: CrossAxisAlignment.center, | |||
mainAxisAlignment: MainAxisAlignment.spaceBetween, | |||
children: <Widget>[ | |||
Padding( | |||
padding: const EdgeInsets.only(left: 12.5), | |||
child: SizedBox( | |||
width: 40, | |||
height: 40, | |||
child: IconButton( | |||
icon: Icon( | |||
Icons.arrow_back_ios, | |||
size: 22, | |||
color: HexColor.fromHex('#FFFFFF'), | |||
), | |||
onPressed: () => _openPop(), | |||
), | |||
)), | |||
Text( | |||
'商品详情', | |||
style: TextStyle(color: HexColor.fromHex('#FFFFFF'), fontSize: 15, fontWeight: FontWeight.bold), | |||
), | |||
onPressed: () => _openPop(), | |||
), | |||
Padding( | |||
padding: const EdgeInsets.only(right: 12.5), | |||
child: SizedBox( | |||
width: 40, | |||
height: 40, | |||
child: Container( | |||
height: double.infinity, | |||
width: double.infinity, | |||
color: Colors.transparent, | |||
), | |||
)), | |||
], | |||
), | |||
// child: AppBar( | |||
// backgroundColor: Colors.transparent, | |||
// elevation: 0, | |||
// leading: | |||
// IconButton( | |||
// icon: Icon( | |||
// Icons.arrow_back_ios, | |||
// size: 22, | |||
// color: HexColor.fromHex('#FFFFFF'), | |||
// ), | |||
// onPressed: () => _openPop(), | |||
// ), | |||
// ), | |||
); | |||
} | |||
} |
@@ -0,0 +1,12 @@ | |||
import 'package:flutter/material.dart'; | |||
class GoodsDetailsAppBarColorNotifier with ChangeNotifier { | |||
double percent = 0.0; | |||
void setPercent(double value) { | |||
if (percent != value) { | |||
this.percent = value; | |||
notifyListeners(); | |||
} | |||
} | |||
} |
@@ -9,6 +9,7 @@ import 'package:zhiying_base_widget/pages/main_page/notifier/main_page_bg_notifi | |||
import 'package:zhiying_base_widget/utils/contants.dart'; | |||
import 'package:zhiying_comm/util/base_bloc.dart'; | |||
import 'package:zhiying_comm/zhiying_comm.dart'; | |||
import 'dart:ui'; | |||
import 'hot_ranking_page_bloc.dart'; | |||
@@ -96,7 +97,8 @@ class __HotRankingPageContainerState extends State<_HotRankingPageContainer> { | |||
return Stack( | |||
children: <Widget>[ | |||
Container( | |||
height: 293.h, | |||
height: 146.74 + MediaQueryData.fromWindow(window).padding.top, | |||
width: double.infinity, | |||
child: CachedNetworkImage( | |||
imageUrl: _bloc.backgroundImage ?? "", fit: BoxFit.fill), | |||
), | |||
@@ -60,7 +60,7 @@ class __MessageNoticePageContainerState extends State<_MessageNoticePageContaine | |||
Navigator.push(context, CupertinoPageRoute(builder: (_) => MessageNoticePage({'type': styleModel?.type, 'title': styleModel?.name}))); | |||
} | |||
/// TODO 需要实现 子widget点击事件,公共跳转 | |||
/// 子item点击的公共跳转 | |||
void _onItemClick(SkipModel model){ | |||
RouterUtil.route(model, model.toJson(), context); | |||
} | |||
@@ -593,6 +593,7 @@ class __MessageNoticePageContainerState extends State<_MessageNoticePageContaine | |||
); | |||
} | |||
/// 转账自定义widget | |||
Widget _buildCustomerTradeContentWidget(TransactionNotificationStyle styleModel, List<TransactionBodyItemModel> transactions) { | |||
List<Widget> lists = []; | |||
transactions.forEach((element) { | |||
@@ -68,11 +68,19 @@ class __VipCenterPageContainerState extends State<_VipCenterPageContainer> { | |||
if (state is VipCenterInitErrorState) {} | |||
/// 加载骨架图 | |||
return Container(); | |||
return _buildSkeletonWidget(); | |||
}, | |||
); | |||
} | |||
/// 骨架图 | |||
Widget _buildSkeletonWidget(){ | |||
return Scaffold( | |||
appBar: _buildAppBarWidget(null), | |||
body: Container(), | |||
); | |||
} | |||
/// 主视图 | |||
Widget _buildMainWidget(VipCenterStyleModel styleModel) { | |||
return MediaQuery.removePadding( | |||
@@ -157,7 +157,7 @@ class BaseWidgetRegister { | |||
PageFactory.regist('pub.flutter.privacy_settings', (model) => PrivacySettingsPage(model)); | |||
/// 消息设置 | |||
PageFactory.regist('pub.flutter.message_settings', (model) => MessageSettingsPage(model)); | |||
///钱包明细 | |||
/// 钱包明细 | |||
PageFactory.regist('pub.flutter.my_bil', (model) => BilDetailPage(model)); | |||
} | |||
@@ -0,0 +1,77 @@ | |||
import 'dart:ui'; | |||
import 'package:provider/provider.dart'; | |||
import 'package:flutter/cupertino.dart'; | |||
import 'package:flutter/material.dart'; | |||
import 'package:zhiying_base_widget/pages/goods_details_page/notifier/goods_details_appbar_color_notifier.dart'; | |||
import 'package:zhiying_comm/zhiying_comm.dart'; | |||
class GoodsDetailsAppBarWidget extends StatefulWidget { | |||
@override | |||
_GoodsDetailsAppBarWidgetState createState() => _GoodsDetailsAppBarWidgetState(); | |||
} | |||
class _GoodsDetailsAppBarWidgetState extends State<GoodsDetailsAppBarWidget> { | |||
Color _starColor = Colors.transparent; | |||
Color _endBgColor = HexColor.fromHex('#FF4242'); | |||
Color _endTextColor = HexColor.fromHex('#FFFFFF'); | |||
Color _bgColor = Colors.transparent; | |||
Color _textColor = Colors.transparent; | |||
@override | |||
void didChangeDependencies() { | |||
GoodsDetailsAppBarColorNotifier notifier = Provider.of<GoodsDetailsAppBarColorNotifier>(context); | |||
if (null != notifier) { | |||
_bgColor = Color.lerp(_starColor, _endBgColor, notifier.percent); | |||
_textColor = Color.lerp(_starColor, _endTextColor, notifier.percent); | |||
} | |||
super.didChangeDependencies(); | |||
} | |||
@override | |||
Widget build(BuildContext context) { | |||
// Logger.log('^-^'); | |||
return Container( | |||
width: double.infinity, | |||
color: _bgColor, | |||
height: MediaQueryData.fromWindow(window).padding.top + 44, | |||
padding: EdgeInsets.only(top: MediaQueryData.fromWindow(window).padding.top), | |||
child: Row( | |||
crossAxisAlignment: CrossAxisAlignment.center, | |||
mainAxisAlignment: MainAxisAlignment.spaceBetween, | |||
children: <Widget>[ | |||
Padding( | |||
padding: const EdgeInsets.only(left: 12.5), | |||
child: SizedBox( | |||
width: 40, | |||
height: 40, | |||
child: IconButton( | |||
icon: Icon( | |||
Icons.arrow_back_ios, | |||
size: 22, | |||
color: HexColor.fromHex('#FFFFFF'), | |||
), | |||
onPressed: () => Navigator.maybePop(context), | |||
), | |||
)), | |||
Text( | |||
'商品详情', | |||
style: TextStyle(color: _textColor, fontSize: 15, fontWeight: FontWeight.bold), | |||
), | |||
Padding( | |||
padding: const EdgeInsets.only(right: 12.5), | |||
child: SizedBox( | |||
width: 40, | |||
height: 40, | |||
child: Container( | |||
height: double.infinity, | |||
width: double.infinity, | |||
color: Colors.transparent, | |||
), | |||
)), | |||
], | |||
), | |||
); | |||
} | |||
} |
@@ -1,3 +1,5 @@ | |||
import 'dart:io'; | |||
import 'package:flutter/material.dart'; | |||
import 'package:zhiying_base_widget/widgets/goods_details/coupon/bloc/bloc.dart'; | |||
import 'package:zhiying_base_widget/widgets/goods_details/coupon/bloc/counpon_repository.dart'; | |||
@@ -6,6 +8,10 @@ import 'package:zhiying_base_widget/widgets/goods_details/coupon/model/counpon_m | |||
import 'package:zhiying_comm/zhiying_comm.dart'; | |||
import 'package:flutter_bloc/flutter_bloc.dart'; | |||
import 'package:cached_network_image/cached_network_image.dart'; | |||
import 'package:provider/provider.dart'; | |||
import 'package:flutter_alibc/alibc_model.dart'; | |||
import 'package:flutter_alibc/flutter_alibc.dart'; | |||
import 'package:fluttertoast/fluttertoast.dart'; | |||
/// | |||
/// 优惠券widget | |||
@@ -20,7 +26,10 @@ class CounponWidget extends StatelessWidget { | |||
// return Container(); | |||
return BlocProvider<CounponBloc>( | |||
create: (_) => CounponBloc(repository: CounponRepository()), //..add(CounponInitEvent(model: model)), | |||
child: CounponWidgetContainer(model, key: UniqueKey(),), | |||
child: CounponWidgetContainer( | |||
model, | |||
key: UniqueKey(), | |||
), | |||
); | |||
} | |||
} | |||
@@ -35,14 +44,50 @@ class CounponWidgetContainer extends StatefulWidget { | |||
} | |||
class _CounponWidgetContainerState extends State<CounponWidgetContainer> { | |||
UserInfoModel _user; | |||
@override | |||
void initState() { | |||
BlocProvider.of<CounponBloc>(context).add(CounponInitEvent(model: widget?.model)); | |||
super.initState(); | |||
} | |||
@override | |||
void didChangeDependencies() { | |||
_user = Provider.of<UserInfoNotifier>(context).userInfo; | |||
super.didChangeDependencies(); | |||
} | |||
/// 点击领取 | |||
void _onJump(CounponModel model) {} | |||
void _onJump(CounponModel model) async{ | |||
print(_user?.toString()); | |||
if (_user?.token == null || _user.token == '') { | |||
print('need login...'); | |||
RouterUtil.goLogin(context); | |||
return; | |||
} | |||
if (EmptyUtil.isEmpty(model.buy_url)) { | |||
Fluttertoast.showToast(msg: '购买链接不存在'); | |||
return; | |||
} | |||
if (model.provider== 'taobao') { | |||
bool isAuth = await TaobaoAuth.isAuth(); | |||
if (!isAuth) { | |||
TaobaoAuth.auth(context); | |||
return; | |||
} | |||
TradeResult result; | |||
if (Platform.isAndroid) { | |||
result = await FlutterAlibc.openByUrl(url: model.buy_url, backUrl: "alisdk://"); | |||
} else if (Platform.isIOS) { | |||
result = await FlutterAlibc.openByUrl(url: model.buy_url); | |||
} | |||
Logger.debug('${result.errorCode} ${result.errorMessage} '); | |||
} else { | |||
RouterUtil.openWebview(model.buy_url, context); | |||
} | |||
} | |||
@override | |||
Widget build(BuildContext context) { | |||
@@ -9,21 +9,30 @@ class CounponModel { | |||
String coupon_url; | |||
String price_type; | |||
String price_type_color; | |||
String buy_url; | |||
String provider; | |||
String goood_id; | |||
CounponModel( | |||
{this.bg_img, | |||
this.coupon_endtime, | |||
this.coupon_price, | |||
this.coupon_price_color, | |||
this.coupon_time_color, | |||
this.coupon_title, | |||
this.coupon_title_color, | |||
this.coupon_url, | |||
this.price_type, | |||
this.price_type_color}); | |||
CounponModel({ | |||
this.goood_id, | |||
this.provider, | |||
this.bg_img, | |||
this.coupon_endtime, | |||
this.coupon_price, | |||
this.coupon_price_color, | |||
this.coupon_time_color, | |||
this.coupon_title, | |||
this.coupon_title_color, | |||
this.coupon_url, | |||
this.price_type, | |||
this.price_type_color, | |||
this.buy_url, | |||
}); | |||
factory CounponModel.fromJson(Map<String, dynamic> json) { | |||
return CounponModel( | |||
goood_id: json['goood_id'], | |||
provider: json['provider'], | |||
bg_img: json['bg_img'], | |||
coupon_endtime: json['coupon_endtime'], | |||
coupon_price: json['coupon_price'], | |||
@@ -34,6 +43,7 @@ class CounponModel { | |||
coupon_url: json['coupon_url'], | |||
price_type: json['price_type'], | |||
price_type_color: json['price_type_color'], | |||
buy_url: json['buy_url'], | |||
); | |||
} | |||
@@ -49,6 +59,9 @@ class CounponModel { | |||
data['coupon_url'] = this.coupon_url; | |||
data['price_type'] = this.price_type; | |||
data['price_type_color'] = this.price_type_color; | |||
data['buy_url'] = this.buy_url; | |||
data['provider'] = this.provider; | |||
data['goood_id'] = this.goood_id; | |||
return data; | |||
} | |||
} |
@@ -63,6 +63,12 @@ class _GooddsDetailsFooterContainerState | |||
super.initState(); | |||
} | |||
@override | |||
void didChangeDependencies() { | |||
_user = Provider.of<UserInfoNotifier>(context).userInfo; | |||
super.didChangeDependencies(); | |||
} | |||
/// 打开首页 | |||
void _openHome() { | |||
Navigator.pushAndRemoveUntil( | |||
@@ -159,7 +165,6 @@ class _GooddsDetailsFooterContainerState | |||
@override | |||
Widget build(BuildContext context) { | |||
_user = Provider.of<UserInfoNotifier>(context).userInfo; | |||
return BlocConsumer<GoodsDetailsFooterBloc, GoodsDetailsFooterState>( | |||
listener: (context, state) {}, | |||
buildWhen: (prev, current) { | |||
@@ -20,8 +20,11 @@ class StoreWidget extends StatelessWidget { | |||
@override | |||
Widget build(BuildContext context) { | |||
return BlocProvider<StoreBloc>( | |||
create: (_) => StoreBloc(repository: StoreRepository()),//..add(StoreInitEvent(model: model)), | |||
child: StoreContainer(model, key: UniqueKey(),), | |||
create: (_) => StoreBloc(repository: StoreRepository()), //..add(StoreInitEvent(model: model)), | |||
child: StoreContainer( | |||
model, | |||
key: UniqueKey(), | |||
), | |||
); | |||
} | |||
} | |||
@@ -36,7 +39,6 @@ class StoreContainer extends StatefulWidget { | |||
} | |||
class _StoreContainerState extends State<StoreContainer> { | |||
@override | |||
void initState() { | |||
BlocProvider.of<StoreBloc>(context).add(StoreInitEvent(model: widget?.model)); | |||
@@ -105,7 +107,7 @@ class _StoreContainerState extends State<StoreContainer> { | |||
height: 50, | |||
// color: Colors.red, | |||
child: CachedNetworkImage( | |||
imageUrl: model?.shop_avatar?? '', | |||
imageUrl: model?.shop_avatar ?? '', | |||
fit: BoxFit.fill, | |||
), | |||
); | |||
@@ -120,8 +122,8 @@ class _StoreContainerState extends State<StoreContainer> { | |||
/// 商店名称 | |||
Text(model?.shop_name ?? '品胜京东自营旗舰店', style: TextStyle(color: HexColor.fromHex(model?.shop_name_color ?? '#333333'), fontSize: 13, fontWeight: FontWeight.bold)), | |||
/// 更多 | |||
Text(model?.more ?? '更多店铺优惠 >', style: TextStyle(color: HexColor.fromHex('#FF4242'), fontSize: 11)), | |||
/// 更多 TODO 暂时隐藏,等后台有数据后再打开 | |||
Visibility(visible: false, child: Text(model?.more ?? '更多店铺优惠 >', style: TextStyle(color: HexColor.fromHex('#FF4242'), fontSize: 11))), | |||
], | |||
); | |||
} | |||
@@ -132,10 +134,10 @@ class _StoreContainerState extends State<StoreContainer> { | |||
mainAxisAlignment: MainAxisAlignment.spaceBetween, | |||
children: <Widget>[ | |||
/// 宝贝描述 5.0 | |||
_getCoustomWidet(model?.description ?? '宝贝描述 5.0',model?.description_color ?? '#999999', model?.description_leve_icon ?? ''), | |||
_getCoustomWidet(model?.description ?? '宝贝描述 5.0', model?.description_color ?? '#999999', model?.description_leve_icon ?? ''), | |||
/// 物流服务 5.0 | |||
_getCoustomWidet(model?.logistics ?? '宝贝描述 5.0', model?.logistics_color ?? '#999999', model?.logistics_leve_icon ?? ''), | |||
_getCoustomWidet(model?.logistics ?? '宝贝描述 5.0', model?.logistics_color ?? '#999999', model?.logistics_leve_icon ?? ''), | |||
/// 服务态度 1.0 | |||
_getCoustomWidet(model?.service ?? '宝贝描述 5.0', model?.service_color ?? '#999999', model?.service_leve_icon ?? ''), | |||
@@ -154,7 +156,6 @@ class _StoreContainerState extends State<StoreContainer> { | |||
// color: Colors.red, | |||
child: CachedNetworkImage( | |||
imageUrl: icon ?? '', | |||
), | |||
), | |||
], | |||
@@ -12,31 +12,25 @@ class HotRankingGoods extends StatelessWidget { | |||
HotRankingListModel styleModel; | |||
int index; | |||
HotRankingGoods({Key key, this.good, this.styleModel, this.index}) | |||
: super(key: key); | |||
HotRankingGoods({Key key, this.good, this.styleModel, this.index}) : super(key: key); | |||
@override | |||
Widget build(BuildContext context) { | |||
var indexImage; | |||
if (styleModel.hotRankIconList != null && | |||
styleModel.hotRankIconList.length > 0 && | |||
styleModel.hotRankIconList.length - 1 >= index) { | |||
if (styleModel.hotRankIconList != null && styleModel.hotRankIconList.length > 0 && styleModel.hotRankIconList.length - 1 >= index) { | |||
indexImage = styleModel.hotRankIconList[index]; | |||
} | |||
Providers providers = getProvider(good.provider); | |||
return GestureDetector( | |||
onTap: () { | |||
RouterUtil.route(SkipModel(skipIdentifier: "goods_details"), | |||
good?.toJson(), context); | |||
RouterUtil.route(SkipModel(skipIdentifier: "goods_details"), good?.toJson(), context); | |||
}, | |||
child: Stack( | |||
children: <Widget>[ | |||
Container( | |||
padding: EdgeInsets.all(15.w), | |||
margin: | |||
EdgeInsets.only(top: 8.w, bottom: 8.w, left: 25.w, right: 25.w), | |||
decoration: BoxDecoration( | |||
color: Colors.white, borderRadius: BorderRadius.circular(15.w)), | |||
margin: EdgeInsets.only(top: 8.w, bottom: 8.w, left: 25.w, right: 25.w), | |||
decoration: BoxDecoration(color: Colors.white, borderRadius: BorderRadius.circular(15.w)), | |||
child: Row( | |||
crossAxisAlignment: CrossAxisAlignment.start, | |||
children: <Widget>[ | |||
@@ -50,9 +44,9 @@ class HotRankingGoods extends StatelessWidget { | |||
imageUrl: good?.goodImage ?? '', | |||
), | |||
), | |||
decoration: | |||
BoxDecoration(borderRadius: BorderRadius.circular(6)), | |||
decoration: BoxDecoration(borderRadius: BorderRadius.circular(6)), | |||
), | |||
/// 商品图片右边视图 | |||
Expanded( | |||
child: Container( | |||
@@ -70,16 +64,8 @@ class HotRankingGoods extends StatelessWidget { | |||
WidgetSpan( | |||
alignment: ui.PlaceholderAlignment.middle, | |||
child: Container( | |||
padding: EdgeInsets.only( | |||
left: 4.w, | |||
right: 4.w, | |||
top: 1, | |||
bottom: 1), | |||
decoration: BoxDecoration( | |||
color: HexColor.fromHex( | |||
providers.providerBgColor), | |||
borderRadius: | |||
BorderRadius.circular(2.5)), | |||
padding: EdgeInsets.only(left: 4.w, right: 4.w, top: 1, bottom: 1), | |||
decoration: BoxDecoration(color: HexColor.fromHex(providers.providerBgColor), borderRadius: BorderRadius.circular(2.5)), | |||
child: Text( | |||
good.providerName ?? "", | |||
style: TextStyle( | |||
@@ -93,12 +79,7 @@ class HotRankingGoods extends StatelessWidget { | |||
child: SizedBox( | |||
width: 4.h, | |||
)), | |||
TextSpan( | |||
text: good.goodTitle, | |||
style: TextStyle( | |||
color: HexColor.fromHex( | |||
styleModel.titleColor ?? ""), | |||
fontSize: 30.sp)) | |||
TextSpan(text: good.goodTitle, style: TextStyle(color: HexColor.fromHex(styleModel.titleColor ?? ""), fontSize: 30.sp)) | |||
])), | |||
/// 优惠券 | |||
@@ -107,29 +88,16 @@ class HotRankingGoods extends StatelessWidget { | |||
good.coupon == "" | |||
? Container() | |||
: Container( | |||
margin: EdgeInsets.only( | |||
top: 4, bottom: 4, right: 15.w), | |||
margin: EdgeInsets.only(top: 4, bottom: 4, right: 15.w), | |||
decoration: BoxDecoration( | |||
color: HexColor.fromHex(styleModel | |||
.couponCommission.left.couponBgColor), | |||
image: DecorationImage( | |||
image: CachedNetworkImageProvider( | |||
styleModel.couponCommission.left | |||
.couponBgImg))), | |||
borderRadius: BorderRadius.circular(2.5), | |||
color: HexColor.fromHex(styleModel.couponCommission.left.couponBgColor), | |||
image: DecorationImage(image: CachedNetworkImageProvider(styleModel.couponCommission.left.couponBgImg))), | |||
child: Padding( | |||
padding: const EdgeInsets.only( | |||
left: 8, right: 8, top: 2, bottom: 2), | |||
padding: const EdgeInsets.only(left: 8, right: 8, top: 2, bottom: 2), | |||
child: Text( | |||
(good.coupon ?? "") + | |||
(styleModel.couponCommission.left | |||
.couonText ?? | |||
""), | |||
style: TextStyle( | |||
color: HexColor.fromHex(styleModel | |||
.couponCommission | |||
.left | |||
.couponFontColor), | |||
fontSize: 22.sp), | |||
(good.coupon ?? "") + (styleModel.couponCommission.left.couonText ?? ""), | |||
style: TextStyle(color: HexColor.fromHex(styleModel.couponCommission.left.couponFontColor), fontSize: 22.sp, fontFamily: 'Din', package: 'zhiying_base_widget'), | |||
), | |||
), | |||
), | |||
@@ -138,30 +106,14 @@ class HotRankingGoods extends StatelessWidget { | |||
: Container( | |||
margin: EdgeInsets.only(top: 4, bottom: 4), | |||
decoration: BoxDecoration( | |||
color: HexColor.fromHex(styleModel | |||
.couponCommission | |||
.right | |||
.commissionBgColor ?? | |||
""), | |||
image: DecorationImage( | |||
image: CachedNetworkImageProvider( | |||
styleModel.couponCommission.right | |||
.commissionBgImg ?? | |||
""))), | |||
borderRadius: BorderRadius.circular(2.5), | |||
color: HexColor.fromHex(styleModel.couponCommission.right.commissionBgColor ?? ""), | |||
image: DecorationImage(image: CachedNetworkImageProvider(styleModel.couponCommission.right.commissionBgImg ?? ""))), | |||
child: Padding( | |||
padding: const EdgeInsets.only( | |||
left: 8, right: 8, top: 2, bottom: 2), | |||
padding: const EdgeInsets.only(left: 8, right: 8, top: 2, bottom: 2), | |||
child: Text( | |||
(styleModel.couponCommission.right | |||
.commissionText ?? | |||
"") + | |||
(good.commission ?? ""), | |||
style: TextStyle( | |||
color: HexColor.fromHex(styleModel | |||
.couponCommission | |||
.right | |||
.commissionFontColor), | |||
fontSize: 22.sp), | |||
(styleModel.couponCommission.right.commissionText ?? "") + (good.commission ?? ""), | |||
style: TextStyle(color: HexColor.fromHex(styleModel.couponCommission.right.commissionFontColor), fontSize: 22.sp,fontFamily: 'Din', package: 'zhiying_base_widget'), | |||
), | |||
), | |||
), | |||
@@ -178,18 +130,12 @@ class HotRankingGoods extends StatelessWidget { | |||
padding: EdgeInsets.only(bottom: 6.sp), | |||
child: Text( | |||
"¥", | |||
style: TextStyle( | |||
color: HexColor.fromHex( | |||
styleModel.currentPriceColor ?? ""), | |||
fontSize: 20.sp), | |||
style: TextStyle(color: HexColor.fromHex(styleModel.currentPriceColor ?? ""), fontSize: 20.sp), | |||
), | |||
), | |||
Text( | |||
good.currentPrice ?? "", | |||
style: TextStyle( | |||
color: HexColor.fromHex( | |||
styleModel.currentPriceColor ?? ""), | |||
fontSize: 40.sp), | |||
style: TextStyle(color: HexColor.fromHex(styleModel.currentPriceColor ?? ""), fontSize: 40.sp,fontWeight: FontWeight.bold ,fontFamily: 'Din', package: 'zhiying_base_widget'), | |||
), | |||
SizedBox( | |||
width: 6, | |||
@@ -198,11 +144,7 @@ class HotRankingGoods extends StatelessWidget { | |||
padding: EdgeInsets.only(bottom: 4.sp), | |||
child: Text( | |||
"¥" + good.marketPrice ?? "", | |||
style: TextStyle( | |||
color: HexColor.fromHex( | |||
styleModel.marketPriceColor ?? ""), | |||
fontSize: 22.sp, | |||
decoration: TextDecoration.lineThrough), | |||
style: TextStyle(color: HexColor.fromHex(styleModel.marketPriceColor ?? ""), fontSize: 22.sp, decoration: TextDecoration.lineThrough, fontFamily: 'Din', package: 'zhiying_base_widget'), | |||
), | |||
), | |||
], | |||
@@ -225,14 +167,11 @@ class HotRankingGoods extends StatelessWidget { | |||
padding: EdgeInsets.only( | |||
left: 40.w, | |||
), | |||
margin: | |||
EdgeInsets.only(right: 20, left: 20.w), | |||
color: HexColor.fromHex( | |||
styleModel.hotRank.bgColor ?? ""), | |||
margin: EdgeInsets.only(right: 20, left: 20.w), | |||
color: HexColor.fromHex(styleModel.hotRank.bgColor ?? ""), | |||
child: Text( | |||
"热销" + good.inorderCount + "件", | |||
style: TextStyle( | |||
color: Colors.white, fontSize: 22.sp), | |||
style: TextStyle(color: Colors.white, fontSize: 22.sp, fontFamily: 'Din', package: 'zhiying_base_widget'), | |||
), | |||
)) | |||
], | |||
@@ -241,12 +180,10 @@ class HotRankingGoods extends StatelessWidget { | |||
width: 48.w, | |||
height: 48.w, | |||
child: CachedNetworkImage( | |||
imageUrl: | |||
styleModel?.hotRank?.hotSaleImg ?? "", | |||
imageUrl: styleModel?.hotRank?.hotSaleImg ?? "", | |||
width: 48.w, | |||
height: 48.w, | |||
placeholder: (context, _) => | |||
Container(color: Colors.yellow), | |||
placeholder: (context, _) => Container(color: Colors.yellow), | |||
fit: BoxFit.fill, | |||
), | |||
), | |||
@@ -256,13 +193,8 @@ class HotRankingGoods extends StatelessWidget { | |||
height: 48.h, | |||
width: 127.w, | |||
decoration: BoxDecoration( | |||
image: DecorationImage( | |||
image: CachedNetworkImageProvider( | |||
styleModel.hotRank.buyNowImg ?? | |||
""), | |||
fit: BoxFit.fitWidth), | |||
borderRadius: | |||
BorderRadius.circular(20)), | |||
image: DecorationImage(image: CachedNetworkImageProvider(styleModel.hotRank.buyNowImg ?? ""), fit: BoxFit.fitWidth), | |||
borderRadius: BorderRadius.circular(20)), | |||
margin: EdgeInsets.only(right: 0), | |||
)) | |||
], | |||
@@ -278,9 +210,7 @@ class HotRankingGoods extends StatelessWidget { | |||
Align( | |||
alignment: Alignment.topLeft, | |||
child: Container( | |||
decoration: BoxDecoration( | |||
image: DecorationImage( | |||
image: CachedNetworkImageProvider(indexImage ?? ""))), | |||
decoration: BoxDecoration(image: DecorationImage(image: CachedNetworkImageProvider(indexImage ?? ""))), | |||
margin: EdgeInsets.only(left: 40.w, top: 8.h), | |||
height: 60.w, | |||
width: 60.w, | |||
@@ -2,6 +2,7 @@ import 'dart:async'; | |||
import 'dart:convert'; | |||
import 'package:flutter/material.dart'; | |||
import 'package:tab_indicator_styler/tab_indicator_styler.dart'; | |||
import 'package:zhiying_base_widget/pages/hot_ranking_page/hot_ranking_page_bloc.dart'; | |||
import 'package:zhiying_comm/util/base_bloc.dart'; | |||
import 'package:zhiying_comm/util/extension/color.dart'; | |||
@@ -54,7 +55,9 @@ class _HotRankTableBarState extends State<HotRankTableBar> | |||
return Container( | |||
margin: EdgeInsets.only(bottom: 10), | |||
child: TabBar( | |||
indicatorPadding: EdgeInsets.only(bottom: 0), | |||
// indicatorPadding: EdgeInsets.only(bottom: 0, top: 10), | |||
// indicatorWeight: 3, | |||
indicatorWeight: 6, | |||
indicatorSize: TabBarIndicatorSize.label, | |||
controller: _tabController, | |||
indicatorColor: HexColor.fromHex( | |||
@@ -63,6 +66,15 @@ class _HotRankTableBarState extends State<HotRankTableBar> | |||
_barModel.tabList[_tabController.index].nameNoSelectColor), | |||
labelColor: HexColor.fromHex( | |||
_barModel.tabList[_tabController.index].nameSelectColor), | |||
indicator: MaterialIndicator( | |||
height: 2.5, | |||
horizontalPadding: 8, | |||
bottomRightRadius: 1.25, | |||
bottomLeftRadius: 1.25, | |||
topRightRadius: 1.25, | |||
topLeftRadius: 1.25, | |||
color: HexColor.fromHex(_barModel.tabList[_tabController.index].nameSelectColor), | |||
), | |||
isScrollable: true, | |||
tabs: _buildTabs(), | |||
onTap: (index) { | |||
@@ -1,9 +1,10 @@ | |||
import 'dart:convert'; | |||
import 'package:flutter/material.dart'; | |||
import 'package:zhiying_base_widget/widgets/wallet/wallet_appbar/model/WalletAppbarModel.dart'; | |||
import 'package:zhiying_comm/zhiying_comm.dart'; | |||
import 'model/wallet_appbar_model.dart'; | |||
class WalletAppbar extends StatelessWidget { | |||
final Map<String, dynamic> data; | |||
@@ -2,6 +2,7 @@ import 'dart:convert'; | |||
import 'package:flutter/cupertino.dart'; | |||
import 'package:flutter/material.dart'; | |||
import 'package:tab_indicator_styler/tab_indicator_styler.dart'; | |||
import 'package:zhiying_base_widget/dialog/tip_dialog/tip_dialog.dart'; | |||
import 'package:zhiying_base_widget/pages/withdraw_page/withdraw_page.dart'; | |||
import 'package:zhiying_base_widget/widgets/home/home_quick_entry/cached_network_image_util.dart'; | |||
@@ -25,8 +26,7 @@ class WalletDetail extends StatefulWidget { | |||
_WalletDetailState createState() => _WalletDetailState(); | |||
} | |||
class _WalletDetailState extends State<WalletDetail> | |||
with TickerProviderStateMixin { | |||
class _WalletDetailState extends State<WalletDetail> with TickerProviderStateMixin { | |||
WalletDetailModel _model; | |||
TabController _tabController; | |||
@@ -37,8 +37,7 @@ class _WalletDetailState extends State<WalletDetail> | |||
void initState() { | |||
if (widget.data != null) { | |||
_model = WalletDetailModel.fromJson(json.decode(widget.data['data'])); | |||
_tabController = | |||
TabController(length: _model.providers.length, vsync: this); | |||
_tabController = TabController(length: _model.providers.length, vsync: this); | |||
} | |||
_bloc = new WalletDetailBloc(); | |||
_bloc.loadData(_model.providers[0].type); | |||
@@ -55,23 +54,29 @@ class _WalletDetailState extends State<WalletDetail> | |||
return WalletDetailSkeleton(); | |||
} | |||
return Container( | |||
decoration: BoxDecoration( | |||
color: Colors.white, borderRadius: BorderRadius.circular(8)), | |||
margin: | |||
EdgeInsets.only(left: 12.5, right: 12.5, top: 15.h, bottom: 15.h), | |||
padding: EdgeInsets.only(bottom: 15.h), | |||
decoration: BoxDecoration(color: Colors.white, borderRadius: BorderRadius.circular(8)), | |||
margin: EdgeInsets.only(left: 12.5, right: 12.5, top: 15.h, bottom: 15.h), | |||
padding: const EdgeInsets.only(bottom: 13), | |||
child: Column( | |||
children: <Widget>[ | |||
Container( | |||
padding: EdgeInsets.only(top: 12), | |||
child: TabBar( | |||
indicatorWeight: 3, | |||
indicator: MaterialIndicator( | |||
height: 2, | |||
bottomLeftRadius: 1, | |||
bottomRightRadius: 1, | |||
horizontalPadding: 0, | |||
topLeftRadius: 1, | |||
topRightRadius: 1, | |||
color: HexColor.fromHex(_model.providers[0].selectColor), | |||
), | |||
isScrollable: true, | |||
unselectedLabelColor: | |||
HexColor.fromHex(_model.providers[0].unselectColor), | |||
labelColor: | |||
HexColor.fromHex(_model.providers[0].selectColor), | |||
unselectedLabelColor: HexColor.fromHex(_model.providers[0].unselectColor), | |||
labelColor: HexColor.fromHex(_model.providers[0].selectColor), | |||
controller: _tabController, | |||
indicatorColor: | |||
HexColor.fromHex(_model.providers[0].selectColor), | |||
indicatorColor: HexColor.fromHex(_model.providers[0].selectColor), | |||
indicatorSize: TabBarIndicatorSize.label, | |||
onTap: (index) { | |||
///变更平台 | |||
@@ -83,21 +88,21 @@ class _WalletDetailState extends State<WalletDetail> | |||
///日期选择 | |||
Container( | |||
height: 100.h, | |||
alignment: Alignment.center, | |||
child: ListView.builder( | |||
padding: EdgeInsets.only(top: 16,left: 16.w), | |||
itemCount: _model.dateList.length, | |||
scrollDirection: Axis.horizontal, | |||
itemBuilder: _buildTimeItem), | |||
padding: EdgeInsets.only( left: 16.w), | |||
itemCount: _model.dateList.length, | |||
scrollDirection: Axis.horizontal, | |||
itemBuilder: _buildTimeItem, | |||
), | |||
), | |||
/// 数据 | |||
Container( | |||
height: 126.h, | |||
margin: EdgeInsets.only(top: 16, left: 30.w, right: 30.w), | |||
width: double.infinity, | |||
decoration: BoxDecoration( | |||
image: DecorationImage( | |||
image: CachedNetworkImageProvider( | |||
_model.providerDashbord.finish.bgImg), | |||
fit: BoxFit.fill)), | |||
decoration: BoxDecoration(image: DecorationImage(image: CachedNetworkImageProvider(_model.providerDashbord.finish.bgImg), fit: BoxFit.fill)), | |||
child: Column( | |||
mainAxisAlignment: MainAxisAlignment.center, | |||
children: <Widget>[ | |||
@@ -107,10 +112,7 @@ class _WalletDetailState extends State<WalletDetail> | |||
padding: const EdgeInsets.all(8.0), | |||
child: Text( | |||
_model.providerDashbord.finish.text, | |||
style: TextStyle( | |||
fontSize: 28.sp, | |||
color: HexColor.fromHex(_model | |||
.providerDashbord.finish.textColor)), | |||
style: TextStyle(fontSize: 28.sp, color: HexColor.fromHex(_model.providerDashbord.finish.textColor)), | |||
), | |||
), | |||
Row( | |||
@@ -118,16 +120,13 @@ class _WalletDetailState extends State<WalletDetail> | |||
children: <Widget>[ | |||
Text( | |||
_model.providerDashbord.finish.text ?? "", | |||
style: | |||
TextStyle(color: Colors.black, fontSize: 22.sp), | |||
style: TextStyle(color: Colors.black, fontSize: 22.sp), | |||
), | |||
InkWell( | |||
child: Padding( | |||
padding: const EdgeInsets.all(8.0), | |||
child: CachedNetworkImage( | |||
imageUrl: | |||
_model.providerDashbord.finish.tipIcon ?? | |||
"", | |||
imageUrl: _model.providerDashbord.finish.tipIcon ?? "", | |||
width: 20.h, | |||
height: 20.h, | |||
fit: BoxFit.fill, | |||
@@ -135,14 +134,13 @@ class _WalletDetailState extends State<WalletDetail> | |||
), | |||
onTap: () { | |||
///显示弹窗 | |||
showTipDialog( | |||
null, _model.providerDashbord.finish.tipText); | |||
showTipDialog(null, _model.providerDashbord.finish.tipText); | |||
}) | |||
], | |||
), | |||
Text( | |||
_bloc.selectDateData.finish ?? "", | |||
style: TextStyle(color: Colors.red, fontSize: 40.sp), | |||
style: TextStyle(color: Colors.red, fontSize: 40.sp, fontFamily: 'Din', package: 'zhiying_base_widget', fontWeight: FontWeight.bold), | |||
) | |||
], | |||
), | |||
@@ -154,8 +152,7 @@ class _WalletDetailState extends State<WalletDetail> | |||
shrinkWrap: true, | |||
physics: NeverScrollableScrollPhysics(), | |||
itemBuilder: (context, index) { | |||
return _buildBottomItem( | |||
context, index, _model.providerDashbord); | |||
return _buildBottomItem(context, index, _model.providerDashbord); | |||
}), | |||
) | |||
], | |||
@@ -169,11 +166,9 @@ class _WalletDetailState extends State<WalletDetail> | |||
_buildTabs() { | |||
List<Widget> listWidget = List(); | |||
for (var item in _model.providers) { | |||
listWidget.add(Tab( | |||
child: Text( | |||
item.name, | |||
style: TextStyle(fontSize: 28.sp), | |||
), | |||
listWidget.add(Text( | |||
item.name, | |||
style: TextStyle(fontSize: 14, ), | |||
)); | |||
} | |||
return listWidget; | |||
@@ -185,23 +180,14 @@ class _WalletDetailState extends State<WalletDetail> | |||
child: Container( | |||
margin: EdgeInsets.only(top: 0, left: 8, right: 8), | |||
decoration: BoxDecoration( | |||
image: DecorationImage( | |||
image: CachedNetworkImageProvider( | |||
item.type == _bloc.selectDateData.type | |||
? item.btnImg ?? "" | |||
: item.btnNoColorImg ?? ""), | |||
fit: BoxFit.fitWidth), | |||
image: DecorationImage(image: CachedNetworkImageProvider(item.type == _bloc.selectDateData.type ? item.btnImg ?? "" : item.btnNoColorImg ?? ""), fit: BoxFit.fitWidth), | |||
), | |||
child: Padding( | |||
padding: const EdgeInsets.only(left: 16, right: 16), | |||
child: Center( | |||
child: Text( | |||
item.text, | |||
style: TextStyle( | |||
fontSize: 22.sp, | |||
color: HexColor.fromHex(item.type == _bloc.selectDateData.type | |||
? item.textSelectColor | |||
: item.textUnselectColor)), | |||
style: TextStyle(fontSize: 22.sp, color: HexColor.fromHex(item.type == _bloc.selectDateData.type ? item.textSelectColor : item.textUnselectColor)), | |||
)), | |||
), | |||
), | |||
@@ -218,8 +204,7 @@ class _WalletDetailState extends State<WalletDetail> | |||
} | |||
///底部显示 | |||
Widget _buildBottomItem( | |||
BuildContext context, int index, ProviderDashbord dashbord) { | |||
Widget _buildBottomItem(BuildContext context, int index, ProviderDashbord dashbord) { | |||
SelfBuy item; | |||
if (index == 0) { | |||
item = dashbord.selfBuy; | |||
@@ -241,9 +226,7 @@ class _WalletDetailState extends State<WalletDetail> | |||
? Container() | |||
: Text( | |||
item.title, | |||
style: TextStyle( | |||
color: HexColor.fromHex(item.titleColor), | |||
fontSize: 28.sp), | |||
style: TextStyle(color: HexColor.fromHex(item.titleColor), fontSize: 28.sp), | |||
), | |||
SizedBox( | |||
height: 15.h, | |||
@@ -256,11 +239,7 @@ class _WalletDetailState extends State<WalletDetail> | |||
height: 123.h, | |||
margin: EdgeInsets.only(right: 8, left: 30.w), | |||
padding: EdgeInsets.only(left: 20.w), | |||
decoration: BoxDecoration( | |||
image: DecorationImage( | |||
image: CachedNetworkImageProvider( | |||
item.itemList[0].bgImg ?? ""), | |||
fit: BoxFit.fill)), | |||
decoration: BoxDecoration(image: DecorationImage(image: CachedNetworkImageProvider(item.itemList[0].bgImg ?? ""), fit: BoxFit.fill)), | |||
child: Column( | |||
mainAxisAlignment: MainAxisAlignment.center, | |||
crossAxisAlignment: CrossAxisAlignment.start, | |||
@@ -269,10 +248,7 @@ class _WalletDetailState extends State<WalletDetail> | |||
children: <Widget>[ | |||
Text( | |||
item.itemList[0].text ?? "", | |||
style: TextStyle( | |||
fontSize: 22.sp, | |||
color: HexColor.fromHex( | |||
item.itemList[0].textColor)), | |||
style: TextStyle(fontSize: 22.sp, color: HexColor.fromHex(item.itemList[0].textColor)), | |||
), | |||
InkWell( | |||
child: Padding( | |||
@@ -293,9 +269,11 @@ class _WalletDetailState extends State<WalletDetail> | |||
), | |||
Text(dataMap[item.itemList[0].vauleKey], | |||
style: TextStyle( | |||
fontFamily: 'Din', | |||
package: 'zhiying_base_widget', | |||
fontWeight: FontWeight.bold, | |||
fontSize: 34.sp, | |||
color: | |||
HexColor.fromHex(item.itemList[1].valueColor), | |||
color: HexColor.fromHex(item.itemList[1].valueColor), | |||
)) | |||
], | |||
)), | |||
@@ -305,11 +283,7 @@ class _WalletDetailState extends State<WalletDetail> | |||
height: 123.h, | |||
margin: EdgeInsets.only(left: 8, right: 30.w), | |||
padding: EdgeInsets.only(left: 20.w), | |||
decoration: BoxDecoration( | |||
image: DecorationImage( | |||
image: CachedNetworkImageProvider( | |||
item.itemList[1].bgImg ?? ""), | |||
fit: BoxFit.fill)), | |||
decoration: BoxDecoration(image: DecorationImage(image: CachedNetworkImageProvider(item.itemList[1].bgImg ?? ""), fit: BoxFit.fill)), | |||
child: Column( | |||
mainAxisAlignment: MainAxisAlignment.center, | |||
crossAxisAlignment: CrossAxisAlignment.start, | |||
@@ -318,10 +292,7 @@ class _WalletDetailState extends State<WalletDetail> | |||
children: <Widget>[ | |||
Text( | |||
item.itemList[1].text ?? "", | |||
style: TextStyle( | |||
fontSize: 22.sp, | |||
color: | |||
HexColor.fromHex(item.itemList[1].textColor)), | |||
style: TextStyle(fontSize: 22.sp, color: HexColor.fromHex(item.itemList[1].textColor)), | |||
), | |||
InkWell( | |||
child: Padding( | |||
@@ -343,8 +314,7 @@ class _WalletDetailState extends State<WalletDetail> | |||
Text( | |||
dataMap[item.itemList[1].vauleKey], | |||
style: TextStyle( | |||
fontSize: 34.sp, | |||
color: HexColor.fromHex(item.itemList[1].valueColor)), | |||
fontSize: 34.sp, color: HexColor.fromHex(item.itemList[1].valueColor), fontFamily: 'Din', package: 'zhiying_base_widget', fontWeight: FontWeight.bold), | |||
) | |||
], | |||
), | |||
@@ -4,11 +4,13 @@ import 'package:flutter/material.dart'; | |||
import 'package:flutter/services.dart'; | |||
import 'package:intl/intl.dart'; | |||
import 'package:pull_to_refresh/pull_to_refresh.dart'; | |||
import 'package:tab_indicator_styler/tab_indicator_styler.dart'; | |||
import 'package:zhiying_base_widget/dialog/select_date_ym_dialog/select_date_ym_dialog.dart'; | |||
import 'package:zhiying_base_widget/widgets/wallet/wallet_detail/wallet_detail_bloc.dart'; | |||
import 'package:zhiying_base_widget/widgets/wallet_bil_detail/wallet_bil_detail_widget_bloc.dart'; | |||
import 'package:zhiying_comm/util/base_bloc.dart'; | |||
import 'package:zhiying_comm/util/extension/color.dart'; | |||
import 'package:zhiying_comm/zhiying_comm.dart'; | |||
import 'package:flutter_screenutil/flutter_screenutil.dart'; | |||
import 'model/wallet_style_model.dart'; | |||
@@ -24,8 +26,7 @@ class WalletBilDetail extends StatefulWidget { | |||
_WalletBilDetailState createState() => _WalletBilDetailState(); | |||
} | |||
class _WalletBilDetailState extends State<WalletBilDetail> | |||
with TickerProviderStateMixin, AutomaticKeepAliveClientMixin { | |||
class _WalletBilDetailState extends State<WalletBilDetail> with TickerProviderStateMixin, AutomaticKeepAliveClientMixin { | |||
WalletBilDetailWidgetBloc _bloc; | |||
TabController _tabController; | |||
@@ -34,8 +35,7 @@ class _WalletBilDetailState extends State<WalletBilDetail> | |||
void initState() { | |||
_bloc = WalletBilDetailWidgetBloc(); | |||
_bloc.initStyleData(json.decode(widget.data['data'])); | |||
_tabController = | |||
TabController(length: _bloc.styleData.tabList.length, vsync: this); | |||
_tabController = TabController(length: _bloc.styleData.tabList.length, vsync: this); | |||
_bloc.loadInputData(_bloc.inPutCurrentPage, _bloc.inputShowDate); | |||
_bloc.loadOutputData(_bloc.outPutCurrentPage, _bloc.outputShowDate); | |||
@@ -51,8 +51,7 @@ class _WalletBilDetailState extends State<WalletBilDetail> | |||
children: <Widget>[ | |||
AppBar( | |||
brightness: Brightness.light, | |||
backgroundColor: | |||
HexColor.fromHex(_bloc.styleData.appBarBgColor), | |||
backgroundColor: HexColor.fromHex(_bloc.styleData.appBarBgColor), | |||
centerTitle: true, | |||
leading: IconButton( | |||
icon: Icon( | |||
@@ -65,29 +64,32 @@ class _WalletBilDetailState extends State<WalletBilDetail> | |||
}), | |||
title: Text( | |||
_bloc.styleData.appBarName ?? "", | |||
style: TextStyle( | |||
color: HexColor.fromHex(_bloc.styleData.appBarNameColor)), | |||
style: TextStyle(color: HexColor.fromHex(_bloc.styleData.appBarNameColor), fontWeight: FontWeight.bold, fontSize: 18), | |||
), | |||
), | |||
Container( | |||
color: Colors.white, | |||
child: TabBar( | |||
indicator: MaterialIndicator( | |||
height: 3, | |||
horizontalPadding: 15, | |||
bottomRightRadius: 1.5, | |||
bottomLeftRadius: 1.5, | |||
topRightRadius: 1.5, | |||
topLeftRadius: 1.5, | |||
color: HexColor.fromHex(_bloc.styleData.tabLineColor)), | |||
controller: _tabController, | |||
tabs: _buildTabBarItem(), | |||
indicatorWeight: 3, | |||
labelStyle: TextStyle(fontSize: 30.sp), | |||
indicatorWeight: 9.5, | |||
labelStyle: TextStyle(fontSize: 15, fontWeight: FontWeight.bold), | |||
unselectedLabelStyle: TextStyle(fontSize: 15, fontWeight: FontWeight.bold), | |||
labelColor: HexColor.fromHex(_bloc.styleData.tabSeletedColor), | |||
unselectedLabelColor: | |||
HexColor.fromHex(_bloc.styleData.tabNoSeletedColor), | |||
indicatorColor: | |||
HexColor.fromHex(_bloc.styleData.tabLineColor), | |||
unselectedLabelColor: HexColor.fromHex(_bloc.styleData.tabNoSeletedColor), | |||
indicatorColor: HexColor.fromHex(_bloc.styleData.tabLineColor), | |||
indicatorSize: TabBarIndicatorSize.label, | |||
), | |||
), | |||
Expanded( | |||
child: TabBarView( | |||
controller: _tabController, | |||
children: _buildTabViewPage())) | |||
Expanded(child: TabBarView(controller: _tabController, children: _buildTabViewPage())) | |||
], | |||
), | |||
)); | |||
@@ -97,9 +99,11 @@ class _WalletBilDetailState extends State<WalletBilDetail> | |||
_buildTabBarItem() { | |||
List<Widget> listWidget = List(); | |||
for (var item in _bloc.styleData.tabList) { | |||
listWidget.add(Tab( | |||
text: item.name ?? "", | |||
)); | |||
listWidget.add(Text( | |||
item.name ?? "", | |||
) | |||
// Tab(text: item.name ?? ""), | |||
); | |||
} | |||
return listWidget; | |||
} | |||
@@ -110,7 +114,6 @@ class _WalletBilDetailState extends State<WalletBilDetail> | |||
selectType = _bloc.inputSelectType; | |||
} else { | |||
selectType = _bloc.outputSelectType; | |||
; | |||
} | |||
return Row( | |||
children: <Widget>[ | |||
@@ -122,14 +125,8 @@ class _WalletBilDetailState extends State<WalletBilDetail> | |||
}, | |||
child: Padding( | |||
padding: const EdgeInsets.only(top: 8, bottom: 8), | |||
child: Text( | |||
tabList.type == "input" | |||
? _bloc.inputShowDate | |||
: _bloc.outputShowDate, | |||
style: TextStyle( | |||
fontSize: 28.sp, | |||
color: | |||
HexColor.fromHex(_bloc.styleData.timeSelectColor)))), | |||
child: Text(tabList.type == "input" ? _bloc.inputShowDate : _bloc.outputShowDate, | |||
style: TextStyle(fontSize: 28.sp, color: HexColor.fromHex(_bloc.styleData.timeSelectColor), fontWeight: FontWeight.bold))), | |||
), | |||
Icon( | |||
Icons.arrow_drop_down, | |||
@@ -137,53 +134,43 @@ class _WalletBilDetailState extends State<WalletBilDetail> | |||
), | |||
Expanded( | |||
child: Container( | |||
height: 50, | |||
margin: const EdgeInsets.only(top: 15, bottom: 15, left: 12.5), | |||
height: 25, | |||
child: ListView.builder( | |||
scrollDirection: Axis.horizontal, | |||
shrinkWrap: true, | |||
itemCount: tabViewBtns.length, | |||
itemBuilder: (context, index) { | |||
return InkWell( | |||
onTap: () async { | |||
if (tabList.type == 'input') { | |||
_bloc.inputSelectType = tabViewBtns[index].type; | |||
_bloc.inPutCurrentPage=1; | |||
_bloc.loadInputData( | |||
_bloc.inPutCurrentPage, _bloc.inputShowDate, | |||
type: _bloc.inputSelectType); | |||
} else { | |||
_bloc.outputSelectType = tabViewBtns[index].type; | |||
_bloc.outPutCurrentPage=1; | |||
_bloc.loadOutputData( | |||
_bloc.outPutCurrentPage, _bloc.outputShowDate, | |||
type: _bloc.outputSelectType); | |||
} | |||
_bloc.refresh(); | |||
}, | |||
child: Container( | |||
margin: EdgeInsets.only( | |||
top: 10, left: 8, right: 8, bottom: 10), | |||
decoration: BoxDecoration( | |||
border: Border.all( | |||
color: HexColor.fromHex( | |||
selectType == tabViewBtns[index].type | |||
? _bloc.styleData.btnSelectedColor | |||
: _bloc.styleData.btnNoSelectedColor), | |||
), | |||
borderRadius: BorderRadius.circular(50)), | |||
child: Padding( | |||
padding: EdgeInsets.only(left: 16, right: 16), | |||
child: Center( | |||
child: Text( | |||
tabViewBtns[index].name ?? "", | |||
style: TextStyle( | |||
color: HexColor.fromHex( | |||
selectType == tabViewBtns[index].type | |||
? _bloc.styleData.btnSelectedColor | |||
: _bloc.styleData.btnNoSelectedColor)), | |||
)), | |||
), | |||
)); | |||
return GestureDetector( | |||
onTap: () async { | |||
if (tabList.type == 'input') { | |||
_bloc.inputSelectType = tabViewBtns[index].type; | |||
_bloc.inPutCurrentPage = 1; | |||
_bloc.loadInputData(_bloc.inPutCurrentPage, _bloc.inputShowDate, type: _bloc.inputSelectType); | |||
} else { | |||
_bloc.outputSelectType = tabViewBtns[index].type; | |||
_bloc.outPutCurrentPage = 1; | |||
_bloc.loadOutputData(_bloc.outPutCurrentPage, _bloc.outputShowDate, type: _bloc.outputSelectType); | |||
} | |||
_bloc.refresh(); | |||
}, | |||
behavior: HitTestBehavior.opaque, | |||
child: Container( | |||
alignment: Alignment.center, | |||
margin: EdgeInsets.only(right: 12.5), | |||
padding: EdgeInsets.only(left: 16, right: 16, top: 2.5, bottom: 2.5), | |||
decoration: BoxDecoration( | |||
border: Border.all( | |||
color: HexColor.fromHex(selectType == tabViewBtns[index].type ? _bloc.styleData.btnSelectedColor : _bloc.styleData.btnNoSelectedColor), | |||
), | |||
borderRadius: BorderRadius.circular(50)), | |||
child: Text( | |||
tabViewBtns[index].name ?? "", | |||
style: TextStyle( | |||
fontSize: 11, color: HexColor.fromHex(selectType == tabViewBtns[index].type ? _bloc.styleData.btnSelectedColor : _bloc.styleData.btnNoSelectedColor)), | |||
), | |||
), | |||
); | |||
}), | |||
)) | |||
], | |||
@@ -191,11 +178,9 @@ class _WalletBilDetailState extends State<WalletBilDetail> | |||
} | |||
_selectDate(TabList tabList) async { | |||
var result = await showDialog( | |||
context: context, builder: (context) => SelectDateYMDialog()); | |||
var result = await showDialog(context: context, builder: (context) => SelectDateYMDialog()); | |||
if (result != null) { | |||
var dataTime = DateFormat('yyyy-MM').format( | |||
DateTime(int.parse(result['year']), int.parse(result['month']))); | |||
var dataTime = DateFormat('yyyy-MM').format(DateTime(int.parse(result['year']), int.parse(result['month']))); | |||
if (tabList.type == "input") { | |||
_bloc.inputShowDate = dataTime; | |||
_bloc.loadInputData(_bloc.inPutCurrentPage, _bloc.inputShowDate); | |||
@@ -210,9 +195,7 @@ class _WalletBilDetailState extends State<WalletBilDetail> | |||
_buildBottomItem(TabList tabList) { | |||
return ListView.builder( | |||
shrinkWrap: true, | |||
itemCount: tabList.type == 'input' | |||
? _bloc.inputDataVM.length | |||
: _bloc.outputDataVM.length, | |||
itemCount: tabList.type == 'input' ? _bloc.inputDataVM.length : _bloc.outputDataVM.length, | |||
itemBuilder: (context, index) { | |||
return _buildItem(context, index, tabList); | |||
}); | |||
@@ -224,11 +207,8 @@ class _WalletBilDetailState extends State<WalletBilDetail> | |||
var modelItem = _bloc.inputDataVM[index]; | |||
return Container( | |||
margin: EdgeInsets.only(left: 12.5, right: 12.5, bottom: 4, top: 4), | |||
padding: | |||
EdgeInsets.only(left: 25.w, right: 25.w, top: 20.h, bottom: 20.h), | |||
decoration: BoxDecoration( | |||
color: HexColor.fromHex("#FFFFFF"), | |||
borderRadius: BorderRadius.circular(8)), | |||
padding: EdgeInsets.only(left: 25.w, right: 25.w, top: 20.h, bottom: 20.h), | |||
decoration: BoxDecoration(color: HexColor.fromHex("#FFFFFF"), borderRadius: BorderRadius.circular(8)), | |||
child: Column( | |||
children: <Widget>[ | |||
Row( | |||
@@ -238,21 +218,13 @@ class _WalletBilDetailState extends State<WalletBilDetail> | |||
children: <Widget>[ | |||
Container( | |||
decoration: BoxDecoration( | |||
borderRadius: BorderRadius.circular(4), | |||
color: HexColor.fromHex("#FFFFF3F3"), | |||
border: Border.all( | |||
color: HexColor.fromHex( | |||
inputItemStyle.typeNameColor))), | |||
borderRadius: BorderRadius.circular(4), color: HexColor.fromHex("#FFFFF3F3"), border: Border.all(color: HexColor.fromHex(inputItemStyle.typeNameColor))), | |||
child: Padding( | |||
padding: const EdgeInsets.only( | |||
left: 4, right: 4, top: 2, bottom: 2), | |||
padding: const EdgeInsets.only(left: 4, right: 4, top: 2, bottom: 2), | |||
child: Center( | |||
child: Text( | |||
modelItem['type'] ?? "", | |||
style: TextStyle( | |||
color: HexColor.fromHex( | |||
inputItemStyle.typeNameColor), | |||
fontSize: 20.sp), | |||
style: TextStyle(color: HexColor.fromHex(inputItemStyle.typeNameColor), fontSize: 20.sp), | |||
), | |||
), | |||
), | |||
@@ -272,14 +244,11 @@ class _WalletBilDetailState extends State<WalletBilDetail> | |||
children: <Widget>[ | |||
Text( | |||
"+ ", | |||
style: TextStyle( | |||
color: HexColor.fromHex(inputItemStyle.amountColor)), | |||
style: TextStyle(color: HexColor.fromHex(inputItemStyle.amountColor)), | |||
), | |||
Text( | |||
"¥ " + modelItem['amount'], | |||
style: TextStyle( | |||
color: HexColor.fromHex(inputItemStyle.amountColor), | |||
fontSize: 30.sp), | |||
style: TextStyle(color: HexColor.fromHex(inputItemStyle.amountColor), fontSize: 30.sp, fontFamily: 'Din', package: 'zhiying_base_widget'), | |||
) | |||
], | |||
) | |||
@@ -294,44 +263,33 @@ class _WalletBilDetailState extends State<WalletBilDetail> | |||
children: <Widget>[ | |||
Text( | |||
inputItemStyle.orderIdText, | |||
style: TextStyle( | |||
color: HexColor.fromHex(inputItemStyle.contentColor), | |||
fontSize: 22.sp), | |||
style: TextStyle(color: HexColor.fromHex(inputItemStyle.contentColor), fontSize: 22.sp), | |||
), | |||
SizedBox( | |||
width: 4, | |||
), | |||
Text( | |||
modelItem['order_id'], | |||
style: TextStyle( | |||
color: HexColor.fromHex(inputItemStyle.contentColor), | |||
fontSize: 22.sp), | |||
style: TextStyle(color: HexColor.fromHex(inputItemStyle.contentColor), fontSize: 22.sp), | |||
), | |||
SizedBox( | |||
width: 28.w, | |||
), | |||
GestureDetector( | |||
onTap: () { | |||
Clipboard.setData( | |||
ClipboardData(text: modelItem['order_id'])); | |||
Clipboard.setData(ClipboardData(text: modelItem['order_id'])); | |||
Fluttertoast.showToast(msg: "已复制"); | |||
}, | |||
child: Container( | |||
decoration: BoxDecoration( | |||
borderRadius: BorderRadius.circular(4), | |||
color: HexColor.fromHex(inputItemStyle.copyBtnBgColor), | |||
border: Border.all( | |||
color: | |||
HexColor.fromHex(inputItemStyle.contentColor))), | |||
border: Border.all(color: HexColor.fromHex(inputItemStyle.contentColor))), | |||
child: Padding( | |||
padding: EdgeInsets.only( | |||
left: 16, right: 16, top: 1, bottom: 1), | |||
padding: EdgeInsets.only(left: 16, right: 16, top: 1, bottom: 1), | |||
child: Text( | |||
inputItemStyle.copyBtnText, | |||
style: TextStyle( | |||
color: | |||
HexColor.fromHex(inputItemStyle.contentColor), | |||
fontSize: 22.sp), | |||
style: TextStyle(color: HexColor.fromHex(inputItemStyle.contentColor), fontSize: 22.sp), | |||
), | |||
), | |||
), | |||
@@ -348,18 +306,14 @@ class _WalletBilDetailState extends State<WalletBilDetail> | |||
children: <Widget>[ | |||
Text( | |||
inputItemStyle.orderTypeText, | |||
style: TextStyle( | |||
color: HexColor.fromHex(inputItemStyle.contentColor), | |||
fontSize: 22.sp), | |||
style: TextStyle(color: HexColor.fromHex(inputItemStyle.contentColor), fontSize: 22.sp), | |||
), | |||
SizedBox( | |||
width: 4, | |||
), | |||
Text( | |||
modelItem['order_type'] ?? "", | |||
style: TextStyle( | |||
color: HexColor.fromHex("#FF999999"), | |||
fontSize: 22.sp), | |||
style: TextStyle(color: HexColor.fromHex("#FF999999"), fontSize: 22.sp), | |||
), | |||
], | |||
)), | |||
@@ -368,9 +322,7 @@ class _WalletBilDetailState extends State<WalletBilDetail> | |||
children: <Widget>[ | |||
Text( | |||
inputItemStyle.amountText + " ¥" + modelItem['amount'], | |||
style: TextStyle( | |||
color: HexColor.fromHex(inputItemStyle.contentColor), | |||
fontSize: 22.sp), | |||
style: TextStyle(color: HexColor.fromHex(inputItemStyle.contentColor), fontSize: 22.sp), | |||
), | |||
], | |||
)) | |||
@@ -386,18 +338,14 @@ class _WalletBilDetailState extends State<WalletBilDetail> | |||
children: <Widget>[ | |||
Text( | |||
inputItemStyle.timeText, | |||
style: TextStyle( | |||
color: HexColor.fromHex(inputItemStyle.contentColor), | |||
fontSize: 22.sp), | |||
style: TextStyle(color: HexColor.fromHex(inputItemStyle.contentColor), fontSize: 22.sp), | |||
), | |||
SizedBox( | |||
width: 4, | |||
), | |||
Text( | |||
modelItem['time'] ?? "", | |||
style: TextStyle( | |||
color: HexColor.fromHex("#FF999999"), | |||
fontSize: 22.sp), | |||
style: TextStyle(color: HexColor.fromHex("#FF999999"), fontSize: 22.sp), | |||
), | |||
], | |||
)), | |||
@@ -405,13 +353,8 @@ class _WalletBilDetailState extends State<WalletBilDetail> | |||
child: Row( | |||
children: <Widget>[ | |||
Text( | |||
inputItemStyle.settleTimeText + | |||
" " + | |||
modelItem['settle_time'] ?? | |||
"", | |||
style: TextStyle( | |||
color: HexColor.fromHex(inputItemStyle.contentColor), | |||
fontSize: 22.sp), | |||
inputItemStyle.settleTimeText + " " + modelItem['settle_time'] ?? "", | |||
style: TextStyle(color: HexColor.fromHex(inputItemStyle.contentColor), fontSize: 22.sp), | |||
), | |||
], | |||
)) | |||
@@ -427,11 +370,8 @@ class _WalletBilDetailState extends State<WalletBilDetail> | |||
///消费返回的Item | |||
return Container( | |||
margin: EdgeInsets.only(left: 12.5, right: 12.5, bottom: 4, top: 4), | |||
padding: | |||
EdgeInsets.only(left: 25.w, right: 25.w, top: 20.h, bottom: 20.h), | |||
decoration: BoxDecoration( | |||
color: HexColor.fromHex("#FFFFFF"), | |||
borderRadius: BorderRadius.circular(8)), | |||
padding: EdgeInsets.only(left: 25.w, right: 25.w, top: 20.h, bottom: 20.h), | |||
decoration: BoxDecoration(color: HexColor.fromHex("#FFFFFF"), borderRadius: BorderRadius.circular(8)), | |||
child: Column( | |||
children: <Widget>[ | |||
Row( | |||
@@ -443,19 +383,13 @@ class _WalletBilDetailState extends State<WalletBilDetail> | |||
decoration: BoxDecoration( | |||
borderRadius: BorderRadius.circular(4), | |||
color: HexColor.fromHex("#FFFFF3F3"), | |||
border: Border.all( | |||
color: HexColor.fromHex( | |||
outputItemStyle.typeNameColor))), | |||
border: Border.all(color: HexColor.fromHex(outputItemStyle.typeNameColor))), | |||
child: Padding( | |||
padding: const EdgeInsets.only( | |||
left: 4, right: 4, top: 2, bottom: 2), | |||
padding: const EdgeInsets.only(left: 4, right: 4, top: 2, bottom: 2), | |||
child: Center( | |||
child: Text( | |||
modelItem['type'] ?? "", | |||
style: TextStyle( | |||
color: HexColor.fromHex( | |||
outputItemStyle.typeNameColor), | |||
fontSize: 20.sp), | |||
style: TextStyle(color: HexColor.fromHex(outputItemStyle.typeNameColor), fontSize: 20.sp), | |||
), | |||
), | |||
), | |||
@@ -475,16 +409,11 @@ class _WalletBilDetailState extends State<WalletBilDetail> | |||
children: <Widget>[ | |||
Text( | |||
"- ", | |||
style: TextStyle( | |||
color: | |||
HexColor.fromHex(outputItemStyle.amountColor)), | |||
style: TextStyle(color: HexColor.fromHex(outputItemStyle.amountColor)), | |||
), | |||
Text( | |||
"¥ " + modelItem['amount'], | |||
style: TextStyle( | |||
color: | |||
HexColor.fromHex(outputItemStyle.amountColor), | |||
fontSize: 30.sp), | |||
style: TextStyle(color: HexColor.fromHex(outputItemStyle.amountColor), fontSize: 30.sp), | |||
) | |||
], | |||
) | |||
@@ -499,44 +428,33 @@ class _WalletBilDetailState extends State<WalletBilDetail> | |||
children: <Widget>[ | |||
Text( | |||
outputItemStyle.orderIdText, | |||
style: TextStyle( | |||
color: HexColor.fromHex(outputItemStyle.contentColor), | |||
fontSize: 22.sp), | |||
style: TextStyle(color: HexColor.fromHex(outputItemStyle.contentColor), fontSize: 22.sp), | |||
), | |||
SizedBox( | |||
width: 4, | |||
), | |||
Text( | |||
modelItem['order_id'], | |||
style: TextStyle( | |||
color: HexColor.fromHex(outputItemStyle.contentColor), | |||
fontSize: 22.sp), | |||
style: TextStyle(color: HexColor.fromHex(outputItemStyle.contentColor), fontSize: 22.sp), | |||
), | |||
SizedBox( | |||
width: 28.w, | |||
), | |||
GestureDetector( | |||
onTap: () { | |||
Clipboard.setData( | |||
ClipboardData(text: modelItem['order_id'])); | |||
Clipboard.setData(ClipboardData(text: modelItem['order_id'])); | |||
Fluttertoast.showToast(msg: "已复制"); | |||
}, | |||
child: Container( | |||
decoration: BoxDecoration( | |||
borderRadius: BorderRadius.circular(4), | |||
color: HexColor.fromHex(outputItemStyle.copyBtnBgColor), | |||
border: Border.all( | |||
color: HexColor.fromHex( | |||
outputItemStyle.contentColor))), | |||
border: Border.all(color: HexColor.fromHex(outputItemStyle.contentColor))), | |||
child: Padding( | |||
padding: EdgeInsets.only( | |||
left: 16, right: 16, top: 1, bottom: 1), | |||
padding: EdgeInsets.only(left: 16, right: 16, top: 1, bottom: 1), | |||
child: Text( | |||
outputItemStyle.copyBtnText ?? "", | |||
style: TextStyle( | |||
color: | |||
HexColor.fromHex(outputItemStyle.contentColor), | |||
fontSize: 22.sp), | |||
style: TextStyle(color: HexColor.fromHex(outputItemStyle.contentColor), fontSize: 22.sp), | |||
), | |||
), | |||
), | |||
@@ -553,19 +471,14 @@ class _WalletBilDetailState extends State<WalletBilDetail> | |||
children: <Widget>[ | |||
Text( | |||
outputItemStyle.consumeOrderTypeText, | |||
style: TextStyle( | |||
color: | |||
HexColor.fromHex(outputItemStyle.contentColor), | |||
fontSize: 22.sp), | |||
style: TextStyle(color: HexColor.fromHex(outputItemStyle.contentColor), fontSize: 22.sp), | |||
), | |||
SizedBox( | |||
width: 4, | |||
), | |||
Text( | |||
modelItem['order_type'] ?? "", | |||
style: TextStyle( | |||
color: HexColor.fromHex("#FF999999"), | |||
fontSize: 22.sp), | |||
style: TextStyle(color: HexColor.fromHex("#FF999999"), fontSize: 22.sp), | |||
), | |||
], | |||
)), | |||
@@ -573,13 +486,8 @@ class _WalletBilDetailState extends State<WalletBilDetail> | |||
child: Row( | |||
children: <Widget>[ | |||
Text( | |||
outputItemStyle.consumeAmountText + | |||
" ¥" + | |||
modelItem['amount'], | |||
style: TextStyle( | |||
color: | |||
HexColor.fromHex(outputItemStyle.contentColor), | |||
fontSize: 22.sp), | |||
outputItemStyle.consumeAmountText + " ¥" + modelItem['amount'], | |||
style: TextStyle(color: HexColor.fromHex(outputItemStyle.contentColor), fontSize: 22.sp), | |||
), | |||
], | |||
)) | |||
@@ -595,19 +503,14 @@ class _WalletBilDetailState extends State<WalletBilDetail> | |||
children: <Widget>[ | |||
Text( | |||
outputItemStyle.consumeTimeText, | |||
style: TextStyle( | |||
color: | |||
HexColor.fromHex(outputItemStyle.contentColor), | |||
fontSize: 22.sp), | |||
style: TextStyle(color: HexColor.fromHex(outputItemStyle.contentColor), fontSize: 22.sp), | |||
), | |||
SizedBox( | |||
width: 4, | |||
), | |||
Text( | |||
modelItem['time'] ?? "", | |||
style: TextStyle( | |||
color: HexColor.fromHex("#FF999999"), | |||
fontSize: 22.sp), | |||
style: TextStyle(color: HexColor.fromHex("#FF999999"), fontSize: 22.sp), | |||
), | |||
], | |||
)), | |||
@@ -633,11 +536,8 @@ class _WalletBilDetailState extends State<WalletBilDetail> | |||
} else if (modelItem['type'] == '提现') { | |||
return Container( | |||
margin: EdgeInsets.only(left: 12.5, right: 12.5, bottom: 4, top: 4), | |||
padding: | |||
EdgeInsets.only(left: 25.w, right: 25.w, top: 20.h, bottom: 20.h), | |||
decoration: BoxDecoration( | |||
color: HexColor.fromHex("#FFFFFF"), | |||
borderRadius: BorderRadius.circular(8)), | |||
padding: EdgeInsets.only(left: 25.w, right: 25.w, top: 20.h, bottom: 20.h), | |||
decoration: BoxDecoration(color: HexColor.fromHex("#FFFFFF"), borderRadius: BorderRadius.circular(8)), | |||
child: Column( | |||
children: <Widget>[ | |||
Row( | |||
@@ -649,19 +549,13 @@ class _WalletBilDetailState extends State<WalletBilDetail> | |||
decoration: BoxDecoration( | |||
borderRadius: BorderRadius.circular(4), | |||
color: HexColor.fromHex("#FFFFF3F3"), | |||
border: Border.all( | |||
color: HexColor.fromHex( | |||
outputItemStyle.typeNameColor))), | |||
border: Border.all(color: HexColor.fromHex(outputItemStyle.typeNameColor))), | |||
child: Padding( | |||
padding: const EdgeInsets.only( | |||
left: 4, right: 4, top: 2, bottom: 2), | |||
padding: const EdgeInsets.only(left: 4, right: 4, top: 2, bottom: 2), | |||
child: Center( | |||
child: Text( | |||
modelItem['type'] ?? "", | |||
style: TextStyle( | |||
color: HexColor.fromHex( | |||
outputItemStyle.typeNameColor), | |||
fontSize: 20.sp), | |||
style: TextStyle(color: HexColor.fromHex(outputItemStyle.typeNameColor), fontSize: 20.sp), | |||
), | |||
), | |||
), | |||
@@ -681,16 +575,11 @@ class _WalletBilDetailState extends State<WalletBilDetail> | |||
children: <Widget>[ | |||
Text( | |||
"- ", | |||
style: TextStyle( | |||
color: | |||
HexColor.fromHex(outputItemStyle.amountColor)), | |||
style: TextStyle(color: HexColor.fromHex(outputItemStyle.amountColor)), | |||
), | |||
Text( | |||
"¥ " + modelItem['amount'], | |||
style: TextStyle( | |||
color: | |||
HexColor.fromHex(outputItemStyle.amountColor), | |||
fontSize: 30.sp), | |||
style: TextStyle(color: HexColor.fromHex(outputItemStyle.amountColor), fontSize: 30.sp), | |||
) | |||
], | |||
) | |||
@@ -705,44 +594,33 @@ class _WalletBilDetailState extends State<WalletBilDetail> | |||
children: <Widget>[ | |||
Text( | |||
outputItemStyle.orderIdText, | |||
style: TextStyle( | |||
color: HexColor.fromHex(outputItemStyle.contentColor), | |||
fontSize: 22.sp), | |||
style: TextStyle(color: HexColor.fromHex(outputItemStyle.contentColor), fontSize: 22.sp), | |||
), | |||
SizedBox( | |||
width: 4, | |||
), | |||
Text( | |||
modelItem['order_id'], | |||
style: TextStyle( | |||
color: HexColor.fromHex(outputItemStyle.contentColor), | |||
fontSize: 22.sp), | |||
style: TextStyle(color: HexColor.fromHex(outputItemStyle.contentColor), fontSize: 22.sp), | |||
), | |||
SizedBox( | |||
width: 28.w, | |||
), | |||
GestureDetector( | |||
onTap: () { | |||
Clipboard.setData( | |||
ClipboardData(text: modelItem['order_id'])); | |||
Clipboard.setData(ClipboardData(text: modelItem['order_id'])); | |||
Fluttertoast.showToast(msg: "已复制"); | |||
}, | |||
child: Container( | |||
decoration: BoxDecoration( | |||
borderRadius: BorderRadius.circular(4), | |||
color: HexColor.fromHex(outputItemStyle.copyBtnBgColor), | |||
border: Border.all( | |||
color: HexColor.fromHex( | |||
outputItemStyle.contentColor))), | |||
border: Border.all(color: HexColor.fromHex(outputItemStyle.contentColor))), | |||
child: Padding( | |||
padding: EdgeInsets.only( | |||
left: 16, right: 16, top: 1, bottom: 1), | |||
padding: EdgeInsets.only(left: 16, right: 16, top: 1, bottom: 1), | |||
child: Text( | |||
outputItemStyle.copyBtnText ?? "", | |||
style: TextStyle( | |||
color: | |||
HexColor.fromHex(outputItemStyle.contentColor), | |||
fontSize: 22.sp), | |||
style: TextStyle(color: HexColor.fromHex(outputItemStyle.contentColor), fontSize: 22.sp), | |||
), | |||
), | |||
), | |||
@@ -759,20 +637,14 @@ class _WalletBilDetailState extends State<WalletBilDetail> | |||
children: <Widget>[ | |||
Text( | |||
outputItemStyle.withdrawAccountText, | |||
style: TextStyle( | |||
color: | |||
HexColor.fromHex(outputItemStyle.contentColor), | |||
fontSize: 22.sp), | |||
style: TextStyle(color: HexColor.fromHex(outputItemStyle.contentColor), fontSize: 22.sp), | |||
), | |||
SizedBox( | |||
width: 4, | |||
), | |||
Text( | |||
modelItem['account'] ?? "", | |||
style: TextStyle( | |||
color: | |||
HexColor.fromHex(outputItemStyle.contentColor), | |||
fontSize: 22.sp), | |||
style: TextStyle(color: HexColor.fromHex(outputItemStyle.contentColor), fontSize: 22.sp), | |||
), | |||
], | |||
)), | |||
@@ -780,13 +652,8 @@ class _WalletBilDetailState extends State<WalletBilDetail> | |||
child: Row( | |||
children: <Widget>[ | |||
Text( | |||
outputItemStyle.withdrawAmountText + | |||
" ¥" + | |||
modelItem['amount'], | |||
style: TextStyle( | |||
color: | |||
HexColor.fromHex(outputItemStyle.contentColor), | |||
fontSize: 22.sp), | |||
outputItemStyle.withdrawAmountText + " ¥" + modelItem['amount'], | |||
style: TextStyle(color: HexColor.fromHex(outputItemStyle.contentColor), fontSize: 22.sp), | |||
), | |||
], | |||
)) | |||
@@ -802,19 +669,14 @@ class _WalletBilDetailState extends State<WalletBilDetail> | |||
children: <Widget>[ | |||
Text( | |||
outputItemStyle.withdrawTimeText, | |||
style: TextStyle( | |||
color: | |||
HexColor.fromHex(outputItemStyle.contentColor), | |||
fontSize: 22.sp), | |||
style: TextStyle(color: HexColor.fromHex(outputItemStyle.contentColor), fontSize: 22.sp), | |||
), | |||
SizedBox( | |||
width: 4, | |||
), | |||
Text( | |||
modelItem['time'] ?? "", | |||
style: TextStyle( | |||
color: HexColor.fromHex("#FF999999"), | |||
fontSize: 22.sp), | |||
style: TextStyle(color: HexColor.fromHex("#FF999999"), fontSize: 22.sp), | |||
), | |||
], | |||
)), | |||
@@ -822,14 +684,8 @@ class _WalletBilDetailState extends State<WalletBilDetail> | |||
child: Row( | |||
children: <Widget>[ | |||
Text( | |||
outputItemStyle.withdrawOrderStatusText + | |||
" " + | |||
modelItem['order_status'] ?? | |||
"", | |||
style: TextStyle( | |||
color: | |||
HexColor.fromHex(outputItemStyle.contentColor), | |||
fontSize: 22.sp), | |||
outputItemStyle.withdrawOrderStatusText + " " + modelItem['order_status'] ?? "", | |||
style: TextStyle(color: HexColor.fromHex(outputItemStyle.contentColor), fontSize: 22.sp), | |||
), | |||
], | |||
)) | |||
@@ -853,7 +709,6 @@ class _WalletBilDetailState extends State<WalletBilDetail> | |||
stream: _bloc.inputOutData, | |||
builder: (context, asny) { | |||
// dataVM = asny.data; | |||
return Container( | |||
child: Column( | |||
children: <Widget>[ | |||
@@ -869,9 +724,7 @@ class _WalletBilDetailState extends State<WalletBilDetail> | |||
onRefresh: () { | |||
_bloc.inputRefresh(); | |||
}, | |||
child: _bloc.inputDataVM == null | |||
? Container() | |||
: _buildBottomItem(item)), | |||
child: _bloc.inputDataVM == null ? Container() : _buildBottomItem(item)), | |||
) | |||
], | |||
), | |||
@@ -899,9 +752,7 @@ class _WalletBilDetailState extends State<WalletBilDetail> | |||
onRefresh: () { | |||
_bloc.outputRefresh(); | |||
}, | |||
child: _bloc.outputDataVM == null | |||
? Container() | |||
: _buildBottomItem(item)), | |||
child: _bloc.outputDataVM == null ? Container() : _buildBottomItem(item)), | |||
) | |||
], | |||
), | |||