Browse Source

Merge remote-tracking branch 'origin/master'

null_safety
哈哈哈 4 years ago
parent
commit
f154f8b558
  1. 219
      lib/home/activity_list_page.dart
  2. 51
      lib/home/home_page.dart
  3. 74
      lib/home/huixiang_brand_page.dart
  4. 56
      lib/home/points_mall_page.dart
  5. 26
      lib/integral_store/integral_store_details_page.dart
  6. 16
      lib/mine/mine_page.dart
  7. 2
      lib/order/exchange_history_page.dart
  8. 37
      lib/order/order_history_page.dart
  9. 4
      lib/retrofit/retrofit_api.dart
  10. 10
      lib/retrofit/retrofit_api.g.dart
  11. 53
      lib/union/store_details_page.dart
  12. 5
      lib/union/union_details_page.dart
  13. 5
      lib/view_widget/hot_item.dart
  14. 3
      pubspec.yaml

219
lib/home/activity_list_page.dart

@ -77,123 +77,122 @@ class _ActivityListPage extends State<ActivityListPage>
super.build(context);
return Container(
child: SizeCacheWidget(
child: SmartRefresher(
controller: _refreshController,
enablePullDown: true,
enablePullUp: false,
header: MyHeader(),
physics: BouncingScrollPhysics(),
footer: CustomFooter(
builder: (context, mode) {
return MyFooter(mode);
},
),
onRefresh: queryActivity,
child: ListView.builder(
itemCount: activityList == null ? 0 : activityList.length,
physics: NeverScrollableScrollPhysics(),
itemBuilder: (context, position) {
return InkWell(
onTap: () {
Navigator.of(context)
.pushNamed('/router/store_detail_page', arguments: {
"html": activityList[position].content,
"title": activityList[position].mainTitle,
"time": activityList[position].createTime,
"storeId": activityList[position].storeId,
"author": activityList[position].storeName
});
},
child: FrameSeparateWidget(
child: activityItem(activityList[position]),
placeHolder: AspectRatio(
aspectRatio: 1.34,
child: Container(
margin: EdgeInsets.only(
left: 16.w, right: 16.w, top: 8.h, bottom: 8.h),
decoration: BoxDecoration(
color: Colors.white,
boxShadow: [
BoxShadow(
color: Colors.black.withAlpha(12),
offset: Offset(0, 3),
blurRadius: 14,
spreadRadius: 0,
)
],
borderRadius: BorderRadius.circular(8),
),
child: SmartRefresher(
controller: _refreshController,
enablePullDown: true,
enablePullUp: false,
header: MyHeader(),
physics: BouncingScrollPhysics(),
footer: CustomFooter(
builder: (context, mode) {
return MyFooter(mode);
},
),
onRefresh: queryActivity,
child: ListView.builder(
itemCount: activityList == null ? 0 : activityList.length,
physics: NeverScrollableScrollPhysics(),
itemBuilder: (context, position) {
return InkWell(
onTap: () {
Navigator.of(context)
.pushNamed('/router/store_detail_page', arguments: {
"activityId": activityList[position].id
});
},
child: FrameSeparateWidget(
child: activityItem(activityList[position]),
placeHolder: AspectRatio(
aspectRatio: 1.34,
child: Container(
margin: EdgeInsets.only(
left: 16.w, right: 16.w, top: 8.h, bottom: 8.h),
decoration: BoxDecoration(
color: Colors.white,
boxShadow: [
BoxShadow(
color: Colors.black.withAlpha(12),
offset: Offset(0, 3),
blurRadius: 14,
spreadRadius: 0,
)
],
borderRadius: BorderRadius.circular(8),
),
),
),
);
},
),
),
);
},
),
),
),
);
}
Widget activityItem(Activity activity) {
return AspectRatio(
aspectRatio: 1.34,
child: Container(
margin: EdgeInsets.only(left: 16.w, right: 16.w, top: 8.h, bottom: 8.h),
decoration: BoxDecoration(
color: Colors.white,
boxShadow: [
BoxShadow(
color: Colors.black.withAlpha(12),
offset: Offset(0, 3),
blurRadius: 14,
spreadRadius: 0,
)
],
borderRadius: BorderRadius.circular(8),
),
child: Column(
children: [
MImage(
activity.coverImg,
aspectRatio: 2.1,
radius: BorderRadius.only(
topLeft: Radius.circular(8),
topRight: Radius.circular(8),
),
fit: BoxFit.cover,
errorSrc: "assets/image/default_2_1.png",
fadeSrc: "assets/image/default_2_1.png",
return Container(
margin: EdgeInsets.only(left: 16.w, right: 16.w, top: 8.h, bottom: 8.h),
decoration: BoxDecoration(
color: Colors.white,
boxShadow: [
BoxShadow(
color: Colors.black.withAlpha(12),
offset: Offset(0, 3),
blurRadius: 14,
spreadRadius: 0,
)
],
borderRadius: BorderRadius.circular(8),
),
child: Column(
children: [
MImage(
activity.coverImg,
aspectRatio: 2.1,
radius: BorderRadius.only(
topLeft: Radius.circular(8),
topRight: Radius.circular(8),
),
Container(
padding: EdgeInsets.only(
left: 16.w, right: 16.w, top: 8.h, bottom: 12.h),
child: Column(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
activity.mainTitle,
maxLines: 1,
overflow: TextOverflow.ellipsis,
style: TextStyle(
fontWeight: FontWeight.bold,
fontSize: 14.sp,
color: Colors.black,
),
fit: BoxFit.cover,
errorSrc: "assets/image/default_2_1.png",
fadeSrc: "assets/image/default_2_1.png",
),
Container(
padding: EdgeInsets.only(
left: 16.w, right: 16.w, top: 8.h, bottom: 12.h),
child: Column(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
activity.mainTitle,
maxLines: 1,
overflow: TextOverflow.ellipsis,
style: TextStyle(
fontWeight: FontWeight.bold,
fontSize: 14.sp,
color: Colors.black,
),
SizedBox(
height: 4.h,
),
SizedBox(
height: 4.h,
),
Text(
activity.viceTitle ?? "",
maxLines: 1,
overflow: TextOverflow.ellipsis,
style: TextStyle(
fontSize: 10.sp,
color: Color(0xFF727272),
),
Text(
activity.viceTitle ?? "",
maxLines: 1,
overflow: TextOverflow.ellipsis,
style: TextStyle(
fontSize: 10.sp,
color: Color(0xFF727272),
),
),
ConstrainedBox(
constraints: BoxConstraints(
maxWidth: double.infinity,
minWidth: double.infinity,
),
Row(
child: Row(
crossAxisAlignment: CrossAxisAlignment.end,
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
@ -227,12 +226,12 @@ class _ActivityListPage extends State<ActivityListPage>
],
)
],
)
],
),
)
],
),
),
),
],
),
)
],
),
);
}

51
lib/home/home_page.dart

@ -613,18 +613,23 @@ class _HomePage extends State<HomePage> with AutomaticKeepAliveClientMixin {
physics: BouncingScrollPhysics(),
loop: false,
itemBuilder: (context, position) {
return Container(
margin: EdgeInsets.all(16),
decoration: BoxDecoration(
borderRadius: BorderRadius.all(Radius.circular(8))),
child: MImage(
(bannerData != null && position < bannerData.length)
? bannerData[position].imgUrl ?? ""
: "",
radius: BorderRadius.all(Radius.circular(8)),
fit: BoxFit.cover,
errorSrc: "assets/image/default_2_1.png",
fadeSrc: "assets/image/default_2_1.png",
return InkWell(
onTap: () {
bannerClick(bannerData[position]);
},
child: Container(
margin: EdgeInsets.all(16),
decoration: BoxDecoration(
borderRadius: BorderRadius.all(Radius.circular(8))),
child: MImage(
(bannerData != null && position < bannerData.length)
? bannerData[position].imgUrl ?? ""
: "",
radius: BorderRadius.all(Radius.circular(8)),
fit: BoxFit.cover,
errorSrc: "assets/image/default_2_1.png",
fadeSrc: "assets/image/default_2_1.png",
),
),
);
},
@ -633,6 +638,28 @@ class _HomePage extends State<HomePage> with AutomaticKeepAliveClientMixin {
);
}
/// contentType 0123
bannerClick(BannerData bannerData) async {
switch(bannerData.contentType) {
case 1:
Navigator.of(context).pushNamed('/router/integral_store_page',
arguments: {"goodsId": bannerData.content});
break;
case 2:
Navigator.of(context)
.pushNamed('/router/store_detail_page', arguments: {
"activityId": bannerData.content,
});
break;
case 3:
Navigator.of(context)
.pushNamed('/router/store_detail_page', arguments: {
"articleId": bannerData.content,
});
break;
}
}
@override
bool get wantKeepAlive => true;
}

74
lib/home/huixiang_brand_page.dart

@ -166,12 +166,10 @@ class _BrandPage extends State<BrandPage>
base64DataUriMatcher(): base64ImageRender(),
assetUriMatcher(): assetImageRender(),
networkSourceMatcher(extension: "svg"): svgNetworkImageRender(),
networkSourceMatcher(): networkImageRender(
loadingWidget: () {
// return Image.asset("assets/image/default_1.png",);
return Container();
}
),
networkSourceMatcher(): networkImageRender(loadingWidget: () {
// return Image.asset("assets/image/default_1.png",);
return Container();
}),
},
),
),
@ -443,9 +441,6 @@ class _BrandPage extends State<BrandPage>
child: Swiper(
viewportFraction: 0.88,
scale: 0.93,
// loop: true,
// autoplay: true,
// duration: 2500,
pagination: SwiperPagination(
alignment: Alignment.bottomCenter,
builder: DotSwiperPaginationBuilder(
@ -458,14 +453,19 @@ class _BrandPage extends State<BrandPage>
),
physics: BouncingScrollPhysics(),
itemBuilder: (context, position) {
return MImage(
(bannerData != null && position < bannerData.length)
? bannerData[position].imgUrl
: "",
fit: BoxFit.cover,
radius: BorderRadius.circular(8),
errorSrc: "assets/image/default_2_1.png",
fadeSrc: "assets/image/default_2_1.png",
return InkWell(
onTap: () {
bannerClick(bannerData[position]);
},
child: MImage(
(bannerData != null && position < bannerData.length)
? bannerData[position].imgUrl
: "",
fit: BoxFit.cover,
radius: BorderRadius.circular(8),
errorSrc: "assets/image/default_2_1.png",
fadeSrc: "assets/image/default_2_1.png",
),
);
},
itemCount: (bannerData != null && bannerData.length > 0)
@ -475,6 +475,28 @@ class _BrandPage extends State<BrandPage>
);
}
/// contentType 0123
bannerClick(BannerData bannerData) async {
switch(bannerData.contentType) {
case 1:
Navigator.of(context).pushNamed('/router/integral_store_page',
arguments: {"goodsId": bannerData.content});
break;
case 2:
Navigator.of(context)
.pushNamed('/router/store_detail_page', arguments: {
"activityId": bannerData.content,
});
break;
case 3:
Navigator.of(context)
.pushNamed('/router/store_detail_page', arguments: {
"articleId": bannerData.content,
});
break;
}
}
Widget idea(key, value) {
return Expanded(
flex: 1,
@ -488,14 +510,16 @@ class _BrandPage extends State<BrandPage>
radius: 100,
backgroundImage: NetworkImage(value),
child: Container(
alignment: Alignment.center,
child: Text(
key,
style: TextStyle(
fontSize: 16.sp,
fontWeight: FontWeight.w300,
color: Colors.white),
)),
alignment: Alignment.center,
child: Text(
key,
style: TextStyle(
fontSize: 16.sp,
fontWeight: FontWeight.w300,
color: Colors.white,
),
),
),
),
),
Container(

56
lib/home/points_mall_page.dart

@ -225,11 +225,12 @@ class _PointsMallPage extends State<PointsMallPage>
//Widget数量
crossAxisCount: 2,
//Widget之间间距
crossAxisSpacing: 11.0,
crossAxisSpacing: 11.w,
//Widget之间间距
mainAxisSpacing: 16.w,
//Widget宽高比例
childAspectRatio: Platform.isAndroid ? 0.54 : 0.57,
//0.59
childAspectRatio: 166.w / 281.h,
),
itemBuilder: (contetx, index) {
return GestureDetector(
@ -519,18 +520,23 @@ class _PointsMallPage extends State<PointsMallPage>
scale: 0.7,
loop: false,
itemBuilder: (context, position) {
return Container(
margin: EdgeInsets.only(bottom: 40),
decoration: BoxDecoration(
borderRadius: BorderRadius.all(Radius.circular(8))),
child: MImage(
bannerData != null && position < bannerData.length
? bannerData[position].imgUrl
: "",
radius: BorderRadius.circular(8),
fit: BoxFit.cover,
errorSrc: "assets/image/default_2_1.png",
fadeSrc: "assets/image/default_2_1.png",
return InkWell(
onTap: () {
bannerClick(bannerData[position]);
},
child: Container(
margin: EdgeInsets.only(bottom: 40),
decoration: BoxDecoration(
borderRadius: BorderRadius.all(Radius.circular(8))),
child: MImage(
bannerData != null && position < bannerData.length
? bannerData[position].imgUrl
: "",
radius: BorderRadius.circular(8),
fit: BoxFit.cover,
errorSrc: "assets/image/default_2_1.png",
fadeSrc: "assets/image/default_2_1.png",
),
),
);
},
@ -539,6 +545,28 @@ class _PointsMallPage extends State<PointsMallPage>
);
}
/// contentType 0123
bannerClick(BannerData bannerData) async {
switch(bannerData.contentType) {
case 1:
Navigator.of(context).pushNamed('/router/integral_store_page',
arguments: {"goodsId": bannerData.content});
break;
case 2:
Navigator.of(context)
.pushNamed('/router/store_detail_page', arguments: {
"activityId": bannerData.content,
});
break;
case 3:
Navigator.of(context)
.pushNamed('/router/store_detail_page', arguments: {
"articleId": bannerData.content,
});
break;
}
}
@override
bool get wantKeepAlive => true;
}

26
lib/integral_store/integral_store_details_page.dart

@ -86,19 +86,19 @@ class _IntegralStoreDetailsPage extends State {
),
titleSpacing: 2,
leadingWidth: 56.w,
actions: [
Container(
margin: EdgeInsets.only(right: 15.w),
child: GestureDetector(
onTap: () {},
child: Icon(
Icons.share,
size: 24,
color: Colors.black,
),
),
)
],
// actions: [
// Container(
// margin: EdgeInsets.only(right: 15.w),
// child: GestureDetector(
// onTap: () {},
// child: Icon(
// Icons.share,
// size: 24,
// color: Colors.black,
// ),
// ),
// )
// ],
),
body: Container(
child: Column(

16
lib/mine/mine_page.dart

@ -590,12 +590,7 @@ class _MinePage extends State<MinePage> with AutomaticKeepAliveClientMixin {
Expanded(
child: GestureDetector(
onTap: () {
if (!isLogin) {
loginTips();
return;
}
Navigator.of(context)
.pushNamed('/router/integral_page');
toIntegralPage();
},
child: Row(
mainAxisAlignment: MainAxisAlignment.end,
@ -628,6 +623,15 @@ class _MinePage extends State<MinePage> with AutomaticKeepAliveClientMixin {
);
}
toIntegralPage() async {
if (!isLogin) {
loginTips();
return;
}
await Navigator.of(context).pushNamed('/router/integral_page');
queryUserInfo();
}
@override
bool get wantKeepAlive => true;
}

2
lib/order/exchange_history_page.dart

@ -215,7 +215,7 @@ class _ExchangeHistoryList extends State<ExchangeHistoryList> {
? NoDataView(
isShowBtn: false,
text: "暂无已完成的订单",
fontSize: 16,
fontSize: 16.sp,
margin: EdgeInsets.only(top: 120.h),
)
: ListView.builder(

37
lib/order/order_history_page.dart

@ -10,6 +10,7 @@ import 'package:huixiang/view_widget/classic_header.dart';
import 'package:huixiang/view_widget/custom_image.dart';
import 'package:huixiang/view_widget/my_footer.dart';
import 'package:huixiang/view_widget/my_tab.dart';
import 'package:huixiang/view_widget/no_data_view.dart';
import 'package:huixiang/view_widget/round_button.dart';
import 'package:pull_to_refresh/pull_to_refresh.dart';
import 'package:shared_preferences/shared_preferences.dart';
@ -151,17 +152,24 @@ class _OrderHistoryList extends State<OrderHistoryList>
),
onRefresh: _onRefresh,
onLoading: queryOrder,
child: ListView.builder(
itemCount: orderInfos != null ? orderInfos.length : 0,
itemBuilder: (context, position) {
return InkWell(
onTap: () {
Navigator.of(context).pushNamed('/router/order_details',
arguments: {"id": orderInfos[position].id});
},
child: orderItem(orderInfos[position]),
);
}),
child: (orderInfos != null && orderInfos.length > 0)
? ListView.builder(
itemCount: orderInfos != null ? orderInfos.length : 0,
itemBuilder: (context, position) {
return InkWell(
onTap: () {
Navigator.of(context).pushNamed('/router/order_details',
arguments: {"id": orderInfos[position].id});
},
child: orderItem(orderInfos[position]),
);
})
: NoDataView(
isShowBtn: false,
text: "还没有订单,快去下一单吧~",
fontSize: 16.sp,
margin: EdgeInsets.only(top: 120),
),
);
}
@ -440,8 +448,7 @@ class _OrderHistoryList extends State<OrderHistoryList>
orderInfo.isTakeOut,
orderInfo.sendStatus,
orderInfo.refundStatus,
orderInfo.dayFlowCode
)
orderInfo.dayFlowCode)
: [],
),
],
@ -544,8 +551,8 @@ class _OrderHistoryList extends State<OrderHistoryList>
return statusText;
}
List<Widget> statusBtn(
payStatus, orderStatus, isTakeOut, sendStatus, refundStatus, dayFlowCode) {
List<Widget> statusBtn(payStatus, orderStatus, isTakeOut, sendStatus,
refundStatus, dayFlowCode) {
if (refundStatus == 1) {
return [
RoundButton(

4
lib/retrofit/retrofit_api.dart

@ -218,8 +218,8 @@ abstract class ApiService {
Future<BaseData> informationList(@Body() Map<String, dynamic> param);
///
@POST("/information/{id}")
Future<BaseData> informationInfo(@Body() Map<String, dynamic> param);
@GET("/information/{id}")
Future<BaseData> informationInfo(@Path("id") String id);
///
@GET("/creditOrder/receive/{id}")

10
lib/retrofit/retrofit_api.g.dart

@ -466,17 +466,15 @@ class _ApiService implements ApiService {
}
@override
Future<BaseData> informationInfo(param) async {
ArgumentError.checkNotNull(param, 'param');
Future<BaseData> informationInfo(id) async {
ArgumentError.checkNotNull(id, 'id');
const _extra = <String, dynamic>{};
final queryParameters = <String, dynamic>{};
final _data = <String, dynamic>{};
_data.addAll(param ?? <String, dynamic>{});
final _result = await _dio.request<Map<String, dynamic>>(
'/information/{id}',
final _result = await _dio.request<Map<String, dynamic>>('/information/$id',
queryParameters: queryParameters,
options: RequestOptions(
method: 'POST',
method: 'GET',
headers: <String, dynamic>{},
extra: _extra,
baseUrl: baseUrl),

53
lib/union/store_details_page.dart

@ -1,11 +1,17 @@
import 'package:dio/dio.dart';
import 'package:flutter/material.dart';
import 'package:flutter_html/flutter_html.dart';
import 'package:flutter_html/image_render.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:huixiang/retrofit/data/activity.dart';
import 'package:huixiang/retrofit/data/article.dart';
import 'package:huixiang/retrofit/data/base_data.dart';
import 'package:huixiang/retrofit/retrofit_api.dart';
import 'package:huixiang/view_widget/custom_image.dart';
import 'package:huixiang/view_widget/my_appbar.dart';
import 'package:share/share.dart';
import 'package:shared_preferences/shared_preferences.dart';
class StoreDetailsPage extends StatefulWidget {
final Map<String, dynamic> arguments;
@ -20,6 +26,36 @@ class StoreDetailsPage extends StatefulWidget {
class _StoreDetailsPage extends State<StoreDetailsPage> {
ApiService apiService;
@override
void initState() {
super.initState();
SharedPreferences.getInstance().then((value) {
apiService = ApiService(Dio(), context: context, token: value.getString("token"));
queryHtml();
});
}
Activity activity;
Article article;
queryHtml() async {
BaseData baseData = await apiService.informationInfo(widget.arguments["activityId"] ?? widget.arguments["articleId"]);
if(baseData != null && baseData.isSuccess) {
if (widget.arguments.containsKey("activityId")) {
activity = Activity.fromJson(baseData.data);
} else if (widget.arguments.containsKey("articleId")) {
article = Article.fromJson(baseData.data);
}
setState(() {});
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
@ -28,7 +64,8 @@ class _StoreDetailsPage extends State<StoreDetailsPage> {
margin: EdgeInsets.only(right: 15),
child: GestureDetector(
onTap: () {
// Share.share('https://www.sohu.com/a/346415345_99912465');
Share.share('http://share-app.api.lotus-wallet.com/#/share?id=${widget.arguments["activityId"] ?? widget.arguments["articleId"]}');
},
child: Icon(
Icons.share,
@ -39,7 +76,7 @@ class _StoreDetailsPage extends State<StoreDetailsPage> {
),
background: Color(0xFFF7F7F7),
leadingColor: Colors.black,
title: widget.arguments["title"],
title: activity != null ? activity.mainTitle : article != null ? article.mainTitle : "",
titleSize: 18.sp,
titleColor: Colors.black,
),
@ -52,7 +89,7 @@ class _StoreDetailsPage extends State<StoreDetailsPage> {
padding: EdgeInsets.all(12),
alignment: Alignment.centerLeft,
child: Text(
widget.arguments["title"],
activity != null ? activity.mainTitle : article != null ? article.mainTitle : "",
style: TextStyle(
fontSize: 16,
fontWeight: FontWeight.bold,
@ -66,7 +103,7 @@ class _StoreDetailsPage extends State<StoreDetailsPage> {
children: [
InkWell(
child: Text(
"${widget.arguments["author"]}",
"${activity != null ? activity.storeName : (article != null && article.author != null) ? article.author.name : ""}",
style: TextStyle(
fontWeight: FontWeight.normal,
fontSize: 14.sp,
@ -74,9 +111,9 @@ class _StoreDetailsPage extends State<StoreDetailsPage> {
),
),
onTap: () {
if(widget.arguments.containsKey("storeId")) {
if(activity != null) {
Navigator.of(context).pushNamed('/router/union_detail_page',
arguments: {"id": widget.arguments["storeId"]});
arguments: {"id": activity.storeId});
}
},
),
@ -84,7 +121,7 @@ class _StoreDetailsPage extends State<StoreDetailsPage> {
width: 10,
),
Text(
widget.arguments["time"],
activity != null ? activity.createTime : article != null ? article.createTime : "",
style: TextStyle(
fontWeight: FontWeight.normal,
fontSize: 12.sp,
@ -95,7 +132,7 @@ class _StoreDetailsPage extends State<StoreDetailsPage> {
),
),
Html(
data: widget.arguments['html'],
data: activity != null ? activity.content : article != null ? article.content : "",
customImageRenders: {
base64DataUriMatcher(): base64ImageRender(),
assetUriMatcher(): assetImageRender(),

5
lib/union/union_details_page.dart

@ -723,10 +723,7 @@ class _UnionDetailsPage extends State<UnionDetailsPage> {
onTap: () {
Navigator.of(context)
.pushNamed('/router/store_detail_page', arguments: {
"html": activitys[position].content,
"title": activitys[position].mainTitle,
"time": activitys[position].createTime,
"author": activitys[position].storeName
"activityId": activitys[position].id
});
},
child: Container(

5
lib/view_widget/hot_item.dart

@ -16,10 +16,7 @@ class HotArticleItem extends StatelessWidget {
onTap: () {
Navigator.of(context)
.pushNamed('/router/store_detail_page', arguments: {
"html": article.content,
"title": article.mainTitle,
"author": article.author.name,
"time": article.createTime,
"articleId": article.id
});
},
child: hotItem(context),

3
pubspec.yaml

@ -41,7 +41,8 @@ dependencies:
permission_handler: ^5.0.1+1
amap_flutter_map: ^1.0.0
amap_flutter_location: ^2.0.0 # Null safety
share: ^0.6.1+1
share_plus: ^2.1.4
sharesdk_plugin: ^1.3.0
# flutter_baidu_mapapi_search: ^2.0.1
# flutter_baidu_mapapi_map: ^2.0.1

Loading…
Cancel
Save