diff --git a/lib/pages/home_page/home_page.dart b/lib/pages/home_page/home_page.dart index 8c1e258..e9072f9 100644 --- a/lib/pages/home_page/home_page.dart +++ b/lib/pages/home_page/home_page.dart @@ -15,6 +15,7 @@ import 'package:provider/provider.dart'; import 'package:zhiying_base_widget/dialog/global_dialog/advertising_dialog/advertising_dialog.dart'; import 'package:zhiying_base_widget/dialog/global_dialog/intellect_search_goods_dialog/intellect_create.dart'; import 'package:zhiying_base_widget/dialog/global_dialog/notification_setting_dialog/notification_setting_dialog.dart'; +import 'package:zhiying_base_widget/dialog/loading/loading.dart'; import 'package:zhiying_base_widget/dialog/notification_dialog/notification_dialog.dart'; import 'package:zhiying_base_widget/dialog/tip_dialog/tip_dialog.dart'; import 'package:zhiying_base_widget/models/app_config_model.dart'; @@ -139,6 +140,7 @@ class _HomePageState extends State with WidgetsBindingObserver, Ticker MobPushUtil.addPushReceiver(); loginSubscription = EventUtil.instance.on().listen((event) async { setAlias(); + Loading.dismiss(); }); } catch (e, s) { print(e); @@ -373,7 +375,7 @@ class _HomePageState extends State with WidgetsBindingObserver, Ticker ///每打开5次检查一次权限 String showNotiPermissionTime = await SharedPreferencesUtil.getStringValue(Constants.showNotiPermissionTime, defaultVal: "5"); int timer = int.tryParse(showNotiPermissionTime) ?? 0; - if (timer % 5 == 0) { + if (timer % 5 == 0 && Platform.isAndroid) { timer++; SharedPreferencesUtil.setStringValue(Constants.showNotiPermissionTime, timer.toString()); if (!await Permission.storage.isGranted) { @@ -405,6 +407,11 @@ class _HomePageState extends State with WidgetsBindingObserver, Ticker } } + if (Platform.isIOS) { + ///ios不显示弹窗,直接将同意值设置为1 + SharedPreferencesUtil.setStringValue(Constants.notificationAgree, "1"); + } + // 活动弹窗 await AdvertisingDialog.show(context); @@ -499,7 +506,7 @@ class _HomePageState extends State with WidgetsBindingObserver, Ticker ///设置定向推送 void setAlias() async { ///如果没有开启通知则设置别名 - if (await SharedPreferencesUtil.getStringValue(Constants.notificationAgree, defaultVal: "0") == "1") { + if (await SharedPreferencesUtil.getStringValue(Constants.notificationAgree, defaultVal: "0") == "1" || Platform.isIOS) { UserInfoModel userInfo = UserInfoNotifier?.staitcUserInfo; var setting = await NativeUtil.getSetting(); String masterId = setting['master_id']; diff --git a/lib/pages/message_settings_page/message_settings_page.dart b/lib/pages/message_settings_page/message_settings_page.dart index 7f3b235..0d56cff 100644 --- a/lib/pages/message_settings_page/message_settings_page.dart +++ b/lib/pages/message_settings_page/message_settings_page.dart @@ -1,7 +1,13 @@ +import 'dart:async'; +import 'dart:io'; + import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; +import 'package:zhiying_base_widget/dialog/notification_dialog/notification_dialog.dart'; import 'package:zhiying_base_widget/pages/message_settings_page/model/message_settings_data_model.dart'; import 'package:zhiying_base_widget/pages/message_settings_page/model/message_settings_style_model.dart'; +import 'package:zhiying_base_widget/utils/contants.dart'; +import 'package:zhiying_base_widget/utils/mob_push_util.dart'; import 'package:zhiying_comm/zhiying_comm.dart'; import 'bloc/message_settings_bloc.dart'; @@ -32,6 +38,8 @@ class _MessageSettingsPageContainer extends StatefulWidget { } class __MessageSettingsPageContainerState extends State<_MessageSettingsPageContainer> { + bool isOpen = false; + /// 列表点击 void _onClickListItem(Settings model, MessageSettingsDataModel dataModel) { /// 跳转查看隐私协议 @@ -41,8 +49,70 @@ class __MessageSettingsPageContainerState extends State<_MessageSettingsPageCont } /// 隐私开关 - void _switchOnChange(String key, bool value) { - BlocProvider.of(context).add(MessageSettingsUpdateEvent(value: value, key: key)); + void _switchOnChange(bool value) async { + if (value) { + await SharedPreferencesUtil.setStringValue(Constants.notificationAgree, "1"); + if (!await Permission.notification.isGranted) { + bool isGranted = await Permission.notification.isGranted; + if (!isGranted) { + var result = await showDialog( + context: context, + child: NotificationDialog( + isGranted: isGranted, + )); + if (result != null && result) { + SharedPreferencesUtil.setStringValue(Constants.notificationAgree, "1"); + if (!await Permission.notification.isGranted) { + if (Platform.isIOS) { + await openAppSettings().then((value) { + getState(); + }); + } else { + await NativeUtil.openAppSettings(); + } + } + } + } + } + setAlias(); + } else { + await SharedPreferencesUtil.setStringValue(Constants.notificationAgree, "0"); + MobPushUtil.deleteAlias(); + } + getState(); + //BlocProvider.of(context).add(MessageSettingsUpdateEvent(value: value, key: key)); + } + + ///设置定向推送 + void setAlias() async { + ///如果没有开启通知则设置别名 + UserInfoModel userInfo = UserInfoNotifier?.staitcUserInfo; + var setting = await NativeUtil.getSetting(); + String masterId = setting['master_id']; + Logger.log("我的Alias: " + masterId + "_" + userInfo?.userId); + if (!EmptyUtil.isEmpty(userInfo.userId) && !EmptyUtil.isEmpty(masterId)) { + print("设置标签" + masterId + "_" + userInfo.userId); + await MobPushUtil.restartPush(); + await MobPushUtil.setAlias(masterId + "_" + userInfo.userId); + SharedPreferencesUtil.setStringValue(Constants.isSetTag, "1"); + } + } + + Timer timer; + + @override + void initState() { + getState(); + timer = Timer.periodic(Duration(seconds: 1), (timer) { + getState(); + }); + super.initState(); + } + + @override + void dispose() { + timer?.cancel(); + super.dispose(); } @override @@ -139,11 +209,11 @@ class __MessageSettingsPageContainerState extends State<_MessageSettingsPageCont width: 60, height: 15, child: Switch( - value: dataModel.data[element.dataKeys[0]] == '1', + value: isOpen, activeColor: HexColor.fromHex('#FF4B4B'), // trackColor: HexColor.fromHex('#F9F9F9') , onChanged: (bool value) { - _switchOnChange(element.dataKeys[0], value); + _switchOnChange(value); }, ), ), @@ -227,4 +297,11 @@ class __MessageSettingsPageContainerState extends State<_MessageSettingsPageCont elevation: 0, ); } + + void getState() async { + var result = await SharedPreferencesUtil.getStringValue(Constants.notificationAgree, defaultVal: "0"); + var per = await Permission.notification.isGranted; + isOpen = (result == "1" && per) ? true : false; + setState(() {}); + } } diff --git a/lib/utils/mob_push_util.dart b/lib/utils/mob_push_util.dart index c2ddf02..aaed15b 100644 --- a/lib/utils/mob_push_util.dart +++ b/lib/utils/mob_push_util.dart @@ -38,7 +38,18 @@ class MobPushUtil { break; //接受到推送弹出通知事件 case 1: - MobPushNotifyMessage message = new MobPushNotifyMessage.fromJson(result); + try { + MobPushNotifyMessage message = new MobPushNotifyMessage.fromJson(result); + Map map = message.extrasMap; + if(map.containsKey("skip_identifier")){ + //公共跳转 + RouterUtil.route(SkipModel.fromJson(map), map, context); + } + + } catch (e) { + Logger.log(e); + RouterUtil.goBackHomePage(context); + } print("类型1: " + result.toString()); break; //点击弹窗事件 diff --git a/lib/widgets/custom/bottom_pic/bottom_pic.dart b/lib/widgets/custom/bottom_pic/bottom_pic.dart index 21ff32d..471b4bd 100644 --- a/lib/widgets/custom/bottom_pic/bottom_pic.dart +++ b/lib/widgets/custom/bottom_pic/bottom_pic.dart @@ -6,6 +6,7 @@ import 'package:zhiying_comm/zhiying_comm.dart'; import 'bottom_pic_style.dart'; +////自定义页面底部固定图片 class BottomPic extends StatelessWidget { final Map model; diff --git a/lib/widgets/custom/share_content/share_content_widget.dart b/lib/widgets/custom/share_content/share_content_widget.dart index 7c0c9a1..675341c 100644 --- a/lib/widgets/custom/share_content/share_content_widget.dart +++ b/lib/widgets/custom/share_content/share_content_widget.dart @@ -1,5 +1,6 @@ import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; +import 'package:zhiying_base_widget/widgets/base_state/base_state.dart'; import 'package:zhiying_base_widget/widgets/custom/multi_nav/cached_network_image_util.dart'; import 'package:zhiying_base_widget/widgets/custom/share_content/model/custom_share_content_model.dart'; import 'package:zhiying_base_widget/widgets/custom/share_content/share_content_sk.dart'; @@ -16,7 +17,6 @@ import 'package:flutter/cupertino.dart'; /// 分享内容组件 /// class CustomShareContentWidget extends StatelessWidget { - final Map model; const CustomShareContentWidget(this.model, {Key key}) : super(key: key); @@ -35,8 +35,7 @@ class _CustomShareContentContainerWidget extends StatefulWidget { _CustomShareContentContainerWidgetState createState() => _CustomShareContentContainerWidgetState(); } -class _CustomShareContentContainerWidgetState extends State<_CustomShareContentContainerWidget> { - +class _CustomShareContentContainerWidgetState extends BaseWidgetState<_CustomShareContentContainerWidget> { /// 分享方法 void _clickShareButton(val) { showCupertinoModalPopup( @@ -62,6 +61,7 @@ class _CustomShareContentContainerWidgetState extends State<_CustomShareContentC }, builder: (context, state) { Logger.log('商品详情刷新了 builder state = ' + state?.toString()); + /// 数据加载完毕 if (state is CustomShareContentLoadedState) { return _getMainWidget(state?.model); @@ -71,6 +71,7 @@ class _CustomShareContentContainerWidgetState extends State<_CustomShareContentC if (state is CustomShareContentErrorState) { return _errorWidget(); } + /// 骨架图 return _getSkeletonWidget(); }, @@ -80,59 +81,82 @@ class _CustomShareContentContainerWidgetState extends State<_CustomShareContentC /// 主视图 Widget _getMainWidget(CustomShareContentModel model) { return Container( - width: double.infinity, - // height: 98, - margin: EdgeInsets.only(top: ParseUtil.stringParseDouble(model?.topMargin), left: ParseUtil.stringParseDouble(model?.leftRightMargin, defVal: 12.5), right: ParseUtil.stringParseDouble(model?.leftRightMargin, defVal: 12.5)), - decoration: BoxDecoration( - // color: Colors.red, - borderRadius: BorderRadius.only( - bottomLeft: Radius.circular(ParseUtil.stringParseDouble(model?.bottomLeftRadius)), - bottomRight: Radius.circular(ParseUtil.stringParseDouble(model?.bottomRightRadius)), - topLeft: Radius.circular(ParseUtil.stringParseDouble(model?.topLeftRadius)), - topRight: Radius.circular(ParseUtil.stringParseDouble(model?.topRightRadius)), - )), - child: Container( width: double.infinity, - padding: const EdgeInsets.only(left: 12, right: 12, bottom: 14), + // height: 98, + margin: EdgeInsets.only( + top: ParseUtil.stringParseDouble(model?.topMargin), + left: ParseUtil.stringParseDouble(model?.leftRightMargin, defVal: 12.5), + right: ParseUtil.stringParseDouble(model?.leftRightMargin, defVal: 12.5)), decoration: BoxDecoration( - color: HexColor.fromHex(model?.cardBgColor), - border: Border.all(color: HexColor.fromHex(model?.cardBorderColor), width: 1), - borderRadius: BorderRadius.all(Radius.circular(8)) - ), - child: Column( - children: [ - // 标题 - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - crossAxisAlignment: CrossAxisAlignment.center, - children: [ - CachedNetworkImage(imageUrl: model?.scaleImageUrl, width: 36), - CachedNetworkImage(imageUrl: model?.titleImageUrl, width: 90), - SizedBox(width: 36,) - ], - ), - SizedBox(height: 20), - // 文案 - Text(model?.text?? '', style: TextStyle(color: HexColor.fromHex(model?.textColor), fontSize: 15), maxLines: 4, overflow: TextOverflow.ellipsis,), - SizedBox(height: 22), - // 复制按钮 or 分享 按钮 - Visibility( - visible: (model?.isShowShareFriend ?? '0') == '1', - // 仅仅复制按钮 - replacement: GestureDetector( onTap: () => _clickCopyButton(model?.text) ,child: CachedNetworkImage(imageUrl: model?.copyLongImageUrl ?? '', width: double.infinity)), - child: Row( - children: [ - // 复制按钮 - Flexible(flex: 1, child: GestureDetector(onTap: () => _clickCopyButton(model?.text),child: CachedNetworkImage(imageUrl: model?.copyImageUrl, width: double.infinity,))), - SizedBox(width: 20), - // 分享按钮 - Flexible(flex: 1,child: GestureDetector(onTap: ()=> _clickShareButton(model?.text), child: CachedNetworkImage(imageUrl: model?.shareImageUrl, width: double.infinity,))) - ], - )) - ], - ), - ) - ); + // color: Colors.red, + borderRadius: BorderRadius.only( + bottomLeft: Radius.circular(ParseUtil.stringParseDouble(model?.bottomLeftRadius)), + bottomRight: Radius.circular(ParseUtil.stringParseDouble(model?.bottomRightRadius)), + topLeft: Radius.circular(ParseUtil.stringParseDouble(model?.topLeftRadius)), + topRight: Radius.circular(ParseUtil.stringParseDouble(model?.topRightRadius)), + )), + child: Container( + width: double.infinity, + padding: const EdgeInsets.only(left: 12, right: 12, bottom: 14), + decoration: BoxDecoration( + color: HexColor.fromHex(model?.cardBgColor), + border: Border.all(color: HexColor.fromHex(model?.cardBorderColor), width: 1), + borderRadius: BorderRadius.all(Radius.circular(8))), + child: Column( + children: [ + // 标题 + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + CachedNetworkImage(imageUrl: model?.scaleImageUrl, width: 36), + CachedNetworkImage(imageUrl: model?.titleImageUrl, width: 90), + SizedBox( + width: 36, + ) + ], + ), + SizedBox(height: 20), + // 文案 + Text( + model?.text ?? '', + style: TextStyle(color: HexColor.fromHex(model?.textColor), fontSize: 15), + maxLines: 4, + overflow: TextOverflow.ellipsis, + ), + SizedBox(height: 22), + // 复制按钮 or 分享 按钮 + Visibility( + visible: (model?.isShowShareFriend ?? '0') == '1', + // 仅仅复制按钮 + replacement: + GestureDetector(onTap: () => _clickCopyButton(model?.text), child: CachedNetworkImage(imageUrl: model?.copyLongImageUrl ?? '', width: double.infinity)), + child: Row( + children: [ + // 复制按钮 + Flexible( + flex: 1, + child: GestureDetector( + onTap: () => _clickCopyButton(model?.text), + child: CachedNetworkImage( + imageUrl: model?.copyImageUrl, + width: double.infinity, + ))), + SizedBox(width: 20), + // 分享按钮 + Flexible( + flex: 1, + child: GestureDetector( + onTap: () => _clickShareButton(model?.text), + child: CachedNetworkImage( + imageUrl: model?.shareImageUrl, + width: double.infinity, + ))) + ], + )) + ], + ), + )); } /// 骨架图 @@ -145,5 +169,8 @@ class _CustomShareContentContainerWidgetState extends State<_CustomShareContentC return Container(); } + @override + void refreshWidget(String value) { + setState(() {}); + } } - diff --git a/lib/widgets/team/fans_list/team_fans_item.dart b/lib/widgets/team/fans_list/team_fans_item.dart index 1132cd0..553462f 100644 --- a/lib/widgets/team/fans_list/team_fans_item.dart +++ b/lib/widgets/team/fans_list/team_fans_item.dart @@ -3,6 +3,7 @@ import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:zhiying_base_widget/pages/team_page/model/team_style_model.dart'; import 'package:cached_network_image/cached_network_image.dart'; +import 'package:zhiying_base_widget/widgets/base_state/base_state.dart'; import 'package:zhiying_base_widget/widgets/team/fans_list/model/team_fans_list_model.dart'; import 'package:zhiying_comm/zhiying_comm.dart'; import 'package:fluttertoast/fluttertoast.dart'; @@ -21,7 +22,7 @@ class TeamFansItem extends StatefulWidget { _TeamFansItemState createState() => _TeamFansItemState(); } -class _TeamFansItemState extends State { +class _TeamFansItemState extends BaseWidgetState { /// 跳去粉丝详情 void _openFansItemDetailsPage() { // Navigator.push(context, CupertinoPageRoute(builder: (_) => TeamDetailsPage(null))); @@ -30,10 +31,10 @@ class _TeamFansItemState extends State { /// 复制文字 void _copyText(text) { - if(!EmptyUtil.isEmpty(text)) { + if (!EmptyUtil.isEmpty(text)) { Clipboard.setData(ClipboardData(text: text)); Fluttertoast.showToast(msg: '复制成功~'); - }else{ + } else { Fluttertoast.showToast(msg: '内容不能为空'); } } @@ -79,7 +80,7 @@ class _TeamFansItemState extends State { // ), child: CircleAvatar( backgroundImage: CachedNetworkImageProvider( - widget?.dataModel?.avatar ?? '', + widget?.dataModel?.avatar ?? '', ), ), )), @@ -106,7 +107,10 @@ class _TeamFansItemState extends State { alignment: Alignment.center, child: Row( children: [ - CachedNetworkImage(imageUrl: widget?.dataModel?.levelIcon ?? '', width: 11,), + CachedNetworkImage( + imageUrl: widget?.dataModel?.levelIcon ?? '', + width: 11, + ), const SizedBox(width: 2.5), Text( widget?.dataModel?.levelName ?? '黑钻会员', @@ -145,13 +149,10 @@ class _TeamFansItemState extends State { textAlign: TextAlign.center, text: TextSpan(text: '', children: [ /// 手机号码 - TextSpan( - text: widget?.styleModel?.phooneText ?? '手机号:', - style: TextStyle(color: HexColor.fromHex(widget?.styleModel?.phoneColor ?? '#333333'), fontSize: 11)), + TextSpan(text: widget?.styleModel?.phooneText ?? '手机号:', style: TextStyle(color: HexColor.fromHex(widget?.styleModel?.phoneColor ?? '#333333'), fontSize: 11)), TextSpan( text: widget?.dataModel?.blurMobile ?? '', - style: TextStyle( - color: HexColor.fromHex(widget?.styleModel?.phoneColor ?? '#333333'), fontSize: 11, fontFamily: 'Din', package: 'zhiying_comm')), + style: TextStyle(color: HexColor.fromHex(widget?.styleModel?.phoneColor ?? '#333333'), fontSize: 11, fontFamily: 'Din', package: 'zhiying_comm')), /// 复制按钮 WidgetSpan( @@ -234,11 +235,7 @@ class _TeamFansItemState extends State { )), TextSpan( text: widget?.dataModel?.lastLogin ?? '', - style: TextStyle( - color: HexColor.fromHex(widget?.styleModel?.infoBarLastLoginValueColor ?? '#909090'), - fontSize: 11, - fontFamily: 'Din', - package: 'zhiying_comm')), + style: TextStyle(color: HexColor.fromHex(widget?.styleModel?.infoBarLastLoginValueColor ?? '#909090'), fontSize: 11, fontFamily: 'Din', package: 'zhiying_comm')), ]), ) ], @@ -377,4 +374,9 @@ class _TeamFansItemState extends State { ], ); } + + @override + void refreshWidget(String value) { + setState(() {}); + } }