Browse Source

safety

master
fmk 3 years ago
parent
commit
c86fa03ba1
  1. 4
      ios/Podfile.lock
  2. 13
      lib/community/community_child_page.dart
  3. 130
      lib/community/community_details.dart
  4. 120
      lib/community/community_view/community_dynamic.dart
  5. 1
      lib/home/huixiang_brand_page.dart
  6. 9
      lib/integral_store/integral_store_details_page.dart
  7. 3
      lib/retrofit/min_api.dart
  8. 19
      lib/store/store_order.dart
  9. 10
      lib/store/store_view/store_order_list.dart
  10. 11
      lib/web/web_page.dart
  11. 104
      lib/web/web_view/web_content.dart
  12. 305
      pubspec.lock
  13. 13
      pubspec.yaml

4
ios/Podfile.lock

@ -228,8 +228,8 @@ SPEC CHECKSUMS:
tpns_flutter_plugin: a366649c8ad71f19dfb864d3c994ed0480b69daa tpns_flutter_plugin: a366649c8ad71f19dfb864d3c994ed0480b69daa
url_launcher: 6fef411d543ceb26efce54b05a0a40bfd74cbbef url_launcher: 6fef411d543ceb26efce54b05a0a40bfd74cbbef
video_player: 9cc823b1d9da7e8427ee591e8438bfbcde500e6e video_player: 9cc823b1d9da7e8427ee591e8438bfbcde500e6e
wakelock: bfc7955c418d0db797614075aabbc58a39ab5107 wakelock: d0fc7c864128eac40eba1617cb5264d9c940b46f
webview_flutter: d2b4d6c66968ad042ad94cbb791f5b72b4678a96 webview_flutter: 3603125dfd3bcbc9d8d418c3f80aeecf331c068b
WechatOpenSDK_Fuck: aa8f4b0af902837e887a1d40c62f06c060c1dc98 WechatOpenSDK_Fuck: aa8f4b0af902837e887a1d40c62f06c060c1dc98
ZLPhotoBrowser-objc: c7657d3bc85ae231884e058d0e3638f619164736 ZLPhotoBrowser-objc: c7657d3bc85ae231884e058d0e3638f619164736

13
lib/community/community_child_page.dart

@ -100,9 +100,13 @@ class _CommunityChildPage extends State<CommunityChildPage> {
physics: NeverScrollableScrollPhysics(), physics: NeverScrollableScrollPhysics(),
itemBuilder: (context, position) { itemBuilder: (context, position) {
return InkWell( return InkWell(
child: CommunityDynamic(comments[position],0,exitFull: (){setState(() { child: CommunityDynamic(
comments[position],
});},), 0,
exitFull: () {
setState(() {});
},
),
onTap: () { onTap: () {
Navigator.of(context).pushNamed( Navigator.of(context).pushNamed(
'/router/community_details', '/router/community_details',
@ -114,7 +118,8 @@ class _CommunityChildPage extends State<CommunityChildPage> {
); );
}, },
itemCount: comments.length, itemCount: comments.length,
)); ),
);
}, },
); );
} }

130
lib/community/community_details.dart

@ -15,6 +15,7 @@ import 'package:huixiang/retrofit/retrofit_api.dart';
import 'package:huixiang/utils/font_weight.dart'; import 'package:huixiang/utils/font_weight.dart';
import 'package:huixiang/view_widget/comment_menu.dart'; import 'package:huixiang/view_widget/comment_menu.dart';
import 'package:huixiang/view_widget/login_tips_dialog.dart'; import 'package:huixiang/view_widget/login_tips_dialog.dart';
import 'package:huixiang/view_widget/my_appbar.dart';
import 'package:huixiang/view_widget/tips_dialog.dart'; import 'package:huixiang/view_widget/tips_dialog.dart';
import 'package:huixiang/web/web_view/input_comment.dart'; import 'package:huixiang/web/web_view/input_comment.dart';
import 'package:shared_preferences/shared_preferences.dart'; import 'package:shared_preferences/shared_preferences.dart';
@ -48,7 +49,6 @@ class _CommunityDetails extends State<CommunityDetails>
int commentTotal = 0; int commentTotal = 0;
Article article; Article article;
@override @override
void didChangeMetrics() { void didChangeMetrics() {
WidgetsBinding.instance.addPostFrameCallback((_) { WidgetsBinding.instance.addPostFrameCallback((_) {
@ -56,12 +56,14 @@ class _CommunityDetails extends State<CommunityDetails>
if (MediaQuery.of(context).viewInsets.bottom == 0) { if (MediaQuery.of(context).viewInsets.bottom == 0) {
if (isKeyBoardShow) { if (isKeyBoardShow) {
FocusScope.of(context).requestFocus(FocusNode()); FocusScope.of(context).requestFocus(FocusNode());
if (mounted)
setState(() { setState(() {
hintText = S.current.liuxianinjingcaidepinglunba; hintText = S.current.liuxianinjingcaidepinglunba;
isKeyBoardShow = false; isKeyBoardShow = false;
}); });
} }
} else { } else {
if (mounted)
setState(() { setState(() {
isKeyBoardShow = true; isKeyBoardShow = true;
}); });
@ -83,68 +85,40 @@ class _CommunityDetails extends State<CommunityDetails>
queryDetails() async { queryDetails() async {
SharedPreferences value = await SharedPreferences.getInstance(); SharedPreferences value = await SharedPreferences.getInstance();
if (apiService == null) if (apiService == null)
apiService = apiService = ApiService(
ApiService(Dio(), context: context, token: value.getString("token")); Dio(),
BaseData<Article> baseData = await apiService context: context,
.informationInfo(comunity.id) token: value.getString("token"),
.catchError((onError) {}); );
if (baseData != null && baseData.isSuccess) { BaseData<Article> baseData =
} await apiService.informationInfo(comunity.id).catchError((onError) {});
if (baseData != null && baseData.isSuccess) {}
} }
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Scaffold( return Scaffold(
appBar: MyAppBar(
title: "动态详情",
titleColor: Colors.black,
titleSize: 18.sp,
background: Colors.white,
leading: true,
leadingColor: Colors.black,
),
body: Container( body: Container(
child: Column( child: Column(
children: [ children: [
Expanded( Expanded(
child: NestedScrollView( child: SingleChildScrollView(
headerSliverBuilder: (context, position) { child: Column(
return [ children: [
SliverOverlapAbsorber( CommunityDynamic(
handle: comunity,
NestedScrollView.sliverOverlapAbsorberHandleFor(context), 0,
sliver: SliverAppBar( exitFull: () {
expandedHeight: (height == 0) ? 614 : height, setState(() {});
pinned: true,
backgroundColor: Colors.white,
title: Text(
"动态详情",
style: TextStyle(
color: Colors.black,
fontSize: 18.sp,
fontWeight: MyFontWeight.semi_bold,
),
),
elevation: 0,
leading: GestureDetector(
onTap: () {
Navigator.of(context).pop();
}, },
child: Container(
alignment: Alignment.centerRight,
margin: EdgeInsets.only(left: 10),
padding: EdgeInsets.all(6),
child: Icon(
Icons.arrow_back_ios,
color: Colors.black,
size: 24,
),
),
),
flexibleSpace: FlexibleSpaceBar(
//Colors.white,
background: Container(
padding: EdgeInsets.only(
top: MediaQuery.of(context).padding.top +
kToolbarHeight,
),
color: Colors.white,
child: CommunityDynamic(
comunity,0,exitFull: (){setState(() {
});},
itemCount: 3, itemCount: 3,
isDetails: true, isDetails: true,
heightFun: (height) { heightFun: (height) {
@ -152,20 +126,11 @@ class _CommunityDetails extends State<CommunityDetails>
MediaQuery.of(context).padding.top + MediaQuery.of(context).padding.top +
kToolbarHeight + kToolbarHeight +
24; 24;
setState(() {}); if (mounted) setState(() {});
}, },
), ),
), Container(
collapseMode: CollapseMode.pin,
),
bottom: PreferredSize(
preferredSize: Size(
MediaQuery.of(context).size.width,
46,
),
child: Container(
padding: EdgeInsets.all(16), padding: EdgeInsets.all(16),
margin: EdgeInsets.only(top: 16.h),
color: Colors.white, color: Colors.white,
child: Row( child: Row(
children: [ children: [
@ -192,20 +157,8 @@ class _CommunityDetails extends State<CommunityDetails>
], ],
), ),
), ),
),
),
),
];
},
body: Container(
height: MediaQuery.of(context).size.height -
MediaQuery.of(context).padding.top +
kToolbarHeight - 68,
margin: EdgeInsets.only(top: 50 + kToolbarHeight),
child: Column(
children: [
if (memberList != null && memberList.length > 0) if (memberList != null && memberList.length > 0)
Expanded(child: ListView.builder( ListView.builder(
shrinkWrap: true, shrinkWrap: true,
physics: NeverScrollableScrollPhysics(), physics: NeverScrollableScrollPhysics(),
itemCount: memberList != null ? memberList.length : 0, itemCount: memberList != null ? memberList.length : 0,
@ -215,18 +168,20 @@ class _CommunityDetails extends State<CommunityDetails>
color: Colors.white, color: Colors.white,
child: InkWell( child: InkWell(
onTap: () { onTap: () {
showPressMenu(memberList[position].createUser, showPressMenu(
memberList[position]); memberList[position].createUser,
memberList[position],
);
}, },
child: CommunityComment( child: CommunityComment(
memberList[position], memberList[position],
_queryCommentLike, _queryCommentLike,
(memberList.length-1 == position)?1:0 (memberList.length - 1 == position) ? 1 : 0,
), ),
), ),
); );
}, },
)), ),
if (memberList == null || memberList.length == 0) if (memberList == null || memberList.length == 0)
Container( Container(
width: double.infinity, width: double.infinity,
@ -245,7 +200,6 @@ class _CommunityDetails extends State<CommunityDetails>
], ],
), ),
), ),
),
flex: 1, flex: 1,
), ),
@ -262,7 +216,9 @@ class _CommunityDetails extends State<CommunityDetails>
isLike: comunity.selfLike, isLike: comunity.selfLike,
), ),
], ],
))); ),
),
);
} }
//// ////
@ -273,7 +229,8 @@ class _CommunityDetails extends State<CommunityDetails>
setState(() { setState(() {
if (comunity.selfLike ?? false) if (comunity.selfLike ?? false)
comunity.likes -= 1; comunity.likes -= 1;
else comunity.likes += 1; else
comunity.likes += 1;
comunity.selfLike = !comunity.selfLike ?? false; comunity.selfLike = !comunity.selfLike ?? false;
}); });
} else { } else {
@ -307,7 +264,8 @@ class _CommunityDetails extends State<CommunityDetails>
scrollController.offset - scrollController.offset -
(kToolbarHeight + MediaQuery.of(context).padding.top), (kToolbarHeight + MediaQuery.of(context).padding.top),
duration: Duration(milliseconds: 300), duration: Duration(milliseconds: 300),
curve: Curves.easeIn); curve: Curves.easeIn,
);
} }
final GlobalKey inputKey = GlobalKey(); final GlobalKey inputKey = GlobalKey();
@ -415,7 +373,7 @@ class _CommunityDetails extends State<CommunityDetails>
commentTotal = baseData.data.size; commentTotal = baseData.data.size;
memberList = baseData.data.list; memberList = baseData.data.list;
contentHeight(); contentHeight();
setState(() {}); if (mounted) setState(() {});
} }
} }
} }

120
lib/community/community_view/community_dynamic.dart

@ -1,3 +1,5 @@
import 'dart:ui';
import 'package:chewie/chewie.dart'; import 'package:chewie/chewie.dart';
import 'package:dio/dio.dart'; import 'package:dio/dio.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
@ -33,7 +35,7 @@ class CommunityDynamic extends StatefulWidget {
this.heightFun, this.heightFun,
this.isDetails = false, this.isDetails = false,
this.removalDynamic, this.removalDynamic,
this.exitFull this.exitFull,
}) : super(key: key); }) : super(key: key);
@override @override
@ -47,14 +49,51 @@ class _CommunityDynamic extends State<CommunityDynamic> {
double height = 0; double height = 0;
ApiService apiService; ApiService apiService;
VideoPlayerController videoPlayerController;
ChewieController chewieAudioController;
Chewie chewies;
@override @override
void initState() { void initState() {
super.initState(); super.initState();
SharedPreferences.getInstance().then((value) => { SharedPreferences.getInstance().then(
apiService = ApiService(Dio(), (value) => {
context: context, token: value.getString('token')), apiService = ApiService(
Dio(),
context: context,
token: value.getString('token'),
),
},
);
if (widget.comment.subjectInfo.type == "video" &&
widget.comment.subjectInfo.video.isNotEmpty) {
videoPlayerController = VideoPlayerController.network(
widget.comment.subjectInfo.video,
)..initialize().then((value) {
chewieAudioController = ChewieController(
videoPlayerController: videoPlayerController,
aspectRatio: videoPlayerController.value.aspectRatio,
//
autoPlay: false,
//
looping: false,
//
allowFullScreen: true,
//
materialProgressColors: chewie.ChewieProgressColors(
playedColor: Colors.white,
handleColor: Colors.white,
backgroundColor: Colors.grey,
bufferedColor: Colors.transparent,
),
autoInitialize: true,
);
chewieAudioController.addListener(_fullScreenListener);
if (mounted) setState(() {});
}); });
} }
}
//// ////
_vipFollow(followId) async { _vipFollow(followId) async {
@ -71,7 +110,6 @@ class _CommunityDynamic extends State<CommunityDynamic> {
BaseData baseData = await apiService.deleteTrend(id); BaseData baseData = await apiService.deleteTrend(id);
if (baseData != null && baseData.isSuccess) { if (baseData != null && baseData.isSuccess) {
SmartDialog.showToast("删除成功", alignment: Alignment.center); SmartDialog.showToast("删除成功", alignment: Alignment.center);
} else { } else {
SmartDialog.showToast(baseData.msg, alignment: Alignment.center); SmartDialog.showToast(baseData.msg, alignment: Alignment.center);
} }
@ -244,7 +282,7 @@ class _CommunityDynamic extends State<CommunityDynamic> {
Container( Container(
height: 16, height: 16,
color: Color(0xFFF7F7F7), color: Color(0xFFF7F7F7),
) ),
], ],
); );
} }
@ -262,7 +300,7 @@ class _CommunityDynamic extends State<CommunityDynamic> {
subjectInfo.images[0], subjectInfo.images[0],
fit: BoxFit.cover, fit: BoxFit.cover,
width: MediaQuery.of(context).size.width / 2, width: MediaQuery.of(context).size.width / 2,
height: MediaQuery.of(context).size.width /1, height: MediaQuery.of(context).size.width / 2,
errorSrc: "assets/image/default_2_1.png", errorSrc: "assets/image/default_2_1.png",
fadeSrc: "assets/image/default_2_1.png", fadeSrc: "assets/image/default_2_1.png",
), ),
@ -295,11 +333,13 @@ class _CommunityDynamic extends State<CommunityDynamic> {
itemCount: subjectInfo.images.length, itemCount: subjectInfo.images.length,
); );
} }
} else if (subjectInfo.type == "video" && } else if (subjectInfo.type == "video" && subjectInfo.video.isNotEmpty) {
subjectInfo.video.isNotEmpty) {
widget = videoWidget( widget = videoWidget(
MediaQuery.of(context).size.width - 32, MediaQuery.of(context).size.width - 32,
MediaQuery.of(context).size.width /2, videoPlayerController != null
? (MediaQuery.of(context).size.width - 32) /
videoPlayerController.value.aspectRatio
: MediaQuery.of(context).size.width / 2,
subjectInfo.video); subjectInfo.video);
} }
@ -316,58 +356,44 @@ class _CommunityDynamic extends State<CommunityDynamic> {
); );
} }
VideoPlayerController videoPlayerController; @override
ChewieController chewieAudioController; void dispose() {
Chewie chewies; super.dispose();
Widget videoWidget(double width, double height, src) { if (chewieAudioController != null) {
print("src : $src"); chewieAudioController.pause();
chewieAudioController = ChewieController( chewieAudioController.dispose();
videoPlayerController: videoPlayerController = chewieAudioController = null;
VideoPlayerController.network( }
src,
),
aspectRatio: width / height,
//
autoPlay: false,
//
looping: false,
//
allowFullScreen: true,
// systemOverlaysAfterFullScreen: [],
// systemOverlaysOnEnterFullScreen: [],
// deviceOrientationsAfterFullScreen: [],
// deviceOrientationsOnEnterFullScreen: [],
//
materialProgressColors: chewie.ChewieProgressColors(
playedColor: Colors.white,
handleColor: Colors.white,
backgroundColor: Colors.grey,
bufferedColor: Colors.transparent,
),
autoInitialize: true,
);
chewieAudioController.addListener(_fullScreenListener); if (videoPlayerController != null) {
videoPlayerController.pause();
videoPlayerController.dispose();
}
}
Widget videoWidget(double width, double height, src) {
print("src : $src");
return MediaQuery( return MediaQuery(
data: MediaQuery.of(context).copyWith( data: MediaQuery.of(context).copyWith(
textScaleFactor: 0.9, textScaleFactor: 0.9,
), ),
child: Container( child: chewieAudioController != null
width: MediaQuery.of(context).size.width - 17, ? Container(
height: (MediaQuery.of(context).size.width) / (width / height), width: width,
height: height,
child: chewies = Chewie( child: chewies = Chewie(
controller: chewieAudioController, controller: chewieAudioController,
), ),
)
: Container(
width: width,
height: height,
), ),
); );
} }
Future<void> _fullScreenListener() async { Future<void> _fullScreenListener() async {
print("object: isPlaying: ${videoPlayerController.value.isPlaying}");
print("object: isFullScreen: ${chewieAudioController.isFullScreen}");
if (!chewieAudioController.isFullScreen) { if (!chewieAudioController.isFullScreen) {
Future.delayed(Duration(seconds: 1), () { Future.delayed(Duration(seconds: 1), () {
widget.exitFull(); widget.exitFull();

1
lib/home/huixiang_brand_page.dart

@ -182,7 +182,6 @@ class _BrandPage extends State<BrandPage>
child: Html( child: Html(
data: value.content, data: value.content,
customImageRenders: { customImageRenders: {
base64DataUriMatcher(): base64ImageRender(),
assetUriMatcher(): assetImageRender(), assetUriMatcher(): assetImageRender(),
networkSourceMatcher(extension: "svg"): svgNetworkImageRender(), networkSourceMatcher(extension: "svg"): svgNetworkImageRender(),
networkSourceMatcher(): networkImageRender( networkSourceMatcher(): networkImageRender(

9
lib/integral_store/integral_store_details_page.dart

@ -100,19 +100,10 @@ class _IntegralStoreDetailsPage extends State {
child: Html( child: Html(
data: goods != null ? goods.detail : "", data: goods != null ? goods.detail : "",
customImageRenders: { customImageRenders: {
base64DataUriMatcher(): base64ImageRender(),
assetUriMatcher(): assetImageRender(),
networkSourceMatcher(extension: "svg"):
svgNetworkImageRender(),
networkSourceMatcher(): networkImageRender( networkSourceMatcher(): networkImageRender(
loadingWidget: () { loadingWidget: () {
// return Image.asset("assets/image/default_1.png",);
return Container(); return Container();
}, },
// mapUrl: (url) {
// print("objectUrl: $url");
// return "$url?imageMogr2/format/webp/blur/1x0/quality/75";
// }
), ),
}, },
), ),

3
lib/retrofit/min_api.dart

@ -1,7 +1,6 @@
import 'dart:convert'; import 'dart:convert';
import 'package:dio/dio.dart'; import 'package:dio/dio.dart';
import 'package:flare_flutter/flare_testing.dart';
import 'package:flutter/foundation.dart'; import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_easyloading/flutter_easyloading.dart'; import 'package:flutter_easyloading/flutter_easyloading.dart';
@ -11,8 +10,6 @@ import 'package:huixiang/retrofit/data/address.dart';
import 'package:huixiang/retrofit/data/base_data.dart'; import 'package:huixiang/retrofit/data/base_data.dart';
import 'package:huixiang/retrofit/data/down_order.dart'; import 'package:huixiang/retrofit/data/down_order.dart';
import 'package:huixiang/retrofit/data/min_order_info.dart'; import 'package:huixiang/retrofit/data/min_order_info.dart';
import 'package:huixiang/retrofit/data/placeOrderFirst.dart';
import 'package:huixiang/retrofit/data/settlement_bean.dart';
import 'package:huixiang/retrofit/data/wx_pay.dart'; import 'package:huixiang/retrofit/data/wx_pay.dart';
import 'package:huixiang/view_widget/login_tips_dialog.dart'; import 'package:huixiang/view_widget/login_tips_dialog.dart';
import 'package:retrofit/retrofit.dart'; import 'package:retrofit/retrofit.dart';

19
lib/store/store_order.dart

@ -59,6 +59,8 @@ class _StoreOrderPage extends State<StoreOrderPage>
String tenant = ""; String tenant = "";
String storeId = ""; String storeId = "";
int numberOfPeople = 0; int numberOfPeople = 0;
///token
String minToken;
@override @override
void initState() { void initState() {
@ -91,13 +93,13 @@ class _StoreOrderPage extends State<StoreOrderPage>
token: shared.getString('token'), token: shared.getString('token'),
showLoading: false, showLoading: false,
); );
queryStoreInfo();
apiService.minLogin(storeId).catchError((onError) { apiService.minLogin(storeId).catchError((onError) {
debugPrint(onError); debugPrint(onError);
}).then((baseData) { }).then((baseData) {
if (baseData != null && baseData.isSuccess) { if (baseData != null && baseData.isSuccess) {
Map<String, dynamic> minStoreInfo = baseData.data; Map<String, dynamic> minStoreInfo = baseData.data;
String minToken = minStoreInfo["token"]; minToken = minStoreInfo["token"];
queryStoreInfo();
SharedPreferences.getInstance().then( SharedPreferences.getInstance().then(
(value) => { (value) => {
value.setString('minToken', minToken), value.setString('minToken', minToken),
@ -127,10 +129,8 @@ class _StoreOrderPage extends State<StoreOrderPage>
/// ///
getParentInfo() async { getParentInfo() async {
BaseData baseData = BaseData baseData = await minService.getParentInfo("$tableId")
await minService.getParentInfo("$tableId").catchError((error) { .catchError((error) {debugPrint(error);});
debugPrint(error);
});
if (baseData != null && baseData.isSuccess) { if (baseData != null && baseData.isSuccess) {
if (baseData.data != null) { if (baseData.data != null) {
parentId = baseData.data["id"]; parentId = baseData.data["id"];
@ -244,7 +244,9 @@ class _StoreOrderPage extends State<StoreOrderPage>
StretchMode.fadeTitle, StretchMode.fadeTitle,
StretchMode.blurBackground, StretchMode.blurBackground,
], ],
background: Stack( background: Container(
color: Colors.white,
child: Stack(
children: [ children: [
Positioned( Positioned(
child: Column( child: Column(
@ -298,6 +300,7 @@ class _StoreOrderPage extends State<StoreOrderPage>
], ],
), ),
), ),
),
backgroundColor: Color(0x33FAFAFA), backgroundColor: Color(0x33FAFAFA),
centerTitle: false, centerTitle: false,
elevation: 0, elevation: 0,
@ -351,6 +354,8 @@ class _StoreOrderPage extends State<StoreOrderPage>
storeInfo, storeInfo,
shopCarGoods, shopCarGoods,
controller, controller,
minToken,
tenant,
_queryMiNiDetail, _queryMiNiDetail,
), ),

10
lib/store/store_view/store_order_list.dart

@ -19,6 +19,8 @@ class StoreOrderListPage extends StatefulWidget {
final List<Activity> activitys; final List<Activity> activitys;
final StoreInfo storeInfo; final StoreInfo storeInfo;
final ScrollController controller; final ScrollController controller;
final String minToken;
final String tenant;
final Function(String id) queryMiNiDetail; final Function(String id) queryMiNiDetail;
ShoppingCart shopCarGoods; ShoppingCart shopCarGoods;
@ -29,6 +31,8 @@ class StoreOrderListPage extends StatefulWidget {
this.storeInfo, this.storeInfo,
this.shopCarGoods, this.shopCarGoods,
this.controller, this.controller,
this.minToken,
this.tenant,
this.queryMiNiDetail, this.queryMiNiDetail,
); );
@ -59,13 +63,11 @@ class _StoreOrderListPage extends State<StoreOrderListPage> {
/// ///
appletGoods() async { appletGoods() async {
SharedPreferences value = await SharedPreferences.getInstance(); SharedPreferences value = await SharedPreferences.getInstance();
String minToken = value.getString("minToken");
String tenant = value.getString("tenant");
minService = MinApiService( minService = MinApiService(
Dio(), Dio(),
context: context, context: context,
token: minToken, token: widget.minToken,
tenant: tenant, tenant: widget.tenant,
storeId: widget.arguments["id"], storeId: widget.arguments["id"],
); );

11
lib/web/web_page.dart

@ -260,9 +260,13 @@ class _WebPage extends State<WebPage> with WidgetsBindingObserver {
WebHeader(widget.arguments, activity, article, 16), WebHeader(widget.arguments, activity, article, 16),
/// ///
WebContent(activity, article, () { WebContent(
activity,
article,
() {
setState(() {}); setState(() {});
}), },
),
/// ///
CommentList( CommentList(
@ -273,7 +277,8 @@ class _WebPage extends State<WebPage> with WidgetsBindingObserver {
isKeyBoardShow, isKeyBoardShow,
_reply, _reply,
_delCommentTips, _delCommentTips,
12.sp), 12.sp,
),
], ],
), ),
), ),

104
lib/web/web_view/web_content.dart

@ -44,7 +44,6 @@ class _WebContent extends State<WebContent> {
) )
}, },
customImageRenders: { customImageRenders: {
base64DataUriMatcher(): base64ImageRender(),
assetUriMatcher(): assetImageRender(), assetUriMatcher(): assetImageRender(),
networkSourceMatcher(extension: "svg"): networkSourceMatcher(extension: "svg"):
svgNetworkImageRender(), svgNetworkImageRender(),
@ -54,57 +53,58 @@ class _WebContent extends State<WebContent> {
}, },
), ),
}, },
customRender: { // customRender: {
"video": // "video":
(context, parsedChild, attributes, element) { // (context, parsedChild) {
var src = attributes['src']; // var src = attributes['src'];
return videoWidget( // parsedChild.toString()
double.tryParse(attributes['width'] ?? ""), // return videoWidget(
double.tryParse( // double.tryParse(attributes['width'] ?? ""),
element.attributes['height'] ?? ""), // double.tryParse(
(src != null && // element.attributes['height'] ?? ""),
src != "" && // (src != null &&
src.endsWith(".mp4")) // src != "" &&
? src // src.endsWith(".mp4"))
: element // ? src
.children.first.attributes["src"], // : element
element.attributes["sandbox"]); // .children.first.attributes["src"],
}, // element.attributes["sandbox"]);
"iframe": // },
(context, parsedChild, attributes, element) { // "iframe":
var src = attributes['src']; // (context, parsedChild) {
return videoWidget( // var src = attributes['src'];
double.tryParse(attributes['width'] ?? ""), // return videoWidget(
double.tryParse( // double.tryParse(attributes['width'] ?? ""),
element.attributes['height'] ?? ""), // double.tryParse(
(src != null && // element.attributes['height'] ?? ""),
src != "" && // (src != null &&
src.endsWith(".mp4")) // src != "" &&
? src // src.endsWith(".mp4"))
: element // ? src
.children.first.attributes["src"], // : element
element.attributes["sandbox"]); // .children.first.attributes["src"],
}, // element.attributes["sandbox"]);
"audio": // },
(context, parsedChild, attributes, element) { // "audio":
final sources = <String>[ // (context, parsedChild) {
if (element.attributes['src'] != null) // final sources = <String>[
element.attributes['src'], // if (element.attributes['src'] != null)
]; // element.attributes['src'],
if (sources == null || // ];
sources.isEmpty || // if (sources == null ||
sources.first == null) { // sources.isEmpty ||
return EmptyContentElement(); // sources.first == null) {
} // return EmptyContentElement();
return audioWidget( // }
attributes['controls'] != null, // return audioWidget(
attributes['loop'] != null, // attributes['controls'] != null,
attributes['autoplay'] != null, // attributes['loop'] != null,
sources, // attributes['autoplay'] != null,
context.style.width ?? 300.w, // sources,
); // context.style.width ?? 300.w,
}, // );
}, // },
// },
); );
} }

305
pubspec.lock

@ -1,13 +1,6 @@
# Generated by pub # Generated by pub
# See https://dart.dev/tools/pub/glossary#lockfile # See https://dart.dev/tools/pub/glossary#lockfile
packages: packages:
_fe_analyzer_shared:
dependency: transitive
description:
name: _fe_analyzer_shared
url: "https://pub.flutter-io.cn"
source: hosted
version: "14.0.0"
ai_decimal_accuracy: ai_decimal_accuracy:
dependency: "direct main" dependency: "direct main"
description: description:
@ -15,13 +8,6 @@ packages:
url: "https://pub.flutter-io.cn" url: "https://pub.flutter-io.cn"
source: hosted source: hosted
version: "1.1.0" version: "1.1.0"
analyzer:
dependency: transitive
description:
name: analyzer
url: "https://pub.flutter-io.cn"
source: hosted
version: "0.41.2"
android_intent_plus: android_intent_plus:
dependency: "direct main" dependency: "direct main"
description: description:
@ -29,13 +15,6 @@ packages:
url: "https://pub.flutter-io.cn" url: "https://pub.flutter-io.cn"
source: hosted source: hosted
version: "1.0.2" version: "1.0.2"
args:
dependency: transitive
description:
name: args
url: "https://pub.flutter-io.cn"
source: hosted
version: "2.3.0"
async: async:
dependency: transitive dependency: transitive
description: description:
@ -71,62 +50,6 @@ packages:
url: "https://pub.flutter-io.cn" url: "https://pub.flutter-io.cn"
source: hosted source: hosted
version: "0.1.6" version: "0.1.6"
build:
dependency: transitive
description:
name: build
url: "https://pub.flutter-io.cn"
source: hosted
version: "1.6.2"
build_config:
dependency: transitive
description:
name: build_config
url: "https://pub.flutter-io.cn"
source: hosted
version: "0.4.6"
build_daemon:
dependency: transitive
description:
name: build_daemon
url: "https://pub.flutter-io.cn"
source: hosted
version: "2.1.10"
build_resolvers:
dependency: transitive
description:
name: build_resolvers
url: "https://pub.flutter-io.cn"
source: hosted
version: "1.5.3"
build_runner:
dependency: "direct dev"
description:
name: build_runner
url: "https://pub.flutter-io.cn"
source: hosted
version: "1.11.5"
build_runner_core:
dependency: transitive
description:
name: build_runner_core
url: "https://pub.flutter-io.cn"
source: hosted
version: "6.1.10"
built_collection:
dependency: transitive
description:
name: built_collection
url: "https://pub.flutter-io.cn"
source: hosted
version: "4.3.2"
built_value:
dependency: transitive
description:
name: built_value
url: "https://pub.flutter-io.cn"
source: hosted
version: "7.1.0"
cached_network_image: cached_network_image:
dependency: "direct main" dependency: "direct main"
description: description:
@ -148,34 +71,20 @@ packages:
url: "https://pub.flutter-io.cn" url: "https://pub.flutter-io.cn"
source: hosted source: hosted
version: "1.2.0" version: "1.2.0"
checked_yaml:
dependency: transitive
description:
name: checked_yaml
url: "https://pub.flutter-io.cn"
source: hosted
version: "1.0.4"
chewie: chewie:
dependency: transitive dependency: transitive
description: description:
name: chewie name: chewie
url: "https://pub.flutter-io.cn" url: "https://pub.flutter-io.cn"
source: hosted source: hosted
version: "0.12.2" version: "1.2.2"
chewie_audio: chewie_audio:
dependency: "direct main" dependency: "direct main"
description: description:
name: chewie_audio name: chewie_audio
url: "https://pub.flutter-io.cn" url: "https://pub.flutter-io.cn"
source: hosted source: hosted
version: "1.1.2" version: "1.2.0"
cli_util:
dependency: transitive
description:
name: cli_util
url: "https://pub.flutter-io.cn"
source: hosted
version: "0.3.5"
clock: clock:
dependency: transitive dependency: transitive
description: description:
@ -183,13 +92,6 @@ packages:
url: "https://pub.flutter-io.cn" url: "https://pub.flutter-io.cn"
source: hosted source: hosted
version: "1.1.0" version: "1.1.0"
code_builder:
dependency: transitive
description:
name: code_builder
url: "https://pub.flutter-io.cn"
source: hosted
version: "3.7.0"
collection: collection:
dependency: transitive dependency: transitive
description: description:
@ -211,20 +113,13 @@ packages:
url: "https://pub.flutter-io.cn" url: "https://pub.flutter-io.cn"
source: hosted source: hosted
version: "2.1.5" version: "2.1.5"
css_colors:
dependency: transitive
description:
name: css_colors
url: "https://pub.flutter-io.cn"
source: hosted
version: "1.1.1"
csslib: csslib:
dependency: transitive dependency: transitive
description: description:
name: csslib name: csslib
url: "https://pub.flutter-io.cn" url: "https://pub.flutter-io.cn"
source: hosted source: hosted
version: "0.16.2" version: "0.17.1"
cupertino_icons: cupertino_icons:
dependency: "direct main" dependency: "direct main"
description: description:
@ -232,13 +127,6 @@ packages:
url: "https://pub.flutter-io.cn" url: "https://pub.flutter-io.cn"
source: hosted source: hosted
version: "1.0.3" version: "1.0.3"
dart_style:
dependency: transitive
description:
name: dart_style
url: "https://pub.flutter-io.cn"
source: hosted
version: "1.3.12"
dio: dio:
dependency: "direct main" dependency: "direct main"
description: description:
@ -274,13 +162,6 @@ packages:
url: "https://pub.flutter-io.cn" url: "https://pub.flutter-io.cn"
source: hosted source: hosted
version: "6.1.2" version: "6.1.2"
fixnum:
dependency: transitive
description:
name: fixnum
url: "https://pub.flutter-io.cn"
source: hosted
version: "0.10.11"
flare_flutter: flare_flutter:
dependency: "direct main" dependency: "direct main"
description: description:
@ -348,19 +229,26 @@ packages:
name: flutter_html name: flutter_html
url: "https://pub.flutter-io.cn" url: "https://pub.flutter-io.cn"
source: hosted source: hosted
version: "1.3.0" version: "2.1.5"
flutter_layout_grid: flutter_layout_grid:
dependency: transitive dependency: transitive
description: description:
name: flutter_layout_grid name: flutter_layout_grid
url: "https://pub.flutter-io.cn" url: "https://pub.flutter-io.cn"
source: hosted source: hosted
version: "0.10.5" version: "1.0.3"
flutter_localizations: flutter_localizations:
dependency: "direct main" dependency: "direct main"
description: flutter description: flutter
source: sdk source: sdk
version: "0.0.0" version: "0.0.0"
flutter_math_fork:
dependency: transitive
description:
name: flutter_math_fork
url: "https://pub.flutter-io.cn"
source: hosted
version: "0.3.3+1"
flutter_page_indicator: flutter_page_indicator:
dependency: transitive dependency: transitive
description: description:
@ -416,7 +304,7 @@ packages:
name: flutter_svg name: flutter_svg
url: "https://pub.flutter-io.cn" url: "https://pub.flutter-io.cn"
source: hosted source: hosted
version: "0.20.0-nullsafety.3" version: "0.22.0"
flutter_swiper: flutter_swiper:
dependency: "direct main" dependency: "direct main"
description: description:
@ -448,13 +336,6 @@ packages:
url: "https://pub.flutter-io.cn" url: "https://pub.flutter-io.cn"
source: hosted source: hosted
version: "9.1.0" version: "9.1.0"
glob:
dependency: transitive
description:
name: glob
url: "https://pub.flutter-io.cn"
source: hosted
version: "2.0.1"
graphs: graphs:
dependency: transitive dependency: transitive
description: description:
@ -468,7 +349,7 @@ packages:
name: html name: html
url: "https://pub.flutter-io.cn" url: "https://pub.flutter-io.cn"
source: hosted source: hosted
version: "0.14.0+4" version: "0.15.0"
http: http:
dependency: transitive dependency: transitive
description: description:
@ -476,13 +357,6 @@ packages:
url: "https://pub.flutter-io.cn" url: "https://pub.flutter-io.cn"
source: hosted source: hosted
version: "0.12.2" version: "0.12.2"
http_multi_server:
dependency: transitive
description:
name: http_multi_server
url: "https://pub.flutter-io.cn"
source: hosted
version: "2.2.0"
http_parser: http_parser:
dependency: transitive dependency: transitive
description: description:
@ -497,13 +371,6 @@ packages:
url: "https://pub.flutter-io.cn" url: "https://pub.flutter-io.cn"
source: hosted source: hosted
version: "2.0.0" version: "2.0.0"
import_js_library:
dependency: transitive
description:
name: import_js_library
url: "https://pub.flutter-io.cn"
source: hosted
version: "1.0.2"
intl: intl:
dependency: "direct main" dependency: "direct main"
description: description:
@ -511,13 +378,6 @@ packages:
url: "https://pub.flutter-io.cn" url: "https://pub.flutter-io.cn"
source: hosted source: hosted
version: "0.17.0" version: "0.17.0"
io:
dependency: transitive
description:
name: io
url: "https://pub.flutter-io.cn"
source: hosted
version: "0.3.5"
js: js:
dependency: transitive dependency: transitive
description: description:
@ -532,13 +392,6 @@ packages:
url: "https://pub.flutter-io.cn" url: "https://pub.flutter-io.cn"
source: hosted source: hosted
version: "3.1.1" version: "3.1.1"
json_serializable:
dependency: "direct dev"
description:
name: json_serializable
url: "https://pub.flutter-io.cn"
source: hosted
version: "3.5.1"
keframe: keframe:
dependency: "direct main" dependency: "direct main"
description: description:
@ -560,13 +413,6 @@ packages:
url: "https://pub.flutter-io.cn" url: "https://pub.flutter-io.cn"
source: hosted source: hosted
version: "1.1.0" version: "1.1.0"
logging:
dependency: transitive
description:
name: logging
url: "https://pub.flutter-io.cn"
source: hosted
version: "1.0.2"
matcher: matcher:
dependency: transitive dependency: transitive
description: description:
@ -581,20 +427,20 @@ packages:
url: "https://pub.flutter-io.cn" url: "https://pub.flutter-io.cn"
source: hosted source: hosted
version: "1.3.0" version: "1.3.0"
mime: nested:
dependency: transitive dependency: transitive
description: description:
name: mime name: nested
url: "https://pub.flutter-io.cn" url: "https://pub.flutter-io.cn"
source: hosted source: hosted
version: "1.0.1" version: "1.0.0"
package_config: numerus:
dependency: transitive dependency: transitive
description: description:
name: package_config name: numerus
url: "https://pub.flutter-io.cn" url: "https://pub.flutter-io.cn"
source: hosted source: hosted
version: "1.9.3" version: "1.1.1"
package_info: package_info:
dependency: "direct main" dependency: "direct main"
description: description:
@ -700,13 +546,6 @@ packages:
url: "https://pub.flutter-io.cn" url: "https://pub.flutter-io.cn"
source: hosted source: hosted
version: "1.0.3" version: "1.0.3"
pool:
dependency: transitive
description:
name: pool
url: "https://pub.flutter-io.cn"
source: hosted
version: "1.5.0"
process: process:
dependency: transitive dependency: transitive
description: description:
@ -714,20 +553,13 @@ packages:
url: "https://pub.flutter-io.cn" url: "https://pub.flutter-io.cn"
source: hosted source: hosted
version: "4.2.3" version: "4.2.3"
pub_semver: provider:
dependency: transitive dependency: transitive
description: description:
name: pub_semver name: provider
url: "https://pub.flutter-io.cn" url: "https://pub.flutter-io.cn"
source: hosted source: hosted
version: "2.1.0" version: "5.0.0"
pubspec_parse:
dependency: transitive
description:
name: pubspec_parse
url: "https://pub.flutter-io.cn"
source: hosted
version: "0.1.8"
pull_to_refresh: pull_to_refresh:
dependency: "direct main" dependency: "direct main"
description: description:
@ -755,7 +587,7 @@ packages:
name: quiver name: quiver
url: "https://pub.flutter-io.cn" url: "https://pub.flutter-io.cn"
source: hosted source: hosted
version: "2.1.5" version: "3.0.1+1"
retrofit: retrofit:
dependency: "direct main" dependency: "direct main"
description: description:
@ -763,13 +595,6 @@ packages:
url: "https://pub.flutter-io.cn" url: "https://pub.flutter-io.cn"
source: hosted source: hosted
version: "1.3.4+1" version: "1.3.4+1"
retrofit_generator:
dependency: "direct dev"
description:
name: retrofit_generator
url: "https://pub.flutter-io.cn"
source: hosted
version: "1.4.1+3"
rive: rive:
dependency: "direct main" dependency: "direct main"
description: description:
@ -833,32 +658,11 @@ packages:
url: "https://pub.flutter-io.cn" url: "https://pub.flutter-io.cn"
source: hosted source: hosted
version: "1.3.0" version: "1.3.0"
shelf:
dependency: transitive
description:
name: shelf
url: "https://pub.flutter-io.cn"
source: hosted
version: "0.7.9"
shelf_web_socket:
dependency: transitive
description:
name: shelf_web_socket
url: "https://pub.flutter-io.cn"
source: hosted
version: "0.2.4+1"
sky_engine: sky_engine:
dependency: transitive dependency: transitive
description: flutter description: flutter
source: sdk source: sdk
version: "0.0.99" version: "0.0.99"
source_gen:
dependency: transitive
description:
name: source_gen
url: "https://pub.flutter-io.cn"
source: hosted
version: "0.9.10+3"
source_span: source_span:
dependency: transitive dependency: transitive
description: description:
@ -894,13 +698,6 @@ packages:
url: "https://pub.flutter-io.cn" url: "https://pub.flutter-io.cn"
source: hosted source: hosted
version: "2.1.0" version: "2.1.0"
stream_transform:
dependency: transitive
description:
name: stream_transform
url: "https://pub.flutter-io.cn"
source: hosted
version: "2.0.0"
string_scanner: string_scanner:
dependency: transitive dependency: transitive
description: description:
@ -929,13 +726,6 @@ packages:
url: "https://pub.flutter-io.cn" url: "https://pub.flutter-io.cn"
source: hosted source: hosted
version: "0.3.0" version: "0.3.0"
timing:
dependency: transitive
description:
name: timing
url: "https://pub.flutter-io.cn"
source: hosted
version: "0.1.1+3"
tpns_flutter_plugin: tpns_flutter_plugin:
dependency: "direct main" dependency: "direct main"
description: description:
@ -958,7 +748,7 @@ packages:
name: tuple name: tuple
url: "https://pub.flutter-io.cn" url: "https://pub.flutter-io.cn"
source: hosted source: hosted
version: "1.0.3" version: "2.0.0"
typed_data: typed_data:
dependency: transitive dependency: transitive
description: description:
@ -1028,63 +818,63 @@ packages:
name: video_player name: video_player
url: "https://pub.flutter-io.cn" url: "https://pub.flutter-io.cn"
source: hosted source: hosted
version: "1.0.1" version: "2.2.3"
video_player_platform_interface: video_player_platform_interface:
dependency: transitive dependency: transitive
description: description:
name: video_player_platform_interface name: video_player_platform_interface
url: "https://pub.flutter-io.cn" url: "https://pub.flutter-io.cn"
source: hosted source: hosted
version: "2.2.0" version: "4.2.0"
video_player_web: video_player_web:
dependency: transitive dependency: transitive
description: description:
name: video_player_web name: video_player_web
url: "https://pub.flutter-io.cn" url: "https://pub.flutter-io.cn"
source: hosted source: hosted
version: "0.1.4+1" version: "2.0.4"
wakelock: wakelock:
dependency: transitive dependency: transitive
description: description:
name: wakelock name: wakelock
url: "https://pub.flutter-io.cn" url: "https://pub.flutter-io.cn"
source: hosted source: hosted
version: "0.2.1+1" version: "0.5.6"
wakelock_platform_interface: wakelock_macos:
dependency: transitive dependency: transitive
description: description:
name: wakelock_platform_interface name: wakelock_macos
url: "https://pub.flutter-io.cn" url: "https://pub.flutter-io.cn"
source: hosted source: hosted
version: "0.1.0+1" version: "0.4.0"
wakelock_web: wakelock_platform_interface:
dependency: transitive dependency: transitive
description: description:
name: wakelock_web name: wakelock_platform_interface
url: "https://pub.flutter-io.cn" url: "https://pub.flutter-io.cn"
source: hosted source: hosted
version: "0.1.0+3" version: "0.3.0"
watcher: wakelock_web:
dependency: transitive dependency: transitive
description: description:
name: watcher name: wakelock_web
url: "https://pub.flutter-io.cn" url: "https://pub.flutter-io.cn"
source: hosted source: hosted
version: "1.0.0" version: "0.4.0"
web_socket_channel: wakelock_windows:
dependency: transitive dependency: transitive
description: description:
name: web_socket_channel name: wakelock_windows
url: "https://pub.flutter-io.cn" url: "https://pub.flutter-io.cn"
source: hosted source: hosted
version: "1.2.0" version: "0.2.0"
webview_flutter: webview_flutter:
dependency: "direct main" dependency: transitive
description: description:
name: webview_flutter name: webview_flutter
url: "https://pub.flutter-io.cn" url: "https://pub.flutter-io.cn"
source: hosted source: hosted
version: "1.0.7" version: "2.0.13"
win32: win32:
dependency: transitive dependency: transitive
description: description:
@ -1106,13 +896,6 @@ packages:
url: "https://pub.flutter-io.cn" url: "https://pub.flutter-io.cn"
source: hosted source: hosted
version: "5.1.2" version: "5.1.2"
yaml:
dependency: transitive
description:
name: yaml
url: "https://pub.flutter-io.cn"
source: hosted
version: "3.1.0"
sdks: sdks:
dart: ">=2.13.0 <3.0.0" dart: ">=2.13.0 <3.0.0"
flutter: ">=2.0.0" flutter: ">=2.2.0"

13
pubspec.yaml

@ -63,12 +63,11 @@ dependencies:
path_provider: ^1.2.0 path_provider: ^1.2.0
cached_network_image: ^2.0.0 cached_network_image: ^2.0.0
flutter_html: ^1.3.0 #2.1.0 flutter_html: ^2.1.5 #2.1.0
webview_flutter: ^1.0.7
chewie_audio: ^1.1.2 chewie_audio: ^1.1.2
photo_view: ^0.11.1 photo_view: ^0.11.1
video_player: ^1.0.1 video_player: ^2.2.3
package_info: ^2.0.2 package_info: ^2.0.2
@ -80,7 +79,7 @@ dependencies:
rive: ^0.6.8 rive: ^0.6.8
flare_flutter: ^3.0.2 flare_flutter: ^3.0.2
flutter_svg: ^0.20.0-nullsafety.3 flutter_svg: ^0.22.0
font_awesome_flutter: ^9.1.0 font_awesome_flutter: ^9.1.0
ai_decimal_accuracy: ^1.1.0 ai_decimal_accuracy: ^1.1.0
@ -88,9 +87,9 @@ dependencies:
dev_dependencies: dev_dependencies:
flutter_test: flutter_test:
sdk: flutter sdk: flutter
retrofit_generator: ^1.4.1+3 # retrofit_generator: ^1.4.1+3
build_runner: ^1.11.5 # build_runner: ^1.11.5
json_serializable: ^3.5.1 # json_serializable: ^3.5.1
flutter: flutter:

Loading…
Cancel
Save