提交 5e74cffd authored 作者: 岳维路's avatar 岳维路

合并分支 'test' 到 'sim'

Test 查看合并请求 kiwitap/zijing-app!15
assets/images/2.0x/zijing_icon.png

22.5 KB | W: | H:

assets/images/2.0x/zijing_icon.png

13.8 KB | W: | H:

assets/images/2.0x/zijing_icon.png
assets/images/2.0x/zijing_icon.png
assets/images/2.0x/zijing_icon.png
assets/images/2.0x/zijing_icon.png
  • 2-up
  • Swipe
  • Onion skin
assets/images/3.0x/zijing_icon.png

44.1 KB | W: | H:

assets/images/3.0x/zijing_icon.png

26.6 KB | W: | H:

assets/images/3.0x/zijing_icon.png
assets/images/3.0x/zijing_icon.png
assets/images/3.0x/zijing_icon.png
assets/images/3.0x/zijing_icon.png
  • 2-up
  • Swipe
  • Onion skin
assets/images/zijing_icon.png

8.6 KB | W: | H:

assets/images/zijing_icon.png

7.4 KB | W: | H:

assets/images/zijing_icon.png
assets/images/zijing_icon.png
assets/images/zijing_icon.png
assets/images/zijing_icon.png
  • 2-up
  • Swipe
  • Onion skin
......@@ -174,5 +174,32 @@ abstract class CommonAPI {
return OssModel.fromJson(result.data);
}
static Future<String?> refreshToken() async {
Console.log('--------refreshToken----------------');
final result = await HttpService.to.post(
'/v1/members/login/getToken',
params: {
'access_token':StorageService.to.getString(kLocalAccessToken)
}
);
if (result.data is Map) {
final String token = result.data['token'];
final String accessToken = result.data['access_token'];
if(token.isEmpty && accessToken.isEmpty){
UserStore.to.logout();
return null;
}
await Future.wait([
UserStore.to.setToken(result.data['token']),
UserStore.to.setAccessToken(result.data['access_token']),
]);
return result.data['token'];
}
// 在这里执行刷新token的逻辑
// 如果刷新成功,返回新的token;如果刷新失败,返回null
return null;
}
}
\ No newline at end of file
......@@ -8,6 +8,8 @@ import 'package:device_info_plus/device_info_plus.dart';
import '../models/index.dart';
import '../services/index.dart';
import '../store/index.dart';
import '../utils/index.dart';
part 'account.dart';
part 'mine.dart';
part 'course.dart';
......
......@@ -357,6 +357,7 @@ class NoteModel {
this.color,
this.chapterName,
this.isMy,
this.isOpen,
});
NoteModel.fromJson(dynamic json) {
......@@ -372,10 +373,12 @@ class NoteModel {
color = json['color'];
chapterName = json['chapter_name'];
isMy = json['is_my'];
isOpen = json['is_open'];
}
num? notesId;
num? types;
num? isMy;
num? isOpen;
num? chapterId;
String? content;
String? positioning;
......@@ -388,6 +391,7 @@ class NoteModel {
num? notesId,
num? types,
num? isMy,
num? isOpen,
num? chapterId,
String? content,
String? positioning,
......@@ -399,6 +403,7 @@ class NoteModel {
notesId: notesId ?? this.notesId,
types: types ?? this.types,
isMy: isMy ?? this.isMy,
isOpen: isOpen ?? this.isOpen,
chapterId: chapterId ?? this.chapterId,
content: content ?? this.content,
positioning: positioning ?? this.positioning,
......@@ -412,6 +417,7 @@ class NoteModel {
map['notes_id'] = notesId;
map['types'] = types;
map['is_my'] = isMy;
map['is_open'] = isOpen;
map['chapter_id'] = chapterId;
map['content'] = content;
map['positioning'] = positioning;
......
......@@ -22,8 +22,11 @@ class _BaiKePageState extends State<BaiDictPage> {
),
body: InAppWebView(
initialUrlRequest: URLRequest(
// url: Uri.parse('https://hanyu.baidu.com/hanyu-page/zici/s?from=aladdin&query=${widget.keyword}&srcid=51368&wd=${widget.keyword}&ptype=zici'),
url: WebUri.uri(Uri.parse('https://hanyu.baidu.com/hanyu-page/zici/s?from=aladdin&query=${widget.keyword}&srcid=51368&wd=${widget.keyword}&ptype=zici'))
url: WebUri.uri(Uri.parse('https://dict.baidu.com/s?wd=${widget.keyword}'))
),
initialSettings:InAppWebViewSettings(
// http的请求也不做限制
mixedContentMode:MixedContentMode.MIXED_CONTENT_ALWAYS_ALLOW
),
),
);
......
......@@ -24,6 +24,10 @@ class _BaiKePageState extends State<BaiKePage> {
// url: Uri.parse('https://baike.baidu.com/item/${widget.keyword}?fromModule=lemma_search-box'),
url: WebUri.uri(Uri.parse('https://baike.baidu.com/item/${widget.keyword}?fromModule=lemma_search-box'))
),
initialSettings:InAppWebViewSettings(
// http的请求也不做限制
mixedContentMode:MixedContentMode.MIXED_CONTENT_ALWAYS_ALLOW
),
),
);
}
......
......@@ -20,200 +20,243 @@ class _BookDetailPageState extends State<BookDetailPage> with SingleTickerProvid
Widget build(BuildContext context) {
return GetBuilder<BookDetailController>(
init:BookDetailController(widget.bookId),
builder: (controller)=> WillPopScope(
onWillPop: () async {
context.pop(true);
return false;
},
child: Scaffold(
appBar: CustomAppBar(
backgroundColor: const Color(0xFFAB1941).withOpacity(0.02),
title: const Text('详情',style: TextStyle(fontSize: 17),),
actions: [
CustomButton.icon(
padding: EdgeInsets.zero,
backgroundColor: Colors.transparent,
icon: Image.asset('assets/images/shop.png'),
onPressed: () => context.pushNamed(Routes.shop),
),
CustomButton.icon(
padding: EdgeInsets.zero,
backgroundColor: Colors.transparent,
icon: Image.asset(
controller.bookDetails.isCollection == 0? 'assets/images/unlove.png':'assets/images/love.png',
),
onPressed: () {
controller.love(bookId: controller.bookDetails.bookId.toString(), isCollection: controller.bookDetails.isCollection!);
},
),
],
),
body:
Column(
children: [
BuildBook(model: controller.bookDetails,),
Container(
height: 10.w,
color: const Color(0xFFF9F9F9),
),
BuildStudy(model:controller.bookDetails,),
Container(
height: 2,
color: const Color(0xFFF9F9F9),
),
Container(
color: Colors.white,
child: TabBar(
labelColor: AppTheme.primary,
// isScrollable: true,
labelStyle: TextStyle(fontSize: 15.w,height: 1.4,fontWeight: Fonts.boldSemi),
unselectedLabelColor: Colours.c9,
unselectedLabelStyle: TextStyle(fontSize: 15.w,height: 1.4),
indicatorSize: TabBarIndicatorSize.label,
indicatorColor: AppTheme.primary,
tabs:controller.tabs,
physics: const NeverScrollableScrollPhysics(),
controller: controller.tabController,
),
),
Container(
height: 1.w,
color: const Color(0xFFF9F9F9),
builder: (controller)=> Scaffold(
appBar: CustomAppBar(
backgroundColor: const Color(0xFFAB1941).withOpacity(0.02),
title: const Text('详情',style: TextStyle(fontSize: 17),),
actions: [
CustomButton.icon(
padding: EdgeInsets.zero,
backgroundColor: Colors.transparent,
icon: Image.asset('assets/images/shop.png'),
onPressed: () => context.pushNamed(Routes.shop),
),
CustomButton.icon(
padding: EdgeInsets.zero,
backgroundColor: Colors.transparent,
icon: Image.asset(
controller.bookDetails.isCollection == 0? 'assets/images/unlove.png':'assets/images/love.png',
),
Container(
height: 8.w,
color: Colors.transparent,
onPressed: () {
controller.love(bookId: controller.bookDetails.bookId.toString(), isCollection: controller.bookDetails.isCollection!);
},
),
],
),
body:
Column(
children: [
BuildBook(model: controller.bookDetails,),
Container(
height: 10.w,
color: const Color(0xFFF9F9F9),
),
BuildStudy(model:controller.bookDetails,),
Container(
height: 2,
color: const Color(0xFFF9F9F9),
),
Container(
color: Colors.white,
child: TabBar(
labelColor: AppTheme.primary,
// isScrollable: true,
labelStyle: TextStyle(fontSize: 15.w,height: 1.4,fontWeight: Fonts.boldSemi),
unselectedLabelColor: Colours.c9,
unselectedLabelStyle: TextStyle(fontSize: 15.w,height: 1.4),
indicatorSize: TabBarIndicatorSize.label,
indicatorColor: AppTheme.primary,
tabs:controller.tabs,
physics: const NeverScrollableScrollPhysics(),
controller: controller.tabController,
),
Expanded(
child: TabBarView(
controller: controller.tabController,
physics: const NeverScrollableScrollPhysics(),
children: [
BookCategoryPage(
chapters: controller.chapters,
bookId: controller.bookId,
bookDetails: controller.bookDetails,
onTap: (ChapterModel chapterModel) async{
if(controller.bookDetails.isFree == 0 && controller.bookDetails.isHave ==0 && chapterModel.isReading ==0){
List<CourseModel> buy = [];
CourseModel model= CourseModel(
bookId: controller.bookDetails.bookId,
price: controller.bookDetails.price,
vipPrice: controller.bookDetails.vipPrice,
img: controller.bookDetails.img,
bookName: controller.bookDetails.bookName,
cartId: 0,
status: 1,
selected: true
);
buy.add(model);
),
Container(
height: 1.w,
color: const Color(0xFFF9F9F9),
),
Container(
height: 8.w,
color: Colors.transparent,
),
Expanded(
child: TabBarView(
controller: controller.tabController,
physics: const NeverScrollableScrollPhysics(),
children: [
BookCategoryPage(
chapters: controller.chapters,
bookId: controller.bookId,
bookDetails: controller.bookDetails,
onTap: (ChapterModel chapterModel) async{
if(controller.bookDetails.isFree == 0 && controller.bookDetails.isHave ==0 && chapterModel.isReading ==0){
List<CourseModel> buy = [];
CourseModel model= CourseModel(
bookId: controller.bookDetails.bookId,
price: controller.bookDetails.price,
vipPrice: controller.bookDetails.vipPrice,
img: controller.bookDetails.img,
bookName: controller.bookDetails.bookName,
cartId: 0,
status: 1,
selected: true
);
buy.add(model);
final result = await context.pushNamed(Routes.bookPay,extra: buy);
if (result == true) {
controller.getBookDetails();
}
}else{
final PopBackModel? backModel = await context.pushNamed(Routes.web,queryParameters: {'book_id': controller.bookDetails.bookId.toString(),'chapter_id': chapterModel.id.toString(),'chapter_name':chapterModel.name.toString(),'note_id':'0'},extra: controller.bookDetails);
if (backModel!.back == true){
controller.getChapters();
// controller.setCurrentReadChapterId(backModel!.chapterId);
controller.currentChapterId = int.parse(backModel!.chapterId);
controller.getBookDetails();
}
context.pushNamed(Routes.bookPay,extra: buy).then((value) {
controller.getBookDetails();
});
}else{
final PopBackModel? backModel = await context.pushNamed(Routes.web,queryParameters: {'book_id': controller.bookDetails.bookId.toString(),'chapter_id': chapterModel.id.toString(),'chapter_name':chapterModel.name.toString(),'note_id':'0'},extra: controller.bookDetails);
if (backModel!.back == true){
controller.getChapters();
// controller.setCurrentReadChapterId(backModel!.chapterId);
controller.currentChapterId = int.parse(backModel!.chapterId);
controller.getBookDetails();
}
},
}
},
),
SingleChildScrollView(
child: Container(
padding: EdgeInsets.only(left: 15.w,right: 15.w,top:12.w),
color: Colors.white,
child: Text(controller.bookDetails.introduction??'',style: const TextStyle(fontSize: 15,height: 2.1,color: Colours.c9),),
),
SingleChildScrollView(
child: Container(
padding: EdgeInsets.only(left: 15.w,right: 15.w,top:12.w),
color: Colors.white,
child: Text(controller.bookDetails.introduction??'',style: const TextStyle(fontSize: 15,height: 2.1,color: Colours.c9),),
),
),
InAppWebView(
contextMenu: ContextMenu(
options: ContextMenuOptions(hideDefaultSystemContextMenuItems: true),
),
InAppWebView(
contextMenu: ContextMenu(
options: ContextMenuOptions(hideDefaultSystemContextMenuItems: true),
),
onWebViewCreated: (InAppWebViewController wcontroller){
onWebViewCreated: (InAppWebViewController wcontroller){
wcontroller.loadData(data: """
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" />
<meta http-equiv="Cache-Control" content="no-transform" />
<meta http-equiv="Cache-Control" content="no-siteapp" />
<style>
*{ margin: 0px; padding: 5px; font-size:16px}
html{ font-size: 10px;}
body{ padding:0px}
body p{ font-size: 1.5rem; line-height:2.4rem;color: #999}
img,video,pre,code{ max-width:100%}
pre{white-space: pre-wrap;word-wrap: break-word;word-break: break-all}
hr{background-color: var(--w-e-textarea-border-color); border: 0; display: block; height: 1px}
table, td {border: 1px solid #ccc;border-collapse: collapse;}
ol, ol li{margin:10px}
ul, ul li{margin:10px}
</style>
</head>
<body>
${controller.bookDetails.content}
</body>
</html>
""",);
},
),
BookInfoPage(model:controller.bookDetails,)
],
),
wcontroller.loadData(data: """
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" />
<meta http-equiv="Cache-Control" content="no-transform" />
<meta http-equiv="Cache-Control" content="no-siteapp" />
<style>
*{ margin: 0px; padding: 5px; font-size:16px}
html{ font-size: 10px;}
body{ padding:0px;color: #999}
body p{ font-size: 1.5rem; line-height:2.4rem;color: #999}
img,video,pre,code{ max-width:100%}
pre{white-space: pre-wrap;word-wrap: break-word;word-break: break-all}
hr{background-color: var(--w-e-textarea-border-color); border: 0; display: block; height: 1px}
table, td {border: 1px solid #ccc;border-collapse: collapse;}
ol, ol li{margin:10px}
ul, ul li{margin:10px}
</style>
</head>
<body>
${controller.bookDetails.content}
</body>
</html>
""",);
},
),
BookInfoPage(model:controller.bookDetails,)
],
),
),
],
),
bottomNavigationBar: SafeArea(
child: Container(
color: Colors.white,
padding: EdgeInsets.symmetric(horizontal: 15.w,vertical: 10.w),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: [
Expanded(
child: GestureDetector(
onTap: (){
if(controller.bookDetails.isHave ==1 || controller.bookDetails.isFree == 1){
context.pushNamed(Routes.studyReport,queryParameters: {'book_id':widget.bookId});
}
else{
controller.addCart(widget.bookId);
}
},
child: Container(
alignment: Alignment.center,
height: 35,
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(17.5.w),
border:Border.all(
width: 0.5,
color: Colours.c9
),
// color: Colours.cE0.withOpacity(0.5),
],
),
bottomNavigationBar: SafeArea(
child: Container(
color: Colors.white,
padding: EdgeInsets.symmetric(horizontal: 15.w,vertical: 10.w),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: [
Expanded(
child: GestureDetector(
onTap: (){
if(controller.bookDetails.isHave ==1 || controller.bookDetails.isFree == 1){
context.pushNamed(Routes.studyReport,queryParameters: {'book_id':widget.bookId});
}
else{
controller.addCart(widget.bookId);
}
},
child: Container(
alignment: Alignment.center,
height: 35,
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(17.5.w),
border:Border.all(
width: 0.5,
color: Colours.c9
),
// padding: EdgeInsets.symmetric(vertical: 8),
child: controller.bookDetails.isHave ==1 || controller.bookDetails.isFree == 1? Text('学习报告',style: TextStyle(fontSize: 13.w,color: Colours.c9,height: 1.5),):Text('加入书架',style: TextStyle(fontSize: 13.w,color: AppTheme.primary,height: 1.5),),
// color: Colours.cE0.withOpacity(0.5),
),
// padding: EdgeInsets.symmetric(vertical: 8),
child: controller.bookDetails.isHave ==1 || controller.bookDetails.isFree == 1? Text('学习报告',style: TextStyle(fontSize: 13.w,color: Colours.c9,height: 1.5),):Text('加入书架',style: TextStyle(fontSize: 13.w,color: AppTheme.primary,height: 1.5),),
),
),
Gaps.hGaps10,
Expanded(
child: GestureDetector(
onTap: () async{
),
Gaps.hGaps10,
Expanded(
child: GestureDetector(
onTap: () async{
// 1免费 0 不免费
if(controller.bookDetails.isFree == 1){
final String chapterId = await controller.getCurrentChapterId();
final String chapterName = await controller.getCurrentChapterName();
final PopBackModel? backModel = await context.pushNamed(Routes.web,queryParameters: {'book_id': controller.bookDetails.bookId.toString(),'chapter_id': chapterId,'chapter_name':chapterName,'note_id':'0'},extra: controller.bookDetails);
if (backModel!.back == true){
controller.getChapters();
controller.currentChapterId = int.parse(backModel!.chapterId);
controller.getBookDetails();
// controller.setCurrentReadChapterId(backModel!.chapterId);
}
}
else {
// 没有购买
if (controller.bookDetails.isHave ==0){
// 没有试读
if (controller.bookDetails.readChapterId ==0){
List<CourseModel> buy = [];
CourseModel model= CourseModel(
bookId: controller.bookDetails.bookId,
price: controller.bookDetails.price,
vipPrice: controller.bookDetails.vipPrice,
img: controller.bookDetails.img,
bookName: controller.bookDetails.bookName,
cartId: 0,
status: 1,
selected: true
);
buy.add(model);
context.pushNamed(Routes.bookPay,extra: buy).then((value){
controller.getBookDetails();
});
}
else{
final String chapterId = await controller.getCurrentChapterId();
final String chapterName = await controller.getCurrentChapterName();
final PopBackModel? backModel = await context.pushNamed(Routes.web,queryParameters: {'book_id': controller.bookDetails.bookId.toString(),'chapter_id': chapterId,'chapter_name':chapterName,'note_id':'0'},extra: controller.bookDetails);
if (backModel!.back == true){
controller.getChapters();
controller.getBookDetails();
controller.currentChapterId = int.parse(backModel!.chapterId);
// controller.setCurrentReadChapterId(backModel!.chapterId);
}
}
}
else{
// 1免费 0 不免费
if(controller.bookDetails.isFree == 1){
final String chapterId = await controller.getCurrentChapterId();
final String chapterName = await controller.getCurrentChapterName();
final PopBackModel? backModel = await context.pushNamed(Routes.web,queryParameters: {'book_id': controller.bookDetails.bookId.toString(),'chapter_id': chapterId,'chapter_name':chapterName,'note_id':'0'},extra: controller.bookDetails);
if (backModel!.back == true){
controller.getChapters();
......@@ -221,72 +264,23 @@ class _BookDetailPageState extends State<BookDetailPage> with SingleTickerProvid
controller.getBookDetails();
// controller.setCurrentReadChapterId(backModel!.chapterId);
}
}
else {
// 没有购买
if (controller.bookDetails.isHave ==0){
// 没有试读
if (controller.bookDetails.readChapterId ==0){
List<CourseModel> buy = [];
CourseModel model= CourseModel(
bookId: controller.bookDetails.bookId,
price: controller.bookDetails.price,
vipPrice: controller.bookDetails.vipPrice,
img: controller.bookDetails.img,
bookName: controller.bookDetails.bookName,
cartId: 0,
status: 1,
selected: true
);
buy.add(model);
final result = await context.pushNamed(Routes.bookPay,extra: buy);
if (result == true) {
controller.getBookDetails();
}
}
else{
final String chapterId = await controller.getCurrentChapterId();
final String chapterName = await controller.getCurrentChapterName();
final PopBackModel? backModel = await context.pushNamed(Routes.web,queryParameters: {'book_id': controller.bookDetails.bookId.toString(),'chapter_id': chapterId,'chapter_name':chapterName,'note_id':'0'},extra: controller.bookDetails);
if (backModel!.back == true){
controller.getChapters();
controller.getBookDetails();
controller.currentChapterId = int.parse(backModel!.chapterId);
// controller.setCurrentReadChapterId(backModel!.chapterId);
}
}
}
else{
final String chapterId = await controller.getCurrentChapterId();
final String chapterName = await controller.getCurrentChapterName();
final PopBackModel? backModel = await context.pushNamed(Routes.web,queryParameters: {'book_id': controller.bookDetails.bookId.toString(),'chapter_id': chapterId,'chapter_name':chapterName,'note_id':'0'},extra: controller.bookDetails);
if (backModel!.back == true){
controller.getChapters();
controller.currentChapterId = int.parse(backModel!.chapterId);
controller.getBookDetails();
// controller.setCurrentReadChapterId(backModel!.chapterId);
}
}
}
},
child: Container(
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(17.5.w),
color: AppTheme.primary.withOpacity(0.1)
),
height: 35.w,
alignment: Alignment.center,
padding: EdgeInsets.symmetric(vertical: 8.w),
child: Text('阅读',style: TextStyle(fontSize: 13.w,color: AppTheme.primary,height: 1.5,fontWeight: Fonts.boldSemi),),
}
},
child: Container(
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(17.5.w),
color: AppTheme.primary.withOpacity(0.1)
),
height: 35.w,
alignment: Alignment.center,
padding: EdgeInsets.symmetric(vertical: 8.w),
child: Text('阅读',style: TextStyle(fontSize: 13.w,color: AppTheme.primary,height: 1.5,fontWeight: Fonts.boldSemi),),
),
)
],
),
),
)
],
),
),
),
......
......@@ -15,69 +15,29 @@ class _BookPayPageState extends State<BookPayPage> {
@override
Widget build(BuildContext context) {
return WillPopScope(
onWillPop: () async {
context.pop(true);
return false;
},
child: GetBuilder<BookPayController>(
init: BookPayController(buy: widget.buy,context: context),
builder: (controller) => Stack(
children: [
Scaffold(
backgroundColor: Colours.cF9,
appBar: AppBar(title: const Text('支付'),),
body: SingleChildScrollView(
child: Column(
children: [
ListView.builder(
physics: const NeverScrollableScrollPhysics(),
shrinkWrap:true,
itemBuilder: (BuildContext context, int index){
return BuildItem(model: controller.buy![index],);
},
itemCount: controller.buy!.length,
),
controller.showModel.couponSwitch =='0' && controller.showModel.integralSwitch =='0'?const SizedBox():SizedBox(height: 10.w,),
Visibility(
visible: controller.showModel.couponSwitch =='0' && controller.showModel.integralSwitch =='0'?false:true,
child: Container(
margin: EdgeInsets.only(left: 10.w,right: 10.w),
decoration: BoxDecoration(
borderRadius:BorderRadius.circular(8.w),
color: Colors.white,
boxShadow: [
BoxShadow(
color: Colours.cC7.withOpacity(0.5),
spreadRadius: 2.w,
blurRadius: 5.w,
offset: Offset(3.w, 0), // changes the position of the shadow
),
]
),
child: Column(
children: [
controller.showModel.couponSwitch =='0'?const SizedBox():GestureDetector(
child: _buildCouponWidget(controller,title: '优惠券',icon: 'assets/images/pay_coupon.png',),
onTap: (){
context.pushNamed(Routes.payCoupon,extra: controller);
},
),
Container(height: 0.5.w,color: Colours.cF0,margin: EdgeInsets.only(left: 10.w),),
controller.showModel.integralSwitch =='0'?const SizedBox(): GestureDetector(
child: _buildPointWidget(controller,title: '积分抵扣',icon: 'assets/images/pay_point.png',),
onTap: (){
if(controller.creditPointModel.deductibleIntegral !=0){
context.pushNamed(Routes.creditPoints);
}
},
),
],
),
),
),
Container(
margin: EdgeInsets.only(left: 10.w,right: 10.w,top: 10.w),
return GetBuilder<BookPayController>(
init: BookPayController(buy: widget.buy,context: context),
builder: (controller) => Stack(
children: [
Scaffold(
backgroundColor: Colours.cF9,
appBar: AppBar(title: const Text('支付'),),
body: SingleChildScrollView(
child: Column(
children: [
ListView.builder(
physics: const NeverScrollableScrollPhysics(),
shrinkWrap:true,
itemBuilder: (BuildContext context, int index){
return BuildItem(model: controller.buy![index],);
},
itemCount: controller.buy!.length,
),
controller.showModel.couponSwitch =='0' && controller.showModel.integralSwitch =='0'?const SizedBox():SizedBox(height: 10.w,),
Visibility(
visible: controller.showModel.couponSwitch =='0' && controller.showModel.integralSwitch =='0'?false:true,
child: Container(
margin: EdgeInsets.only(left: 10.w,right: 10.w),
decoration: BoxDecoration(
borderRadius:BorderRadius.circular(8.w),
color: Colors.white,
......@@ -86,71 +46,105 @@ class _BookPayPageState extends State<BookPayPage> {
color: Colours.cC7.withOpacity(0.5),
spreadRadius: 2.w,
blurRadius: 5.w,
offset: const Offset(3, 0), // changes the position of the shadow
offset: Offset(3.w, 0), // changes the position of the shadow
),
]
),
child: ListView.builder(
physics: const NeverScrollableScrollPhysics(),
padding: const EdgeInsets.symmetric(horizontal: 10),
shrinkWrap:true,
itemBuilder: (BuildContext context, int index){
PayModel model = controller.pays[index];
return GestureDetector(
onTap: (){
controller.setPayModel(model);
},
child: BuildPayWay(model:model,controller: controller,));
},
itemCount: controller.pays.length,
child: Column(
children: [
controller.showModel.couponSwitch =='0'?const SizedBox():GestureDetector(
child: _buildCouponWidget(controller,title: '优惠券',icon: 'assets/images/pay_coupon.png',),
onTap: (){
context.pushNamed(Routes.payCoupon,extra: controller);
},
),
Container(height: 0.5.w,color: Colours.cF0,margin: EdgeInsets.only(left: 10.w),),
controller.showModel.integralSwitch =='0'?const SizedBox(): GestureDetector(
child: _buildPointWidget(controller,title: '积分抵扣',icon: 'assets/images/pay_point.png',),
onTap: (){
if(controller.creditPointModel.deductibleIntegral !=0){
context.pushNamed(Routes.creditPoints);
}
},
),
],
),
),
],
),
),
Container(
margin: EdgeInsets.only(left: 10.w,right: 10.w,top: 10.w),
decoration: BoxDecoration(
borderRadius:BorderRadius.circular(8.w),
color: Colors.white,
boxShadow: [
BoxShadow(
color: Colours.cC7.withOpacity(0.5),
spreadRadius: 2.w,
blurRadius: 5.w,
offset: const Offset(3, 0), // changes the position of the shadow
),
]
),
child: ListView.builder(
physics: const NeverScrollableScrollPhysics(),
padding: const EdgeInsets.symmetric(horizontal: 10),
shrinkWrap:true,
itemBuilder: (BuildContext context, int index){
PayModel model = controller.pays[index];
return GestureDetector(
onTap: (){
controller.setPayModel(model);
},
child: BuildPayWay(model:model,controller: controller,));
},
itemCount: controller.pays.length,
),
),
],
),
bottomNavigationBar: SafeArea(
bottom: false,
child:BuildPayCount(
payTap: (){
Console.log('--------------支付------------------');
controller.createOrder();
},
showTap: (){
controller.show();
Console.log('--------------展示优惠详情------------------');
}, controller: controller,
)),
),
controller.showDetail?Positioned(
left: 0.w,
bottom: 50.w,
right: 0.w,
top: 0.w,
child: SafeArea(
child: GestureDetector(
onTap: (){
controller.show();
bottomNavigationBar: SafeArea(
bottom: false,
child:BuildPayCount(
payTap: (){
Console.log('--------------支付------------------');
controller.createOrder();
},
child: Container(
color:const Color(0xFF000000).withOpacity(0.5),
child: Align(
alignment: Alignment.bottomCenter,
child: ClipRRect(
borderRadius: BorderRadius.only(topRight: Radius.circular(8.w),topLeft: Radius.circular(8.w)),
child: Container(
height: 210.w,
color: Colors.white,
child: _buildPayDetail(controller),
),
showTap: (){
controller.show();
Console.log('--------------展示优惠详情------------------');
}, controller: controller,
)),
),
controller.showDetail?Positioned(
left: 0.w,
bottom: 50.w,
right: 0.w,
top: 0.w,
child: SafeArea(
child: GestureDetector(
onTap: (){
controller.show();
},
child: Container(
color:const Color(0xFF000000).withOpacity(0.5),
child: Align(
alignment: Alignment.bottomCenter,
child: ClipRRect(
borderRadius: BorderRadius.only(topRight: Radius.circular(8.w),topLeft: Radius.circular(8.w)),
child: Container(
height: 210.w,
color: Colors.white,
child: _buildPayDetail(controller),
),
),
),
),
),
):const SizedBox()
],
)
),
),
):const SizedBox()
],
)
);
}
......
......@@ -52,10 +52,9 @@ class BuildCounter extends StatelessWidget {
GestureDetector(
onTap: () async {
if (controller.num > 0){
final result = await context.pushNamed(Routes.bookPay,extra: controller.buy);
if (result == true) {
context.pushNamed(Routes.bookPay,extra: controller.buy).then((value){
controller.onRefresh();
}
});
}
},
child: Container(
......
......@@ -115,7 +115,7 @@ class _ChangePwdPageState extends State<ChangePwdPage> {
),
Container(
margin: EdgeInsets.only(left: 5.w,top: 5.w),
child: Text('密码必须是8-20个英文字母、数字或符号(除空格)',style: TextStyle(fontSize: 10.w,color: Colours.c9),),
child: Text('密码必须是数字、字母、特殊符号两种及以上8-12位的组合',style: TextStyle(fontSize: 10.w,color: Colours.c9),),
),
Gaps.vGaps40,
CustomGradientButton(
......
......@@ -38,10 +38,9 @@ class _CoursePageState extends State<CoursePage> {
),
GestureDetector(
onTap: () async{
final result = await context.pushNamed(Routes.msgs);
if (result == true) {
context.pushNamed(Routes.msgs).then((value){
controller.getNums();
}
});
},
child: badges.Badge(
position: badges.BadgePosition.topEnd(top: -5.w, end: 0),
......@@ -112,10 +111,9 @@ class _CoursePageState extends State<CoursePage> {
onTapContinue: () async{
BookDetailModel bookDetails = await controller.getBookDetails(model.bookId.toString());
if(context.mounted){
final result = await context.pushNamed(Routes.web,queryParameters: {'book_id': bookDetails.bookId.toString(),'chapter_id': bookDetails.chapterId.toString(),'chapter_name':bookDetails.chapterName.toString()},extra:bookDetails);
if (result == true){
context.pushNamed(Routes.web,queryParameters: {'book_id': bookDetails.bookId.toString(),'chapter_id': bookDetails.chapterId.toString(),'chapter_name':bookDetails.chapterName.toString()},extra:bookDetails).then((value){
controller.getNums();
}
});
}
},
),
......
......@@ -7,148 +7,142 @@ class CreditPointsPage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return WillPopScope(
onWillPop: () async {
context.pop('111111');
return false;
},
child: GetBuilder<BookPayController>(
init: BookPayController(buy: [],context: context),
builder:(controller)=> Scaffold(
extendBodyBehindAppBar: true,
appBar: AppBar(
centerTitle: true,
title: const Text('积分'),
backgroundColor: Colors.transparent,
),
body:Stack(
children: [
Image.asset(
'assets/images/point_bg.png',
fit: BoxFit.contain,
width: double.infinity,
),
SafeArea(
top: true,
child: Column(
children: [
// 积分卡片
Container(
padding: EdgeInsets.symmetric(horizontal: 10.w),
child: Container(
padding: EdgeInsets.only(left: 17.w,top: 18.w,bottom: 24.w,right: 17.w),
decoration: BoxDecoration(
color: Colors.white.withOpacity(0.58),
borderRadius: BorderRadius.circular(8.w),
border: Border.all(width: 2.w,color: Colors.white)
),
height: 175.w,
child: Column(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text('可用积分',style: TextStyle(fontSize: 16.w,height: 1.4,fontWeight: Fonts.medium,color: Colours.c3),),
Gaps.vGaps13,
Text(controller.creditPointModel.integral.toString(),style: TextStyle(fontSize: 25.w,height: 1.4,fontWeight: Fonts.medium,color: Colours.c3),),
],
),
Row(
children: [
Expanded(
child: Container(
height: 0.5.w,
color: Colours.cE7,
),
),
Gaps.hGaps15,
Text('积分支付不能超过每笔订单的${controller.creditPointModel.integralUseLimit}%',style: TextStyle(fontSize: 12.w,height: 1.4,color: Colours.c9),),
Gaps.hGaps15,
Expanded(
child: Container(
height: 0.5.w,
color: Colours.cE7,
),
),
],
)
],
),
),
),
// 使用积分
Container(
// height: 105,
margin: EdgeInsets.symmetric(horizontal: 10.w),
padding: EdgeInsets.only(left: 20.w,right: 20.w,top: 20.w),
return GetBuilder<BookPayController>(
init: BookPayController(buy: [],context: context),
builder:(controller)=> Scaffold(
extendBodyBehindAppBar: true,
appBar: AppBar(
centerTitle: true,
title: const Text('积分'),
backgroundColor: Colors.transparent,
),
body:Stack(
children: [
Image.asset(
'assets/images/point_bg.png',
fit: BoxFit.contain,
width: double.infinity,
),
SafeArea(
top: true,
child: Column(
children: [
// 积分卡片
Container(
padding: EdgeInsets.symmetric(horizontal: 10.w),
child: Container(
padding: EdgeInsets.only(left: 17.w,top: 18.w,bottom: 24.w,right: 17.w),
decoration: BoxDecoration(
color: Colors.white,
boxShadow: [
BoxShadow(
color: Colours.cC7.withOpacity(0.5),
offset: Offset(3.w, 0.w),
blurRadius: 4.w,
spreadRadius: 0,
),
],
borderRadius: BorderRadius.circular(8.w)
color: Colors.white.withOpacity(0.58),
borderRadius: BorderRadius.circular(8.w),
border: Border.all(width: 2.w,color: Colors.white)
),
height: 175.w,
child: Column(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text('积分抵扣',style: TextStyle(fontSize: 16.w,height: 1.4,fontWeight: Fonts.medium,color: Colours.c3),),
Gaps.vGaps10,
Container(
height: 0.5.w,
color: Colours.cE7,
// color: Colors.red,
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text('可用积分',style: TextStyle(fontSize: 16.w,height: 1.4,fontWeight: Fonts.medium,color: Colours.c3),),
Gaps.vGaps13,
Text(controller.creditPointModel.integral.toString(),style: TextStyle(fontSize: 25.w,height: 1.4,fontWeight: Fonts.medium,color: Colours.c3),),
],
),
Visibility(
visible: controller.creditPointModel.deductibleIntegral ==0?false:true,
child: GestureDetector(
onTap: (){
controller.setUse();
if (controller.useCreditPoint) {
context.pop();
}
},
child: Container(
color: Colors.white,
height: 54,
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
RichText(text: TextSpan(
children: [
TextSpan(text: '抵扣',style: TextStyle(color: Colours.c9,fontSize: 13.w,height: 1.4)),
TextSpan(text: '¥${controller.creditPointModel.deductibleAmount}',style: TextStyle(color: AppTheme.primary,fontSize: 13.w,height: 1.4,fontWeight: Fonts.medium)),
TextSpan(text: '使用${controller.creditPointModel.deductibleIntegral}积分',style: TextStyle(color: Colours.c9,fontSize: 13.w,height: 1.4)),
]
)),
SizedBox(
width: 15.w,
height: 15.w,
child: Image.asset(
controller.useCreditPoint?'assets/images/check.png':'assets/images/uncheck.png',
),
)
],
Row(
children: [
Expanded(
child: Container(
height: 0.5.w,
color: Colours.cE7,
),
),
),
Gaps.hGaps15,
Text('积分支付不能超过每笔订单的${controller.creditPointModel.integralUseLimit}%',style: TextStyle(fontSize: 12.w,height: 1.4,color: Colours.c9),),
Gaps.hGaps15,
Expanded(
child: Container(
height: 0.5.w,
color: Colours.cE7,
),
),
],
)
],
),
)
],
),
),
),
// 使用积分
Container(
// height: 105,
margin: EdgeInsets.symmetric(horizontal: 10.w),
padding: EdgeInsets.only(left: 20.w,right: 20.w,top: 20.w),
decoration: BoxDecoration(
color: Colors.white,
boxShadow: [
BoxShadow(
color: Colours.cC7.withOpacity(0.5),
offset: Offset(3.w, 0.w),
blurRadius: 4.w,
spreadRadius: 0,
),
],
borderRadius: BorderRadius.circular(8.w)
),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text('积分抵扣',style: TextStyle(fontSize: 16.w,height: 1.4,fontWeight: Fonts.medium,color: Colours.c3),),
Gaps.vGaps10,
Container(
height: 0.5.w,
color: Colours.cE7,
// color: Colors.red,
),
Visibility(
visible: controller.creditPointModel.deductibleIntegral ==0?false:true,
child: GestureDetector(
onTap: (){
controller.setUse();
if (controller.useCreditPoint) {
context.pop();
}
},
child: Container(
color: Colors.white,
height: 54,
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
RichText(text: TextSpan(
children: [
TextSpan(text: '抵扣',style: TextStyle(color: Colours.c9,fontSize: 13.w,height: 1.4)),
TextSpan(text: '¥${controller.creditPointModel.deductibleAmount}',style: TextStyle(color: AppTheme.primary,fontSize: 13.w,height: 1.4,fontWeight: Fonts.medium)),
TextSpan(text: '使用${controller.creditPointModel.deductibleIntegral}积分',style: TextStyle(color: Colours.c9,fontSize: 13.w,height: 1.4)),
]
)),
SizedBox(
width: 15.w,
height: 15.w,
child: Image.asset(
controller.useCreditPoint?'assets/images/check.png':'assets/images/uncheck.png',
),
)
],
),
),
),
)
],
),
)
],
),
],
)
),
),
);
),
],
)
),
);
}
}
......@@ -89,7 +89,7 @@ class LoginController extends GetxController {
/// 测试账号
if (kDebugMode) {
phoneInput.text = '18810760819';
passwordInput.text = '12345678';
passwordInput.text = '1234567m';
// phoneInput.text = '17311837355';
// passwordInput.text = '12345678';
}
......
......@@ -67,7 +67,7 @@ class _LoginPageState extends State<LoginPage> {
SizedBox(height: 120.w,),
Container(
width: 180.w,
height: 50.w,
height: 42.w,
// color: Colors.cyan,
child: Image.asset(
'assets/images/zijing_icon.png',
......
......@@ -43,11 +43,9 @@ class _MinePageState extends State<MinePage> {
),
GestureDetector(
onTap: () async{
final result = await context.pushNamed(Routes.msgs);
print('---------------------------------1111$result');
if (result == true){
context.pushNamed(Routes.msgs).then((value) {
controller.getNums();
}
});
},
child: badges.Badge(
position: badges.BadgePosition.topEnd(top: -5.w, end: 0),
......@@ -78,20 +76,18 @@ class _MinePageState extends State<MinePage> {
Container(
margin: EdgeInsets.symmetric(horizontal: 10.w),
child: BuildUser(userInfo:controller.userInfo,onTap: () async{
final result = await context.pushNamed(Routes.userInfo,extra: controller.userInfo);
if (result == true){
context.pushNamed(Routes.userInfo,extra: controller.userInfo).then((value){
controller.getInfo();
}
});
},),
),
Gaps.vGaps10,
Container(
margin: EdgeInsets.symmetric(horizontal: 2.2.w),
child: BuildRead(items: controller.reads,onTap: (ReadModel model) async{
final result = await context.pushNamed(model.link??'');
if (result == true){
context.pushNamed(model.link??'').then((value){
controller.getInfo();
}
});
}),
),
controller.ads.isNotEmpty?Gaps.vGaps5:const SizedBox(),
......@@ -106,12 +102,11 @@ class _MinePageState extends State<MinePage> {
} ,
),
):const SizedBox(),
Gaps.vGaps15,
controller.ads.isNotEmpty?Gaps.vGaps15:Gaps.vGaps5,
BuildAccount(items:controller.accounts,onTap: (ReadModel model) async{
final result = await context.pushNamed(model.link??'');
if (result == true){
context.pushNamed(model.link??'').then((value){
controller.getInfo();
}
});
},),
Gaps.vGaps10,
Container(
......@@ -134,10 +129,9 @@ class _MinePageState extends State<MinePage> {
children: [
GestureDetector(
onTap:() async {
final result = await context.pushNamed(Routes.security,extra: controller.userInfo);
if (result == true){
context.pushNamed(Routes.security,extra: controller.userInfo).then((value){
controller.getInfo();
}
});
}, child: _buildItem('账户安全')
),
Container(color: Colours.cLine,margin: EdgeInsets.symmetric(horizontal: 15.w),height: 1.w,),
......
......@@ -28,6 +28,8 @@ class BuildRead extends StatelessWidget {
// top: 10.w,
left: 0,
right: 0,
top: 0,
bottom: 0,
child: Container(
padding: EdgeInsets.symmetric(vertical: 16.5.w,horizontal: 8),
color: Colors.transparent,
......@@ -50,19 +52,13 @@ class BuildRead extends StatelessWidget {
child: GestureDetector(
behavior: HitTestBehavior.opaque,
onTap: (){
if (model.link != null){
if (model.link != Routes.love){
context.pushNamed(model.link!);
}
else{
if (onTap !=null) onTap!(model);
}
}
if (onTap !=null) onTap!(model);
},
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text(model.value,style: TextStyle(fontSize: 18.w,height: 1.6.w,fontWeight: Fonts.medium,color: Colours.c3),),
Text(model.name,style: TextStyle(fontSize: 13.w,height:1.6.w,color: Colours.c6))
Text(model.value,style: TextStyle(fontSize: 18.w,height: 1.5.w,fontWeight: Fonts.medium,color: Colours.c3),),
Text(model.name,style: TextStyle(fontSize: 13.w,height:1.5.w,color: Colours.c6))
],
),
),
......
......@@ -468,8 +468,8 @@ class ReadController extends FullLifeCycleController with GetSingleTickerProvide
else if(chatType == 1){
if(contentInput.text.isEmpty && discussInputImages.isEmpty && discussInputAudios.isEmpty){
Toast.show('笔记必须填写内容或选择图片或音频');
return false;
}
return false;
}
// 有网情况下 先直传oss 获取到url
......@@ -852,7 +852,11 @@ class ReadController extends FullLifeCycleController with GetSingleTickerProvide
return directory!.path;
}
/// 刷新token
Future<String?> refreshToken() async {
final result = await CommonAPI.refreshToken();
return result;
}
/// 获取目录信息
void _getChapters() async {
chapters = await LibraryAPI.chapters(bookId: bookId);
......@@ -991,6 +995,7 @@ class ReadController extends FullLifeCycleController with GetSingleTickerProvide
// 当应用程序从后台切换到前台并变为活动状态时调用。这通常在用户从其他应用程序返回到你的应用程序时发生
void onResumed(){
Console.log('onResumed');
webViewController.evaluateJavascript(source: 'activeState("1");');
// open
// 上报开始阅读时间
_addReadTime(type: 'open');
......@@ -999,12 +1004,14 @@ class ReadController extends FullLifeCycleController with GetSingleTickerProvide
void onPaused(){
// close
Console.log('onPaused');
webViewController.evaluateJavascript(source: 'activeState("0");');
// 上报阅读结束时间
_addReadTime(type: 'close');
}
// 当应用程序失去焦点但仍然可见时调用。通常,在用户切换到另一个应用程序或显示系统对话框时,应用程序可能会处于非活动状态,但仍然是可见的
void onInactive(){
Console.log('onInactive');
webViewController.evaluateJavascript(source: 'activeState("0");');
// close
// 上报阅读结束时间
_addReadTime(type: 'close');
......@@ -1012,6 +1019,7 @@ class ReadController extends FullLifeCycleController with GetSingleTickerProvide
// 当应用程序被挂起,可能是由于用户关闭应用程序或系统资源不足时调用。在这个状态下,应用程序的代码将不再运行,并且可能被系统终止
void onDetached(){
Console.log('onDetached');
webViewController.evaluateJavascript(source: 'activeState("0");');
// close
// 上报阅读结束时间
_addReadTime(type: 'close');
......
......@@ -78,6 +78,8 @@ class _ReadPageState extends State<ReadPage> {
),
initialSettings:InAppWebViewSettings(
clearCache:true,
// http的请求也不做限制
mixedContentMode:MixedContentMode.MIXED_CONTENT_ALWAYS_ALLOW
),
// initialOptions: InAppWebViewGroupOptions(
// crossPlatform: InAppWebViewOptions(
......@@ -87,7 +89,8 @@ class _ReadPageState extends State<ReadPage> {
contextMenu: ContextMenu(
// options: ContextMenuOptions(hideDefaultSystemContextMenuItems: true),
settings: ContextMenuSettings(
hideDefaultSystemContextMenuItems: true
hideDefaultSystemContextMenuItems: true,
)
),
onWebViewCreated: (InAppWebViewController controller){
......@@ -110,18 +113,18 @@ class _ReadPageState extends State<ReadPage> {
Console.log('传给前端的参数--------------------------------$str');
controller.evaluateJavascript(source: 'callbackInFlutterComponent("$str");');
// // 添加单击事件
// controller.evaluateJavascript(source: '''
// document.addEventListener('click', function() {
// window.flutter_inappwebview.callHandler('onTap');
// });
// ''');
//
// // 监听js单击回调
// controller.addJavaScriptHandler(handlerName: 'onTap', callback: (args){
// readController.setShow(readController.show);
//
// });
// 添加单击事件
controller.evaluateJavascript(source: '''
document.addEventListener('click', function() {
window.flutter_inappwebview.callHandler('onTap');
});
''');
// 监听js单击回调
controller.addJavaScriptHandler(handlerName: 'onTap', callback: (args){
readController.setShow(readController.show);
});
// 监听笔记回调
controller.addJavaScriptHandler(handlerName: 'noteCallBack', callback: (args){
......@@ -140,7 +143,7 @@ class _ReadPageState extends State<ReadPage> {
// 监听字典回调
controller.addJavaScriptHandler(handlerName: 'dictCallBack', callback: (args){
Console.log('监听百科回调------------------------------------------------$args');
Console.log('监听字典回调------------------------------------------------$args');
context.pushNamed(Routes.baiDict,queryParameters: {'keyword':args.first});
});
......@@ -206,10 +209,10 @@ class _ReadPageState extends State<ReadPage> {
Console.log('监听 上一节 下一节------------------------------------------------$args');
});
// 监听 双击回调
controller.addJavaScriptHandler(handlerName: 'dbClickCallBack', callback: (args){
readController.setShow(readController.show);
});
// // 监听 双击回调
// controller.addJavaScriptHandler(handlerName: 'dbClickCallBack', callback: (args){
// readController.setShow(readController.show);
// });
// 阅读页内容中的 外部链接
controller.addJavaScriptHandler(handlerName: 'openLinkCallback', callback: (args){
......@@ -246,6 +249,16 @@ class _ReadPageState extends State<ReadPage> {
context.pushNamed(Routes.scaleImage,queryParameters: params);
});
// 前端 token过去回调
controller.addJavaScriptHandler(handlerName: 'refreshTokenCallback', callback: (args) async {
final result = await readController.refreshToken();
Map<String, dynamic> param = {
'token': result,
};
String jsonStr = jsonEncode(param);
controller.evaluateJavascript(source: 'refreshTokenSuccess($jsonStr)');
});
/// 离线需要参数
// //
......
......@@ -198,8 +198,13 @@ class _ReadInputDiscussState extends State<ReadInputDiscuss> {
);
widget.controller.addDiscussInputImages(assets!.path);
},
child: Image.asset('assets/images/read_add_img.png')),
Gaps.hGaps10,
child: Container(
// color: Colors.red,
width: 25,
height: 25,
child: Image.asset('assets/images/read_add_img.png',fit: BoxFit.contain,)),
),
Gaps.hGaps15,
widget.controller.chatType ==0?const SizedBox():GestureDetector(
onTap: () async {
if(widget.controller.startRecording){
......@@ -210,7 +215,12 @@ class _ReadInputDiscussState extends State<ReadInputDiscuss> {
}
},
child: Image.asset(widget.controller.startRecording?'assets/images/stop.png':'assets/images/read_add_audio.png')
child: Container(
// color: Colors.red,
width: 23,
height: 23,
child: Image.asset(widget.controller.startRecording?'assets/images/stop.png':'assets/images/read_add_audio.png',fit: BoxFit.contain,),
)
),
widget.controller.chatType ==0?const SizedBox():GestureDetector(
onTap: (){
......@@ -219,10 +229,13 @@ class _ReadInputDiscussState extends State<ReadInputDiscuss> {
child: Row(
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Gaps.hGaps10,
Image.asset(widget.controller.isPublic?'assets/images/pay_check.png':'assets/images/pay_uncheck.png'),
Gaps.hGaps15,
SizedBox(
width: 15,
height: 15,
child: Image.asset(widget.controller.isPublic?'assets/images/pay_check.png':'assets/images/public.png',fit: BoxFit.contain,),),
SizedBox(width: 3.w,),
Text('公开',style: TextStyle(fontSize: 13.w,height: 1.3,color: Colours.c9),)
Text('公开',style: TextStyle(fontSize: 15.w,height: 1.3,color: Colours.c9),)
],
),
)
......
......@@ -144,7 +144,7 @@ class _ReadNotePageState extends State<ReadNotePage> {
controller.delNotes(noteModel: model, bookId:widget.bookDetailModel.bookId.toString());
},
onTapEdit: (){
context.pushNamed(Routes.editNote,extra: model,queryParameters: {'book_id':widget.bookDetailModel.bookId});
context.pushNamed(Routes.editNote,extra: model,queryParameters: {'book_id':widget.bookDetailModel.bookId.toString()});
},
);
}
......
......@@ -68,7 +68,7 @@ class _ResetPwdPageState extends State<ResetPwdPage> {
),
Container(
margin: EdgeInsets.only(left: 5.w,top: 5.w),
child: Text('密码必须是8-20个英文字母、数字或符号(除空格)',style: TextStyle(fontSize: 10.w,color: Colours.c9),),
child: Text('密码必须是数字、字母、特殊符号两种及以上8-12位的组合',style: TextStyle(fontSize: 10.w,color: Colours.c9),),
),
Gaps.vGaps40,
CustomGradientButton(
......
......@@ -168,7 +168,7 @@ class _StudyReportPageState extends State<StudyReportPage> {
RichText(text: TextSpan(
children: [
TextSpan(text: '测评总数',style: TextStyle(fontSize: 14.w,height: 1.5,color: Colours.c9),),
WidgetSpan(child: SizedBox(width: 36.w),),
WidgetSpan(child: SizedBox(width: 21.5.w),),
TextSpan(text:controller.model.questionAllNums !=null? controller.model.questionAllNums.toString():'' ,style: TextStyle(fontSize: 21.w,height: 1.5,color: Colours.c3,fontWeight: Fonts.medium)),
TextSpan(text: '/条',style: TextStyle(fontSize: 13.w,height: 1.5,color: Colours.c3)),
]
......@@ -180,7 +180,7 @@ class _StudyReportPageState extends State<StudyReportPage> {
children: [
RichText(text: TextSpan(
children: [
TextSpan(text: '评论正确率',style: TextStyle(fontSize: 14.w,height: 1.5,color: Colours.c9),),
TextSpan(text: '测评正确率',style: TextStyle(fontSize: 14.w,height: 1.5,color: Colours.c9),),
WidgetSpan(child: SizedBox(width: 8.w),),
TextSpan(text:controller.model.questionAccuracy!=null?controller.model.questionAccuracy.toString():'' ,style: TextStyle(fontSize: 21.w,height: 1.5,color: Colours.c3,fontWeight: Fonts.medium)),
TextSpan(text: '%',style: TextStyle(fontSize: 13.w,height: 1.5,color: Colours.c3)),
......
......@@ -10,70 +10,64 @@ class UserCoinPage extends StatefulWidget {
class _UserCoinPageState extends State<UserCoinPage> {
@override
Widget build(BuildContext context) {
return WillPopScope(
onWillPop: () async {
context.pop(true);
return false;
},
child: GetBuilder<UserCoinController>(
init: UserCoinController(),
builder: (controller) => Scaffold(
appBar: CustomAppBar(
title: const Text('紫荆币'),
actions: [
GestureDetector(
onTap: (){
showModalBottomSheet(
context: context,
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.vertical(top: Radius.circular(8.w)),
),
builder: (BuildContext context) {
return const CoinRechargePage();
},
).then((value) {
controller.onRefresh();
});
},
child: Text('充值',style: TextStyle(color: Colours.c3,fontSize: 14.w,height: 1.5,fontWeight: Fonts.medium),)
)
],
),
body: CustomPullScrollView(
controller: controller.refreshController,
onRefresh: controller.onRefresh,
onLoading: controller.onLoading,
child: controller.coins.isEmpty?Container(
padding: EdgeInsets.only(top: 110.w),
alignment: Alignment.center,
child: Column(
crossAxisAlignment: CrossAxisAlignment.center,
children: [
SizedBox(height: 152.w, width: 195.w,
child: Image.asset( 'assets/images/none.png',),),
SizedBox(height: 13.w,),
],
),
):Container(
margin: EdgeInsets.all(10.w),
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(8.w),
color: Colors.white,
boxShadow: [
BoxShadow(
color: const Color(0xFFC7C7C7).withOpacity(0.5),
offset: Offset(3.w, 0),
blurRadius: 10.w,
spreadRadius: 0.w,
return GetBuilder<UserCoinController>(
init: UserCoinController(),
builder: (controller) => Scaffold(
appBar: CustomAppBar(
title: const Text('紫荆币'),
actions: [
GestureDetector(
onTap: (){
showModalBottomSheet(
context: context,
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.vertical(top: Radius.circular(8.w)),
),
],
),
child: ListView.builder(
itemBuilder: (BuildContext context, int index){
return BuildCell(model: controller.coins[index],);
},
itemCount: controller.coins.length,
),
builder: (BuildContext context) {
return const CoinRechargePage();
},
).then((value) {
controller.onRefresh();
});
},
child: Text('充值',style: TextStyle(color: Colours.c3,fontSize: 14.w,height: 1.5,fontWeight: Fonts.medium),)
)
],
),
body: CustomPullScrollView(
controller: controller.refreshController,
onRefresh: controller.onRefresh,
onLoading: controller.onLoading,
child: controller.coins.isEmpty?Container(
padding: EdgeInsets.only(top: 110.w),
alignment: Alignment.center,
child: Column(
crossAxisAlignment: CrossAxisAlignment.center,
children: [
SizedBox(height: 152.w, width: 195.w,
child: Image.asset( 'assets/images/none.png',),),
SizedBox(height: 13.w,),
],
),
):Container(
margin: EdgeInsets.all(10.w),
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(8.w),
color: Colors.white,
boxShadow: [
BoxShadow(
color: const Color(0xFFC7C7C7).withOpacity(0.5),
offset: Offset(3.w, 0),
blurRadius: 10.w,
spreadRadius: 0.w,
),
],
),
child: ListView.builder(
itemBuilder: (BuildContext context, int index){
return BuildCell(model: controller.coins[index],);
},
itemCount: controller.coins.length,
),
),
),
......
......@@ -11,56 +11,50 @@ class UserCouponPage extends StatefulWidget {
class _UserCouponPageState extends State<UserCouponPage> {
@override
Widget build(BuildContext context) {
return WillPopScope(
onWillPop: () async {
context.pop(true);
return false;
},
child: GetBuilder<UserCouponController>(
init: UserCouponController(),
builder:(controller) => Scaffold(
appBar: AppBar(
centerTitle: true,
title: const Text('优惠券'),
),
body: CustomPullScrollView(
controller: controller.refreshController,
onRefresh: controller.onRefresh,
onLoading: controller.onLoading,
child: controller.coupons.isEmpty?Container(
padding: EdgeInsets.only(top: 110.w),
alignment: Alignment.center,
child: Column(
crossAxisAlignment: CrossAxisAlignment.center,
children: [
SizedBox(height: 152.w, width: 195.w,
child: Image.asset( 'assets/images/none.png',),),
SizedBox(height: 13.w,),
],
),
):ListView.builder(
itemBuilder: (BuildContext context, int index){
return BuildItem(model: controller.coupons[index],);
// if (index == controller.coupons.length){
// return GestureDetector(
// onTap: (){
// // controller.getOverCoupons();
// },
// child: Container(
// alignment: Alignment.center,
// height: 40.w,
// // color: Colors.cyan,
// child: Text('过期优惠券'),
// ),
// );
// }
// else {
// return BuildItem(model: controller.coupons[index],);
// }
},
// itemCount: controller.coupons.length +1,
itemCount: controller.coupons.length,
return GetBuilder<UserCouponController>(
init: UserCouponController(),
builder:(controller) => Scaffold(
appBar: AppBar(
centerTitle: true,
title: const Text('优惠券'),
),
body: CustomPullScrollView(
controller: controller.refreshController,
onRefresh: controller.onRefresh,
onLoading: controller.onLoading,
child: controller.coupons.isEmpty?Container(
padding: EdgeInsets.only(top: 110.w),
alignment: Alignment.center,
child: Column(
crossAxisAlignment: CrossAxisAlignment.center,
children: [
SizedBox(height: 152.w, width: 195.w,
child: Image.asset( 'assets/images/none.png',),),
SizedBox(height: 13.w,),
],
),
):ListView.builder(
itemBuilder: (BuildContext context, int index){
return BuildItem(model: controller.coupons[index],);
// if (index == controller.coupons.length){
// return GestureDetector(
// onTap: (){
// // controller.getOverCoupons();
// },
// child: Container(
// alignment: Alignment.center,
// height: 40.w,
// // color: Colors.cyan,
// child: Text('过期优惠券'),
// ),
// );
// }
// else {
// return BuildItem(model: controller.coupons[index],);
// }
},
// itemCount: controller.coupons.length +1,
itemCount: controller.coupons.length,
),
),
),
......
......@@ -26,6 +26,7 @@ class UserEditNoteController extends GetxController {
@override
void onInit() {
isPublic = model.isOpen ==1?true:false;
super.onInit();
}
......@@ -220,11 +221,17 @@ class UserEditNoteController extends GetxController {
'image':images
};
String isOpen = '0';
if(isPublic){
isOpen = '1';
}
final result = MineAPI.editNotes(
content: model.content??'',
notesId: model.notesId.toString(),
bookId: bookId,
noteContent: jsonEncode(contentMap)
noteContent: jsonEncode(contentMap),
isOpen: isOpen
);
return result;
}
......
......@@ -20,200 +20,194 @@ class _UserGenderPageState extends State<UserGenderPage> {
@override
Widget build(BuildContext context) {
return WillPopScope(
onWillPop: () async {
context.pop(true);
return false;
},
child: GetBuilder<UserGenderController>(
init: UserGenderController(widget.userInfo),
builder: (controller) => Scaffold(
appBar: CustomAppBar(
title: const Text('设置性别'),
actions: [],
return GetBuilder<UserGenderController>(
init: UserGenderController(widget.userInfo),
builder: (controller) => Scaffold(
appBar: CustomAppBar(
title: const Text('设置性别'),
actions: [],
),
body: Container(
margin: EdgeInsets.symmetric(
horizontal: AppTheme.margin, vertical: AppTheme.margin),
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(8.w),
color: Colors.white,
boxShadow: [
BoxShadow(
color: Color(0xFFC7C7C7).withOpacity(0.5),
offset: Offset(3.w, 0),
blurRadius: 10.w,
spreadRadius: 0.w,
),
],
),
body: Container(
margin: EdgeInsets.symmetric(
horizontal: AppTheme.margin, vertical: AppTheme.margin),
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(8.w),
color: Colors.white,
boxShadow: [
BoxShadow(
color: Color(0xFFC7C7C7).withOpacity(0.5),
offset: Offset(3.w, 0),
blurRadius: 10.w,
spreadRadius: 0.w,
),
],
),
child: ClipRRect(
borderRadius: BorderRadius.circular(8.w),
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
/// 男
GestureDetector(
onTap: () {
// print("点击了男");
setState(() {
controller._changeInfo(1);
selectedGender = 1;
});
},
child: Container(
padding: EdgeInsets.only(left: 15.w, right: 15.w),
color: Colors.transparent,
height: 35.w,
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Text(
"男",
style: TextStyle(
fontSize: 14.w,
color: Colours.c3,
),
child: ClipRRect(
borderRadius: BorderRadius.circular(8.w),
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
/// 男
GestureDetector(
onTap: () {
// print("点击了男");
setState(() {
controller._changeInfo(1);
selectedGender = 1;
});
},
child: Container(
padding: EdgeInsets.only(left: 15.w, right: 15.w),
color: Colors.transparent,
height: 35.w,
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Text(
"男",
style: TextStyle(
fontSize: 14.w,
color: Colours.c3,
),
Visibility(
visible: selectedGender == 1,
// child: Image.asset('assets/images/check.png'))
child: Image(
image:
const AssetImage("assets/images/check.png"),
height: 15.w,
width: 15.w,
)),
],
),
),
Visibility(
visible: selectedGender == 1,
// child: Image.asset('assets/images/check.png'))
child: Image(
image:
const AssetImage("assets/images/check.png"),
height: 15.w,
width: 15.w,
)),
],
),
/* Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
_buildItem(
'男',
),
Padding(
padding: const EdgeInsets.only(right: 18),
child: Visibility(
visible: selectedGender == 1,
child: Image.asset('assets/images/check.png'))),
],
)*/
),
Container(
color: Colours.cLine,
margin: EdgeInsets.symmetric(horizontal: 10.w),
height: 1.w,
),
GestureDetector(
onTap: () {
setState(() {
controller._changeInfo(2);
selectedGender = 2;
});
},
child: Container(
padding: EdgeInsets.only(left: 15.w, right: 15.w),
color: Colors.transparent,
height: 35.w,
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Text(
"女",
style: TextStyle(
fontSize: 14.w,
color: Colours.c3,
),
/* Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
_buildItem(
'男',
),
Padding(
padding: const EdgeInsets.only(right: 18),
child: Visibility(
visible: selectedGender == 1,
child: Image.asset('assets/images/check.png'))),
],
)*/
),
Container(
color: Colours.cLine,
margin: EdgeInsets.symmetric(horizontal: 10.w),
height: 1.w,
),
GestureDetector(
onTap: () {
setState(() {
controller._changeInfo(2);
selectedGender = 2;
});
},
child: Container(
padding: EdgeInsets.only(left: 15.w, right: 15.w),
color: Colors.transparent,
height: 35.w,
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Text(
"女",
style: TextStyle(
fontSize: 14.w,
color: Colours.c3,
),
Visibility(
visible: selectedGender == 2,
child: Image(
image:
const AssetImage("assets/images/check.png"),
height: 15.w,
width: 15.w,
))
],
),
),
Visibility(
visible: selectedGender == 2,
child: Image(
image:
const AssetImage("assets/images/check.png"),
height: 15.w,
width: 15.w,
))
],
),
/*Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
_buildItem(
'女',
),
Padding(
padding: const EdgeInsets.only(right: 18),
child: Visibility(
visible: selectedGender == 2,
child: Image.asset('assets/images/check.png'))),
],
)*/
),
Container(
color: Colours.cLine,
margin: EdgeInsets.symmetric(horizontal: 10.w),
height: 1,
),
GestureDetector(
onTap: () {
setState(() {
controller._changeInfo(3);
selectedGender = 3;
});
},
child: /*Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
_buildItem(
'保密',
),
Padding(
padding: const EdgeInsets.only(right: 18),
child: Visibility(
visible: selectedGender == 3,
child: Image.asset('assets/images/check.png'))),
],
)*/
Container(
padding: EdgeInsets.only(left: 15.w, right: 15.w),
color: Colors.transparent,
height: 35.w,
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Text(
"保密",
style: TextStyle(
fontSize: 14.w,
color: Colours.c3,
),
/*Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
_buildItem(
'女',
),
Padding(
padding: const EdgeInsets.only(right: 18),
child: Visibility(
visible: selectedGender == 2,
child: Image.asset('assets/images/check.png'))),
],
)*/
),
Container(
color: Colours.cLine,
margin: EdgeInsets.symmetric(horizontal: 10.w),
height: 1,
),
GestureDetector(
onTap: () {
setState(() {
controller._changeInfo(3);
selectedGender = 3;
});
},
child: /*Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
_buildItem(
'保密',
),
Padding(
padding: const EdgeInsets.only(right: 18),
child: Visibility(
visible: selectedGender == 3,
child: Image.asset('assets/images/check.png'))),
],
)*/
Container(
padding: EdgeInsets.only(left: 15.w, right: 15.w),
color: Colors.transparent,
height: 35.w,
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Text(
"保密",
style: TextStyle(
fontSize: 14.w,
color: Colours.c3,
),
Visibility(
visible: selectedGender == 3,
child: Image(
image:
const AssetImage("assets/images/check.png"),
height: 15.w,
width: 15.w,
))
],
),
),
Visibility(
visible: selectedGender == 3,
child: Image(
image:
const AssetImage("assets/images/check.png"),
height: 15.w,
width: 15.w,
))
],
),
),
],
),
),
],
),
))
),
),
))
);
}
......
......@@ -10,54 +10,48 @@ class UserLovePage extends StatefulWidget {
class _UserLovePageState extends State<UserLovePage> {
@override
Widget build(BuildContext context) {
return WillPopScope(
onWillPop: () async {
context.pop(true);
return false;
},
child: GetBuilder<UserLoveController>(
init: UserLoveController(),
builder:(controller) => Scaffold(
appBar: AppBar(
centerTitle: true,
title: const Text('我的收藏'),
),
body: Container(
color: Colours.cF9,
child: CustomPullScrollView(
controller: controller.refreshController,
onRefresh: controller.onRefresh,
onLoading: controller.onLoading,
child: controller.loves.isEmpty?Container(
padding: EdgeInsets.only(top: 110.w),
alignment: Alignment.center,
child: Column(
crossAxisAlignment: CrossAxisAlignment.center,
children: [
SizedBox(height: 152.w, width: 195.w,
child: Image.asset( 'assets/images/none.png',),),
SizedBox(height: 13.w,),
],
),
):ListView.builder(
itemBuilder: (BuildContext context, int index){
CourseModel model = controller.loves[index];
return GestureDetector(
onTap: (){
if(model.status == 0 && model.isHave == 0){
Toast.show('书籍已下架');
}
else{
context.pushNamed(Routes.bookDetail,queryParameters: {'book_id':model.bookId.toString()});
}
},
child: BuildItem(model: model,onTap: (){
controller.unLoved(bookId: model.bookId.toString());
},),
);
},
itemCount: controller.loves.length,
return GetBuilder<UserLoveController>(
init: UserLoveController(),
builder:(controller) => Scaffold(
appBar: AppBar(
centerTitle: true,
title: const Text('我的收藏'),
),
body: Container(
color: Colours.cF9,
child: CustomPullScrollView(
controller: controller.refreshController,
onRefresh: controller.onRefresh,
onLoading: controller.onLoading,
child: controller.loves.isEmpty?Container(
padding: EdgeInsets.only(top: 110.w),
alignment: Alignment.center,
child: Column(
crossAxisAlignment: CrossAxisAlignment.center,
children: [
SizedBox(height: 152.w, width: 195.w,
child: Image.asset( 'assets/images/none.png',),),
SizedBox(height: 13.w,),
],
),
):ListView.builder(
itemBuilder: (BuildContext context, int index){
CourseModel model = controller.loves[index];
return GestureDetector(
onTap: (){
if(model.status == 0 && model.isHave == 0){
Toast.show('书籍已下架');
}
else{
context.pushNamed(Routes.bookDetail,queryParameters: {'book_id':model.bookId.toString()});
}
},
child: BuildItem(model: model,onTap: (){
controller.unLoved(bookId: model.bookId.toString());
},),
);
},
itemCount: controller.loves.length,
),
),
),
......
......@@ -7,162 +7,127 @@ class MsgPage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return WillPopScope(
onWillPop: () async {
context.pop(true);
return false;
},
child: GetBuilder<MsgController>(
init: MsgController(),
builder:(controller) => Scaffold(
appBar: AppBar(
title: const Text('消息中心'),
centerTitle: true,
),
body: Container(
color: Colours.cF9,
child: CustomPullScrollView(
controller: controller.refreshController,
onRefresh: controller.onRefresh,
onLoading: controller.onLoading,
child:controller.msgs.isEmpty?Container(
padding: EdgeInsets.only(top: 110.w),
alignment: Alignment.center,
child: Column(
crossAxisAlignment: CrossAxisAlignment.center,
children: [
SizedBox(height: 152.w, width: 195.w,
child: Image.asset( 'assets/images/none.png',),),
SizedBox(height: 13.w,),
],
),
): ListView.builder(
itemBuilder: (BuildContext context, int index){
MsgModel model = controller.msgs[index];
return GestureDetector(
child: BuildItem(model:model,),
onTap: () async{
controller.read(model);
if(model.type == 1){
// final result = await context.pushNamed(Routes.order);
// if (result == true){
// controller.onRefresh();
// }
final orderInfo = await controller.getOrderInfo(model.urlId?.orderNum??'');
// 待支付
if (orderInfo.status == 1){
// 书籍订单
if (orderInfo.types ==1){
final result = await context.pushNamed(Routes.orderAwaiting,
queryParameters: {'orderNum': model.urlId?.orderNum.toString()});
if (result == true){
// controller.onRefresh();
}
}
// 充值订单
else {
final result = await context.pushNamed(Routes.orderCoinAwaiting,
queryParameters: {'orderNum': model.urlId?.orderNum.toString()});
if (result == true){
// controller.onRefresh();
}
}
return GetBuilder<MsgController>(
init: MsgController(),
builder:(controller) => Scaffold(
appBar: AppBar(
title: const Text('消息中心'),
centerTitle: true,
),
body: Container(
color: Colours.cF9,
child: CustomPullScrollView(
controller: controller.refreshController,
onRefresh: controller.onRefresh,
onLoading: controller.onLoading,
child:controller.msgs.isEmpty?Container(
padding: EdgeInsets.only(top: 110.w),
alignment: Alignment.center,
child: Column(
crossAxisAlignment: CrossAxisAlignment.center,
children: [
SizedBox(height: 152.w, width: 195.w,
child: Image.asset( 'assets/images/none.png',),),
SizedBox(height: 13.w,),
],
),
): ListView.builder(
itemBuilder: (BuildContext context, int index){
MsgModel model = controller.msgs[index];
return GestureDetector(
child: BuildItem(model:model,),
onTap: () async{
controller.read(model);
if(model.type == 1){
// final result = await context.pushNamed(Routes.order);
// if (result == true){
// controller.onRefresh();
// }
final orderInfo = await controller.getOrderInfo(model.urlId?.orderNum??'');
// 待支付
if (orderInfo.status == 1){
// 书籍订单
if (orderInfo.types ==1){
context.pushNamed(Routes.orderAwaiting,
queryParameters: {'orderNum': model.urlId?.orderNum.toString()});
}
// 已取消
else if (orderInfo.status ==2){
if (orderInfo.types == 1){
final result = await context.pushNamed(Routes.orderCancel,
queryParameters: {'orderNum': model.urlId?.orderNum.toString()});
if (result == true){
// controller.onRefresh();
}
}
else {
final result = await context.pushNamed(Routes.orderCoinCancel,
queryParameters: {'orderNum': model.urlId?.orderNum.toString()});
if (result == true){
// controller.onRefresh();
}
}
// 充值订单
else {
context.pushNamed(Routes.orderCoinAwaiting,
queryParameters: {'orderNum': model.urlId?.orderNum.toString()});
}
// 已完成
else if (orderInfo.status ==3){
if (orderInfo.types == 1){
final result = await context.pushNamed(Routes.orderCompleted,
queryParameters: {'orderNum': model.urlId?.orderNum.toString()});
if (result == true){
// controller.onRefresh();
}
}
else {
final result = await context.pushNamed(Routes.orderCoinCompleted,
queryParameters: {'orderNum': model.urlId?.orderNum.toString()});
if (result == true){
// controller.onRefresh();
}
}
}
// 已取消
else if (orderInfo.status ==2){
if (orderInfo.types == 1){
context.pushNamed(Routes.orderCancel,
queryParameters: {'orderNum': model.urlId?.orderNum.toString()});
}
// 已退款
else if (orderInfo.status == 4){
if (orderInfo.types == 1){
final result = await context.pushNamed(Routes.orderRefunded,
queryParameters: {'orderNum': model.urlId?.orderNum.toString()});
if (result == true){
// controller.onRefresh();
}
}
else {
context.pushNamed(Routes.orderCoinCancel,
queryParameters: {'orderNum': model.urlId?.orderNum.toString()});
}
///TODO:
}else if (model.type == 2){
// 2 购买完成三天未评价(跳转订单列表--已完成)
final orderInfo = await controller.getOrderInfo(model.urlId?.orderNum??'');
final result = await context.pushNamed(Routes.orderEvaluate,extra:orderInfo,
queryParameters: {'orderNum':orderInfo.ordersnum});
// final result = await context.pushNamed(Routes.order);
// if (result == true){
// // controller.onRefresh();
// }
///TODO:
}else if (model.type == 3){
// 3 讨论有人回复的时候 (跳转我的讨论详情也)
String bookId = model.urlId?.bookId.toString()??'';
BookDetailModel bookDetails = await LibraryAPI.details(bookId:bookId);
CourseModel courseModel = CourseModel(
img: bookDetails.img,
bookId: bookDetails.bookId,
bookName: bookDetails.bookName,
commentNum: bookDetails.commentNum
);
context.pushNamed(Routes.discussDes,extra: courseModel);
}
else if (model.type == 4){
// 4 订单完成后有新的积分增加(跳转用户积分记录页)
final result = await context.pushNamed(Routes.point);
if (result == true){
// controller.onRefresh();
// 已完成
else if (orderInfo.status ==3){
if (orderInfo.types == 1){
context.pushNamed(Routes.orderCompleted,
queryParameters: {'orderNum': model.urlId?.orderNum.toString()});
}
}else if (model.type == 5){
// 5后台直接发放给指定用户优惠券(跳转到用户优惠券页)
final result = await context.pushNamed(Routes.coupon);
if (result == true){
// controller.onRefresh();
else {
context.pushNamed(Routes.orderCoinCompleted,
queryParameters: {'orderNum': model.urlId?.orderNum.toString()});
}
}
// 已退款
else if (orderInfo.status == 4){
if (orderInfo.types == 1){
context.pushNamed(Routes.orderRefunded,
queryParameters: {'orderNum': model.urlId?.orderNum.toString()});
}
}
},
);
},
itemCount: controller.msgs.length,
),
///TODO:
}else if (model.type == 2){
// 2 购买完成三天未评价(跳转订单列表--已完成)
final orderInfo = await controller.getOrderInfo(model.urlId?.orderNum??'');
context.pushNamed(Routes.orderEvaluate,extra:orderInfo,
queryParameters: {'orderNum':orderInfo.ordersnum});
///TODO:
}else if (model.type == 3){
// 3 讨论有人回复的时候 (跳转我的讨论详情也)
String bookId = model.urlId?.bookId.toString()??'';
BookDetailModel bookDetails = await LibraryAPI.details(bookId:bookId);
CourseModel courseModel = CourseModel(
img: bookDetails.img,
bookId: bookDetails.bookId,
bookName: bookDetails.bookName,
commentNum: bookDetails.commentNum
);
context.pushNamed(Routes.discussDes,extra: courseModel);
}
else if (model.type == 4){
// 4 订单完成后有新的积分增加(跳转用户积分记录页)
context.pushNamed(Routes.point);
}else if (model.type == 5){
// 5后台直接发放给指定用户优惠券(跳转到用户优惠券页)
context.pushNamed(Routes.coupon);
}
},
);
},
itemCount: controller.msgs.length,
),
),
),
......
......@@ -22,57 +22,51 @@ class _UserNotesDesPageState extends State<UserNotesDesPage> {
@override
Widget build(BuildContext context) {
return WillPopScope(
onWillPop: () async {
context.pop(true);
return false;
},
child: Scaffold(
appBar: AppBar(
centerTitle: true,
title: const Text('笔记详情'),
),
body: DefaultTabController(
length: tabs.length,
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
BuildItem(model: widget.model),
ClipRRect(
borderRadius:const BorderRadius.only(topLeft: Radius.circular(5),topRight: Radius.circular(5)),
child: Container(
width: double.infinity,
color: Colors.white,
height: 35.w,
child: TabBar(
indicator: UnderlineTabIndicator(
borderRadius: BorderRadius.circular(0.75),
borderSide: BorderSide(width: 1.5.w,color: AppTheme.primary),
insets: EdgeInsets.symmetric(horizontal: 22.w), // 设置标签下面指示器的水平内边距
),
labelPadding: EdgeInsets.symmetric(horizontal: 20.w),
indicatorSize: TabBarIndicatorSize.label,
indicatorColor: AppTheme.primary,
indicatorWeight: 1.5,
labelStyle: TextStyle(color: AppTheme.primary,fontSize: 15.w,height: 1.5,fontWeight: Fonts.medium),
unselectedLabelColor: Colours.c9,
unselectedLabelStyle: TextStyle(color: Colours.c9,fontSize: 15.w,height: 1.5),
isScrollable: true,
tabs: tabs
),
return Scaffold(
appBar: AppBar(
centerTitle: true,
title: const Text('笔记详情'),
),
body: DefaultTabController(
length: tabs.length,
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
BuildItem(model: widget.model),
ClipRRect(
borderRadius:const BorderRadius.only(topLeft: Radius.circular(5),topRight: Radius.circular(5)),
child: Container(
width: double.infinity,
color: Colors.white,
height: 35.w,
child: TabBar(
indicator: UnderlineTabIndicator(
borderRadius: BorderRadius.circular(0.75),
borderSide: BorderSide(width: 1.5.w,color: AppTheme.primary),
insets: EdgeInsets.symmetric(horizontal: 22.w), // 设置标签下面指示器的水平内边距
),
labelPadding: EdgeInsets.symmetric(horizontal: 20.w),
indicatorSize: TabBarIndicatorSize.label,
indicatorColor: AppTheme.primary,
indicatorWeight: 1.5,
labelStyle: TextStyle(color: AppTheme.primary,fontSize: 15.w,height: 1.5,fontWeight: Fonts.medium),
unselectedLabelColor: Colours.c9,
unselectedLabelStyle: TextStyle(color: Colours.c9,fontSize: 15.w,height: 1.5),
isScrollable: true,
tabs: tabs
),
),
Expanded(
child: TabBarView(
children: List.generate(tabs.length, (index){
return BuildListPage(tag:'$index',model:widget.model);
})
),
)
],
)
),
),
Expanded(
child: TabBarView(
children: List.generate(tabs.length, (index){
return BuildListPage(tag:'$index',model:widget.model);
})
),
)
],
)
),
);
);
}
}
......@@ -43,29 +43,23 @@ class _UserOrderState extends State<UserOrderPage>
@override
Widget build(BuildContext context) {
return WillPopScope(
onWillPop: () async {
context.pop(true);
return false;
},
child: Scaffold(
appBar: AppBar(
title: Container(
padding: EdgeInsets.only(right: 10.w),
child: CustomInputSearch(
controller: searchController,
readOnly: true,
hintText: '搜索我的订单',
onTap: () {
context.pushNamed(Routes.orderSearch);
},
),
return Scaffold(
appBar: AppBar(
title: Container(
padding: EdgeInsets.only(right: 10.w),
child: CustomInputSearch(
controller: searchController,
readOnly: true,
hintText: '搜索我的订单',
onTap: () {
context.pushNamed(Routes.orderSearch);
},
),
titleSpacing: 0,
),
body: _buildBody(),
titleSpacing: 0,
),
body: _buildBody(),
);
}
......
......@@ -12,10 +12,10 @@ class BuiltAwaiting extends StatelessWidget {
Widget build(BuildContext context) {
return GestureDetector(
onTap: () async {
final result = await context.pushNamed(Routes.orderAwaiting,
queryParameters: {'orderNum': model.ordersnum});
if (result == true) {
controller.onRefresh(); }
context.pushNamed(Routes.orderAwaiting,
queryParameters: {'orderNum': model.ordersnum}).then((value){
controller.onRefresh();
});
},
child: Container(
margin: EdgeInsets.only(left: 10.w, right: 10.w, top: 10.w),
......
......@@ -18,25 +18,22 @@ class BuiltCoin extends StatelessWidget {
return GestureDetector(
onTap: () async {
if(model.status == 1){
final result = await context.pushNamed(Routes.orderCoinAwaiting,
queryParameters: {'orderNum': model.ordersnum});
if(result==true){
context.pushNamed(Routes.orderCoinAwaiting,
queryParameters: {'orderNum': model.ordersnum}).then((value){
controller.onRefresh();
}
});
}
else if(model.status == 2){
final result = await context.pushNamed(Routes.orderCoinCancel,
queryParameters: {'orderNum': model.ordersnum});
if(result==true){
context.pushNamed(Routes.orderCoinCancel,
queryParameters: {'orderNum': model.ordersnum}).then((value){
controller.onRefresh();
}
});
}
else if(model.status == 3){
final result = await context.pushNamed(Routes.orderCoinCompleted,
queryParameters: {'orderNum': model.ordersnum});
if(result==true){
context.pushNamed(Routes.orderCoinCompleted,
queryParameters: {'orderNum': model.ordersnum}).then((value){
controller.onRefresh();
}
});
}
},
child: Container(
......
......@@ -15,10 +15,10 @@ class BuiltCompleted extends StatelessWidget {
return GestureDetector(
onTap: ()
async {
final result = await context.pushNamed(Routes.orderCompleted,
queryParameters: {'orderNum': model.ordersnum});
if (result == true) {
controller.onRefresh(); }
context.pushNamed(Routes.orderCompleted,
queryParameters: {'orderNum': model.ordersnum}).then((value){
controller.onRefresh();
});
},
child: Container(
margin: EdgeInsets.only(left: 10.w, right: 10.w, top: 10.w),
......@@ -165,14 +165,13 @@ class BuiltCompleted extends StatelessWidget {
child: Center(
child: GestureDetector(
onTap: () async {
final result = await context.pushNamed(Routes.orderEvaluate,
context.pushNamed(Routes.orderEvaluate,
extra: OrderInfoModel(),
queryParameters: {
'orderNum': model.ordersnum
});
if (result == true) {
}).then((value){
controller.onRefresh();
}
});
},
child: Text(
judgeComments() == 1 ? '去评价' : "继续评价",
......@@ -307,14 +306,14 @@ class BuiltCompleted extends StatelessWidget {
child: Center(
child: GestureDetector(
onTap: () async {
final result = await context.pushNamed(Routes.orderEvaluate,
context.pushNamed(Routes.orderEvaluate,
extra: OrderInfoModel(),
queryParameters: {
'orderNum': model.ordersnum
});
if (result == true) {
controller.onRefresh();
}
}).then((value){
controller.onRefresh();
});
},
child: Text(
judgeComments() == 1 ? '去评价' : "继续评价",
......
......@@ -21,299 +21,287 @@ class _UserOrderAwaitingState extends State<UserOrderAwaitingPage> {
@override
Widget build(BuildContext context) {
return WillPopScope(
onWillPop: () async {
context.pop(true);
return false;
},
child: FutureBuilder(
future: myController.getOrderInfo(),
builder: (context, snapshot) {
if (snapshot.connectionState == ConnectionState.waiting) {
return Scaffold(
appBar: AppBar(
centerTitle: true,
title: const Text('等待付款'),
),
);
} else {
return WillPopScope(
onWillPop: () async {
context.pop(true);
return false;
},
child: Scaffold(
appBar: CustomAppBar(
title: const Text('等待付款'),
actions: [],
),
body: Column(
children: [
Container(
margin: EdgeInsets.symmetric(
horizontal: AppTheme.margin,
vertical: AppTheme.margin),
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(8.w),
color: Colors.white,
boxShadow: [
BoxShadow(
color: Colours.cC7.withOpacity(0.5),
offset: Offset(3.w, 0),
blurRadius: 10.w,
spreadRadius: 0.w,
),
],
return FutureBuilder(
future: myController.getOrderInfo(),
builder: (context, snapshot) {
if (snapshot.connectionState == ConnectionState.waiting) {
return Scaffold(
appBar: AppBar(
centerTitle: true,
title: const Text('等待付款'),
),
);
} else {
return Scaffold(
appBar: CustomAppBar(
title: const Text('等待付款'),
actions: [],
),
body: Column(
children: [
Container(
margin: EdgeInsets.symmetric(
horizontal: AppTheme.margin,
vertical: AppTheme.margin),
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(8.w),
color: Colors.white,
boxShadow: [
BoxShadow(
color: Colours.cC7.withOpacity(0.5),
offset: Offset(3.w, 0),
blurRadius: 10.w,
spreadRadius: 0.w,
),
child: ClipRRect(
borderRadius: BorderRadius.circular(8.w),
child: Column(
mainAxisAlignment: MainAxisAlignment.start,
mainAxisSize: MainAxisSize.min,
children: [
Padding(
padding: EdgeInsets.only(
left: 12.0.w, top: 12.0.w, bottom: 12.0.w),
child: Row(
mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Image.network(
myController.model?.bookList?[0].img ?? '',
fit: BoxFit.cover, // 设置适应方式为充满
width: 72.0.w,
height: 86.0.w,
),
Expanded(
child: Padding(
padding: EdgeInsets.only(
left: 12.0.w,
top: 5.5.w,
right: 23.5.w),
child: Column(
mainAxisAlignment:
MainAxisAlignment.spaceBetween,
crossAxisAlignment:
CrossAxisAlignment.end, // 下面的Text靠左
children: [
Text(
myController
.model.bookList?[0].name ??
'',
style: TextStyle(
color: Colours.c3,
fontWeight: Fonts.bold,
fontSize: 13.w,
),
maxLines: 2,
overflow: TextOverflow
.ellipsis, // 超过部分显示省略号
),
SizedBox(height: 25.5.w),
Text(
"需付款 ¥${myController.model.finalTotalPrice}",
style: TextStyle(
color: Colours.cAB1941,
fontWeight: Fonts.bold,
fontSize: 14.w,
),
),
],
),
),
),
],
],
),
child: ClipRRect(
borderRadius: BorderRadius.circular(8.w),
child: Column(
mainAxisAlignment: MainAxisAlignment.start,
mainAxisSize: MainAxisSize.min,
children: [
Padding(
padding: EdgeInsets.only(
left: 12.0.w, top: 12.0.w, bottom: 12.0.w),
child: Row(
mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Image.network(
myController.model?.bookList?[0].img ?? '',
fit: BoxFit.cover, // 设置适应方式为充满
width: 72.0.w,
height: 86.0.w,
),
),
Container(
color: Colours.cLine,
margin: EdgeInsets.only(
left: 10.w, right: 10.w, bottom: 12.w),
height: 1.w,
),
Container(
padding: EdgeInsets.only(
left: 11.5.w, bottom: 8.w, right: 23.5.w),
child: Column(
mainAxisAlignment:
MainAxisAlignment.spaceEvenly,
children:
myController.orderAwaitings.map((model) {
return Padding(
padding: EdgeInsets.only(top: 12.w),
child: Row(
mainAxisAlignment:
MainAxisAlignment.spaceBetween,
children: [
Text(
model.name,
style: TextStyle(
fontSize: 13.w,
height: 1.6.w,
color: Colours.c9),
Expanded(
child: Padding(
padding: EdgeInsets.only(
left: 12.0.w,
top: 5.5.w,
right: 23.5.w),
child: Column(
mainAxisAlignment:
MainAxisAlignment.spaceBetween,
crossAxisAlignment:
CrossAxisAlignment.end, // 下面的Text靠左
children: [
Text(
myController
.model.bookList?[0].name ??
'',
style: TextStyle(
color: Colours.c3,
fontWeight: Fonts.bold,
fontSize: 13.w,
),
Text(
model.value.toString(),
style: TextStyle(
fontSize: 13.w,
height: 1.6.w,
color: Colours.c3),
maxLines: 2,
overflow: TextOverflow
.ellipsis, // 超过部分显示省略号
),
SizedBox(height: 25.5.w),
Text(
"需付款 ¥${myController.model.finalTotalPrice}",
style: TextStyle(
color: Colours.cAB1941,
fontWeight: Fonts.bold,
fontSize: 14.w,
),
],
),
);
}).toList(),
),
],
),
),
),
),
SizedBox(
height: 13.5.w,
),
],
],
),
),
),
),
SizedBox(
height: 39.w,
),
GestureDetector(
onTap: () {
myController.payOrder();
},
child: Container(
margin: EdgeInsets.symmetric(horizontal: 15.w),
height: 40.w,
decoration: BoxDecoration(
color: AppTheme.primary,
borderRadius: BorderRadius.circular(180.w),
border: Border.all(
color: Colours.cC31F4C, width: 0.5.w)),
child: Center(
child: Text(
'立即支付 ¥${myController.model.finalTotalPrice}',
style: TextStyle(
fontWeight: Fonts.medium,
fontSize: 14.w,
color: Colours.cFF),
Container(
color: Colours.cLine,
margin: EdgeInsets.only(
left: 10.w, right: 10.w, bottom: 12.w),
height: 1.w,
),
Container(
padding: EdgeInsets.only(
left: 11.5.w, bottom: 8.w, right: 23.5.w),
child: Column(
mainAxisAlignment:
MainAxisAlignment.spaceEvenly,
children:
myController.orderAwaitings.map((model) {
return Padding(
padding: EdgeInsets.only(top: 12.w),
child: Row(
mainAxisAlignment:
MainAxisAlignment.spaceBetween,
children: [
Text(
model.name,
style: TextStyle(
fontSize: 13.w,
height: 1.6.w,
color: Colours.c9),
),
Text(
model.value.toString(),
style: TextStyle(
fontSize: 13.w,
height: 1.6.w,
color: Colours.c3),
),
],
),
);
}).toList(),
),
),
),
SizedBox(
height: 13.5.w,
),
],
),
SizedBox(
height: 11.5.w,
),
),
SizedBox(
height: 39.w,
),
GestureDetector(
onTap: () {
myController.payOrder();
},
child: Container(
margin: EdgeInsets.symmetric(horizontal: 15.w),
height: 40.w,
decoration: BoxDecoration(
color: AppTheme.primary,
borderRadius: BorderRadius.circular(180.w),
border: Border.all(
color: Colours.cC31F4C, width: 0.5.w)),
child: Center(
child: Text(
'立即支付 ¥${myController.model.finalTotalPrice}',
style: TextStyle(
fontWeight: Fonts.medium,
fontSize: 14.w,
color: Colours.cFF),
),
),
GestureDetector(
onTap: () {
showDialog(
context: context,
builder: (BuildContext context) {
return AlertDialog(
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(8.0.w),
),
contentPadding: EdgeInsets.zero,
// 移除内容部分的内边距
content: Wrap(
children: [
Container(
margin: EdgeInsets.only(
top: 44.w, bottom: 29.w), // 调整上下间距
child: Center(
child: Text(
'确定取消订单吗',
style: TextStyle(
fontSize: 15.w,
fontWeight: Fonts.medium,
color: Colours.c3,
),
),
),
),
SizedBox(
height: 11.5.w,
),
GestureDetector(
onTap: () {
showDialog(
context: context,
builder: (BuildContext context) {
return AlertDialog(
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(8.0.w),
),
contentPadding: EdgeInsets.zero,
// 移除内容部分的内边距
content: Wrap(
children: [
Container(
margin: EdgeInsets.only(
top: 44.w, bottom: 29.w), // 调整上下间距
child: Center(
child: Text(
'确定取消订单吗',
style: TextStyle(
fontSize: 15.w,
fontWeight: Fonts.medium,
color: Colours.c3,
),
),
Container(
height: 1.w, // 设置分割线的高度
width: double.infinity, // 设置分割线的宽度
color: Colours.cLine, // 设置分割线的颜色
),
],
),
),
// 去除操作按钮区域的内边距
actionsPadding: EdgeInsets.zero,
actions: <Widget>[
Row(
mainAxisAlignment:
MainAxisAlignment.spaceEvenly,
// 或者使用MainAxisAlignment.spaceEvenly
children: [
GestureDetector(
onTap: () => Navigator.of(context).pop(),
child: Container(
width: 105.w,
color: Colours.cFF,
alignment: Alignment.center,
child: const Text(
'取消',
style: TextStyle(
fontSize: 14,
fontWeight: Fonts.medium,
color: Colours.c6,
),
),
Container(
height: 1.w, // 设置分割线的高度
width: double.infinity, // 设置分割线的宽度
color: Colours.cLine, // 设置分割线的颜色
),
],
),
// 去除操作按钮区域的内边距
actionsPadding: EdgeInsets.zero,
actions: <Widget>[
Row(
mainAxisAlignment:
MainAxisAlignment.spaceEvenly,
// 或者使用MainAxisAlignment.spaceEvenly
children: [
GestureDetector(
onTap: () => Navigator.of(context).pop(),
child: Container(
width: 105.w,
color: Colours.cFF,
alignment: Alignment.center,
child: const Text(
'取消',
style: TextStyle(
fontSize: 14,
fontWeight: Fonts.medium,
color: Colours.c6,
),
),
Container(
height: 39.5.w, // 设置分割线的高度
width: 1, // 设置分割线的宽度
color: Colours.cLine, // 设置分割线的颜色
),
GestureDetector(
onTap: () async {
Future<bool> result = myController.cancelPay();
if(await result){
Navigator.of(context).pop();
context.pop(true);
}
},
child: Container(
width: 105.w,
color: Colours.cFF,
alignment: Alignment.center,
child: const Text(
'确定',
style: TextStyle(
fontSize: 14,
fontWeight: Fonts.boldSemi,
color: Colours.cAB1941,
),
),
),
),
Container(
height: 39.5.w, // 设置分割线的高度
width: 1, // 设置分割线的宽度
color: Colours.cLine, // 设置分割线的颜色
),
GestureDetector(
onTap: () async {
Future<bool> result = myController.cancelPay();
if(await result){
Navigator.of(context).pop();
context.pop(true);
}
},
child: Container(
width: 105.w,
color: Colours.cFF,
alignment: Alignment.center,
child: const Text(
'确定',
style: TextStyle(
fontSize: 14,
fontWeight: Fonts.boldSemi,
color: Colours.cAB1941,
),
),
],
),
),
],
);
},
),
],
);
},
child: Container(
width: 105.w,
color: Colours.cFF,
alignment: Alignment.center,
child: const Text(
'取消订单',
style: TextStyle(
fontWeight: Fonts.medium,
fontSize: 15,
color: Colours.c9,
),
),
);
},
child: Container(
width: 105.w,
color: Colours.cFF,
alignment: Alignment.center,
child: const Text(
'取消订单',
style: TextStyle(
fontWeight: Fonts.medium,
fontSize: 15,
color: Colours.c9,
),
),
],
),
),
),
);
}
},
),
],
),
);
}
},
);
}
}
......@@ -12,233 +12,227 @@ class UserOrderCancelDetailPage extends StatefulWidget {
class _UserOrderRefundedState extends State<UserOrderCancelDetailPage> {
@override
Widget build(BuildContext context) {
return WillPopScope(
onWillPop: () async {
context.pop(true);
return false;
},
child: GetBuilder<UserOrderCancelDetailController>(
init: UserOrderCancelDetailController(widget.orderNum),
builder: (controller) => Scaffold(
appBar: CustomAppBar(
title: const Text('已取消'),
actions: [],
),
body:Column(children: [
Container(
width: double.infinity,
margin: EdgeInsets.symmetric(
horizontal: AppTheme.margin, vertical: AppTheme.margin),
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(8.w),
color: Colors.white,
boxShadow: [
BoxShadow(
color: Colours.cC7.withOpacity(0.5),
offset: Offset(3.w, 0),
blurRadius: 10.w,
spreadRadius: 0.w,
),
],
),
child: ClipRRect(
borderRadius: BorderRadius.circular(8.w),
child: Column(
mainAxisAlignment: MainAxisAlignment.start,
mainAxisSize: MainAxisSize.min,
children: [
Padding(
padding: EdgeInsets.only(
left: 12.0.w, top: 12.0.w, bottom: 12.0.w),
child: Row(
mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Image.network(
controller.model?.bookList==null?'http://zxts-book-file.zijingebook.com/2024-01/29/b91194564969b9151fa382807977282acdffa22d.jpg':
controller.model.bookList![0].img??'',
// 用实际图片链接替换
fit: BoxFit.cover, // 设置适应方式为充满
width: 72.0.w,
height: 86.0.w,
),
Expanded(
child: Padding(
padding: EdgeInsets.only(
left: 12.0.w, top: 5.5.w, right: 23.5.w),
child: Column(
mainAxisAlignment:
MainAxisAlignment.spaceBetween,
crossAxisAlignment:
CrossAxisAlignment.start, // 下面的Text靠左
children: [
Container(
height: 62.5.w,
child: Text(
controller.model?.bookList?[0].name??'',
style: TextStyle(
color: Colours.c3,
fontWeight: Fonts.bold,
fontSize: 13.w,
),
maxLines: 2,
overflow:
TextOverflow.ellipsis, // 超过部分显示省略号
return GetBuilder<UserOrderCancelDetailController>(
init: UserOrderCancelDetailController(widget.orderNum),
builder: (controller) => Scaffold(
appBar: CustomAppBar(
title: const Text('已取消'),
actions: [],
),
body:Column(children: [
Container(
width: double.infinity,
margin: EdgeInsets.symmetric(
horizontal: AppTheme.margin, vertical: AppTheme.margin),
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(8.w),
color: Colors.white,
boxShadow: [
BoxShadow(
color: Colours.cC7.withOpacity(0.5),
offset: Offset(3.w, 0),
blurRadius: 10.w,
spreadRadius: 0.w,
),
],
),
child: ClipRRect(
borderRadius: BorderRadius.circular(8.w),
child: Column(
mainAxisAlignment: MainAxisAlignment.start,
mainAxisSize: MainAxisSize.min,
children: [
Padding(
padding: EdgeInsets.only(
left: 12.0.w, top: 12.0.w, bottom: 12.0.w),
child: Row(
mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Image.network(
controller.model?.bookList==null?'http://zxts-book-file.zijingebook.com/2024-01/29/b91194564969b9151fa382807977282acdffa22d.jpg':
controller.model.bookList![0].img??'',
// 用实际图片链接替换
fit: BoxFit.cover, // 设置适应方式为充满
width: 72.0.w,
height: 86.0.w,
),
Expanded(
child: Padding(
padding: EdgeInsets.only(
left: 12.0.w, top: 5.5.w, right: 23.5.w),
child: Column(
mainAxisAlignment:
MainAxisAlignment.spaceBetween,
crossAxisAlignment:
CrossAxisAlignment.start, // 下面的Text靠左
children: [
Container(
height: 62.5.w,
child: Text(
controller.model?.bookList?[0].name??'',
style: TextStyle(
color: Colours.c3,
fontWeight: Fonts.bold,
fontSize: 13.w,
),
maxLines: 2,
overflow:
TextOverflow.ellipsis, // 超过部分显示省略号
),
Container(
alignment: Alignment.topRight,
child: Text(
${controller.model.totalPrice}",
style: TextStyle(
color: Colours.cAB1941,
fontWeight: Fonts.medium,
fontSize: 14.w,
),
),
Container(
alignment: Alignment.topRight,
child: Text(
${controller.model.totalPrice}",
style: TextStyle(
color: Colours.cAB1941,
fontWeight: Fonts.medium,
fontSize: 14.w,
),
)
),
)
],
),
],
),
),
],
),
),
Container(
color: Colours.cLine,
margin: EdgeInsets.only(
left: 10.w, right: 10.w, bottom: 12.w),
height: 1.w,
),
],
),
Container(
padding: EdgeInsets.only(
left: 11.5.w, bottom: 8.w, right: 10.w),
child: Column(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: controller.orderCompleteds.map((model) {
return Padding(
padding: EdgeInsets.only(top: 12.w),
child: Row(
mainAxisAlignment:
MainAxisAlignment.spaceBetween,
children: [
Text(
model.name,
style: TextStyle(
fontSize: 13.w,
height: 1.6.w,
color: Colours.c9),
),
controller.orderCompleteds.indexOf(model) == 0 ?
GestureDetector(
onTap: () {
showModalBottomSheet(
context: context,
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.vertical(top: Radius.circular(8.w)),
),
builder: (BuildContext context) {
return RefundedDetailsPage(totalPrice: controller.model.totalPrice.toString(),
couponPrice: controller.model.couponPrice.toString(),
integralPrice: controller.model.integralPrice.toString(),);
},
).then((value) {
print('点击了应付款后面');
});
),
Container(
color: Colours.cLine,
margin: EdgeInsets.only(
left: 10.w, right: 10.w, bottom: 12.w),
height: 1.w,
),
Container(
padding: EdgeInsets.only(
left: 11.5.w, bottom: 8.w, right: 10.w),
child: Column(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: controller.orderCompleteds.map((model) {
return Padding(
padding: EdgeInsets.only(top: 12.w),
child: Row(
mainAxisAlignment:
MainAxisAlignment.spaceBetween,
children: [
Text(
model.name,
style: TextStyle(
fontSize: 13.w,
height: 1.6.w,
color: Colours.c9),
),
controller.orderCompleteds.indexOf(model) == 0 ?
GestureDetector(
onTap: () {
showModalBottomSheet(
context: context,
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.vertical(top: Radius.circular(8.w)),
),
builder: (BuildContext context) {
return RefundedDetailsPage(totalPrice: controller.model.totalPrice.toString(),
couponPrice: controller.model.couponPrice.toString(),
integralPrice: controller.model.integralPrice.toString(),);
},
).then((value) {
print('点击了应付款后面');
});
},
child: Row(
mainAxisAlignment:
MainAxisAlignment.spaceBetween,
children: [
Text(
'共减 ¥ ${model.other.toString()}',
style: TextStyle(
fontSize: 13.w,
height: 1.6,
color: AppTheme.primary,
),
),
SizedBox(
width: 8.w,
},
child: Row(
mainAxisAlignment:
MainAxisAlignment.spaceBetween,
children: [
Text(
'共减 ¥ ${model.other.toString()}',
style: TextStyle(
fontSize: 13.w,
height: 1.6,
color: AppTheme.primary,
),
Text(
'合计${model.value.toString()}',
style: TextStyle(
fontSize: 13.w,
height: 1.6,
color: Colours.c9,
),
),
SizedBox(
width: 8.w,
),
Text(
'合计${model.value.toString()}',
style: TextStyle(
fontSize: 13.w,
height: 1.6,
color: Colours.c9,
),
Gaps.hGaps8,
Padding(
padding:
EdgeInsets.only(top: 4.w),
child: Image.asset(
'assets/images/right_arrow.png',
),
),
Gaps.hGaps8,
Padding(
padding:
EdgeInsets.only(top: 4.w),
child: Image.asset(
'assets/images/right_arrow.png',
),
],
))
: Padding(
padding:
EdgeInsets.only(right: 12.5.w),
child: Text(
model.value.toString(),
style: TextStyle(
fontSize: 13.w,
height: 1.6.w,
color: Colours.c9),
),
),
],
))
: Padding(
padding:
EdgeInsets.only(right: 12.5.w),
child: Text(
model.value.toString(),
style: TextStyle(
fontSize: 13.w,
height: 1.6.w,
color: Colours.c9),
),
],
),
);
}).toList(),
),
),
SizedBox(
height: 14.5.w,
),
],
),
);
}).toList(),
),
],
),
),
SizedBox(
height: 14.5.w,
),
],
),
),
// SizedBox(height: 4.w,),
// Container(
// width: double.infinity,
// margin: EdgeInsets.symmetric(
// horizontal: AppTheme.margin),
// decoration: BoxDecoration(
// borderRadius: BorderRadius.circular(8.w),
// color: Colors.white,
// boxShadow: [
// BoxShadow(
// color: Colours.cC7.withOpacity(0.5),
// offset: Offset(3.w, 0),
// blurRadius: 10.w,
// spreadRadius: 0.w,
// ),
// ],
// ),
// child: ClipRRect(
// borderRadius: BorderRadius.circular(8.w),
// child: Container(margin: EdgeInsets.only(top:24.w,left:11.5.w,right: 23.5.w,bottom: 24.w),
// child: Column(
// mainAxisAlignment: MainAxisAlignment.start,
// crossAxisAlignment: CrossAxisAlignment.start,
// children: [
// Text('退款原因',style: TextStyle(fontSize: 13.w,color: Colours.c9),),
// SizedBox(height: 8.w,),
// Text(controller.model.refundReason.toString(),style: TextStyle(fontSize: 13.w,color: Colours.c3),)
// ],
// ),
// ),
// ),
// )
],),
)),
);
),
// SizedBox(height: 4.w,),
// Container(
// width: double.infinity,
// margin: EdgeInsets.symmetric(
// horizontal: AppTheme.margin),
// decoration: BoxDecoration(
// borderRadius: BorderRadius.circular(8.w),
// color: Colors.white,
// boxShadow: [
// BoxShadow(
// color: Colours.cC7.withOpacity(0.5),
// offset: Offset(3.w, 0),
// blurRadius: 10.w,
// spreadRadius: 0.w,
// ),
// ],
// ),
// child: ClipRRect(
// borderRadius: BorderRadius.circular(8.w),
// child: Container(margin: EdgeInsets.only(top:24.w,left:11.5.w,right: 23.5.w,bottom: 24.w),
// child: Column(
// mainAxisAlignment: MainAxisAlignment.start,
// crossAxisAlignment: CrossAxisAlignment.start,
// children: [
// Text('退款原因',style: TextStyle(fontSize: 13.w,color: Colours.c9),),
// SizedBox(height: 8.w,),
// Text(controller.model.refundReason.toString(),style: TextStyle(fontSize: 13.w,color: Colours.c3),)
// ],
// ),
// ),
// ),
// )
],),
));
}
}
......@@ -23,12 +23,7 @@ class _UserOrderCoinAwaitingState extends State<UserOrderCoinAwaitingPage> {
@override
Widget build(BuildContext context) {
return WillPopScope(
onWillPop: () async {
context.pop(true);
return false;
},
child: FutureBuilder(
return FutureBuilder(
future: myController.getOrderInfo(),
builder: (context, snapshot) {
if (snapshot.connectionState == ConnectionState.waiting) {
......@@ -39,290 +34,283 @@ class _UserOrderCoinAwaitingState extends State<UserOrderCoinAwaitingPage> {
),
);
} else {
return WillPopScope(
onWillPop: () async {
context.pop(true);
return false;
},
child: Scaffold(
appBar: CustomAppBar(
title: const Text('待支付'),
actions: [],
),
body: Column(
children: [
Container(
margin: EdgeInsets.symmetric(
horizontal: AppTheme.margin,
vertical: AppTheme.margin),
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(8.w),
color: Colors.white,
boxShadow: [
BoxShadow(
color: Colours.cC7.withOpacity(0.5),
offset: Offset(3.w, 0),
blurRadius: 10.w,
spreadRadius: 0.w,
),
],
),
child: ClipRRect(
borderRadius: BorderRadius.circular(8.w),
child: Column(
mainAxisAlignment: MainAxisAlignment.start,
mainAxisSize: MainAxisSize.min,
children: [
Padding(
padding: EdgeInsets.only(
left: 12.0.w,
top: 17.5.w,
bottom: 12.0.w),
child: Row(
mainAxisAlignment:
MainAxisAlignment.start,
crossAxisAlignment:
CrossAxisAlignment.start,
children: [
Image.asset(
'assets/images/coin.png',
// fit: BoxFit.cover, // 设置适应方式为充满
width: 42.0.w,
height: 42.0.w,
),
Expanded(
child: Padding(
padding:
EdgeInsets.only(right: 16.5.w),
child: Column(
mainAxisAlignment:
MainAxisAlignment
.spaceBetween,
crossAxisAlignment:
CrossAxisAlignment.end,
// 下面的Text靠左
children: [
Text(
'充值${myController.model.bean}紫荆币',
style: TextStyle(
color: Colours.c3,
fontWeight: Fonts.bold,
fontSize: 13.w,
),
maxLines: 2,
overflow: TextOverflow
.ellipsis, // 超过部分显示省略号
),
SizedBox(height: 9.w),
Text(
"需付款 ¥${myController.model.finalTotalPrice}",
style: TextStyle(
color: Colours.cAB1941,
fontWeight: Fonts.bold,
fontSize: 14.w,
),
),
],
),
),
),
],
),
),
Container(
color: Colours.cLine,
margin: EdgeInsets.only(
left: 10.w, right: 10.w, bottom: 12.w),
height: 1.w,
),
Container(
padding: EdgeInsets.only(
left: 11.5.w,
bottom: 8.w,
right: 23.5.w),
child: Column(
mainAxisAlignment:
MainAxisAlignment.spaceEvenly,
children: myController.orderAwaitings
.map((model) {
return Padding(
padding: EdgeInsets.only(top: 12.w),
child: Row(
return Scaffold(
appBar: CustomAppBar(
title: const Text('待支付'),
actions: [],
),
body: Column(
children: [
Container(
margin: EdgeInsets.symmetric(
horizontal: AppTheme.margin,
vertical: AppTheme.margin),
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(8.w),
color: Colors.white,
boxShadow: [
BoxShadow(
color: Colours.cC7.withOpacity(0.5),
offset: Offset(3.w, 0),
blurRadius: 10.w,
spreadRadius: 0.w,
),
],
),
child: ClipRRect(
borderRadius: BorderRadius.circular(8.w),
child: Column(
mainAxisAlignment: MainAxisAlignment.start,
mainAxisSize: MainAxisSize.min,
children: [
Padding(
padding: EdgeInsets.only(
left: 12.0.w,
top: 17.5.w,
bottom: 12.0.w),
child: Row(
mainAxisAlignment:
MainAxisAlignment.start,
crossAxisAlignment:
CrossAxisAlignment.start,
children: [
Image.asset(
'assets/images/coin.png',
// fit: BoxFit.cover, // 设置适应方式为充满
width: 42.0.w,
height: 42.0.w,
),
Expanded(
child: Padding(
padding:
EdgeInsets.only(right: 16.5.w),
child: Column(
mainAxisAlignment:
MainAxisAlignment.spaceBetween,
MainAxisAlignment
.spaceBetween,
crossAxisAlignment:
CrossAxisAlignment.end,
// 下面的Text靠左
children: [
Text(
model.name,
'充值${myController.model.bean}紫荆币',
style: TextStyle(
fontSize: 13.w,
height: 1.6.w,
color: Colours.c9),
color: Colours.c3,
fontWeight: Fonts.bold,
fontSize: 13.w,
),
maxLines: 2,
overflow: TextOverflow
.ellipsis, // 超过部分显示省略号
),
SizedBox(height: 9.w),
Text(
model.value.toString(),
"需付款 ¥${myController.model.finalTotalPrice}",
style: TextStyle(
fontSize: 13.w,
height: 1.6.w,
color: Colours.c3),
color: Colours.cAB1941,
fontWeight: Fonts.bold,
fontSize: 14.w,
),
),
],
),
);
}).toList(),
),
),
),
],
),
SizedBox(
height: 13.5.w,
),
Container(
color: Colours.cLine,
margin: EdgeInsets.only(
left: 10.w, right: 10.w, bottom: 12.w),
height: 1.w,
),
Container(
padding: EdgeInsets.only(
left: 11.5.w,
bottom: 8.w,
right: 23.5.w),
child: Column(
mainAxisAlignment:
MainAxisAlignment.spaceEvenly,
children: myController.orderAwaitings
.map((model) {
return Padding(
padding: EdgeInsets.only(top: 12.w),
child: Row(
mainAxisAlignment:
MainAxisAlignment.spaceBetween,
children: [
Text(
model.name,
style: TextStyle(
fontSize: 13.w,
height: 1.6.w,
color: Colours.c9),
),
Text(
model.value.toString(),
style: TextStyle(
fontSize: 13.w,
height: 1.6.w,
color: Colours.c3),
),
],
),
);
}).toList(),
),
],
),
),
SizedBox(
height: 13.5.w,
),
],
),
),
SizedBox(
height: 11.5.w,
),
GestureDetector(
onTap: (){
myController.payOrder();
},
child: Container(
margin: EdgeInsets.symmetric(horizontal: 15.w),
height: 40.w,
decoration: BoxDecoration(
color: AppTheme.primary,
borderRadius: BorderRadius.circular(180.w),
border: Border.all(
color: Colours.cC31F4C, width: 0.5.w)),
child: Center(
child: Text(
'立即支付 ¥${myController.model.finalTotalPrice}',
style: TextStyle(
fontWeight: Fonts.medium,
fontSize: 14.w,
color: Colours.cFF),
),
),
SizedBox(
height: 11.5.w,
),
GestureDetector(
onTap: (){
myController.payOrder();
},
child: Container(
margin: EdgeInsets.symmetric(horizontal: 15.w),
height: 40.w,
decoration: BoxDecoration(
color: AppTheme.primary,
borderRadius: BorderRadius.circular(180.w),
border: Border.all(
color: Colours.cC31F4C, width: 0.5.w)),
child: Center(
child: Text(
'立即支付 ¥${myController.model.finalTotalPrice}',
style: TextStyle(
fontWeight: Fonts.medium,
fontSize: 14.w,
color: Colours.cFF),
),
),
),
SizedBox(
height: 11.5.w,
),
GestureDetector(
onTap: () {
showDialog(
context: context,
builder: (BuildContext context) {
return AlertDialog(
shape: RoundedRectangleBorder(
borderRadius:
BorderRadius.circular(8.0.w),
),
contentPadding: EdgeInsets.zero,
// 移除内容部分的内边距
content: Wrap(
),
SizedBox(
height: 11.5.w,
),
GestureDetector(
onTap: () {
showDialog(
context: context,
builder: (BuildContext context) {
return AlertDialog(
shape: RoundedRectangleBorder(
borderRadius:
BorderRadius.circular(8.0.w),
),
contentPadding: EdgeInsets.zero,
// 移除内容部分的内边距
content: Wrap(
children: [
Container(
margin: EdgeInsets.only(
top: 44.w,
bottom: 29.w), // 调整上下间距
child: Center(
child: Text(
'确定取消订单吗',
style: TextStyle(
fontSize: 15.w,
fontWeight: Fonts.medium,
color: Colours.c3,
),
),
),
),
Container(
height: 1.w, // 设置分割线的高度
width: double.infinity, // 设置分割线的宽度
color: Colours.cLine, // 设置分割线的颜色
),
],
),
// 去除操作按钮区域的内边距
actionsPadding: EdgeInsets.zero,
actions: <Widget>[
Row(
mainAxisAlignment:
MainAxisAlignment.spaceEvenly,
// 或者使用MainAxisAlignment.spaceEvenly
children: [
Container(
margin: EdgeInsets.only(
top: 44.w,
bottom: 29.w), // 调整上下间距
child: Center(
child: Text(
'确定取消订单吗',
GestureDetector(
onTap: () =>
Navigator.of(context).pop(),
child:Container(
width: 105.w,
color: Colours.cFF,
alignment: Alignment.center,
child: const Text(
'取消',
style: TextStyle(
fontSize: 15.w,
fontSize: 14,
fontWeight: Fonts.medium,
color: Colours.c3,
color: Colours.c6,
),
),
),
),
Container(
height: 1.w, // 设置分割线的高度
width: double.infinity, // 设置分割线的宽度
height: 39.5.w, // 设置分割线的高度
width: 1, // 设置分割线的宽度
color: Colours.cLine, // 设置分割线的颜色
),
],
),
// 去除操作按钮区域的内边距
actionsPadding: EdgeInsets.zero,
actions: <Widget>[
Row(
mainAxisAlignment:
MainAxisAlignment.spaceEvenly,
// 或者使用MainAxisAlignment.spaceEvenly
children: [
GestureDetector(
onTap: () =>
Navigator.of(context).pop(),
child:Container(
width: 105.w,
color: Colours.cFF,
alignment: Alignment.center,
child: const Text(
'取消',
style: TextStyle(
fontSize: 14,
fontWeight: Fonts.medium,
color: Colours.c6,
),
),
),
),
Container(
height: 39.5.w, // 设置分割线的高度
width: 1, // 设置分割线的宽度
color: Colours.cLine, // 设置分割线的颜色
),
GestureDetector(
onTap: () async {
Future<bool> result = myController.cancelPay();
if(await result){
Navigator.of(context).pop();
context.pop(true);
}
},
child:Container(
width: 105.w,
color: Colours.cFF,
alignment: Alignment.center,
child: const Text(
'确定',
style: TextStyle(
fontSize: 14,
fontWeight: Fonts.boldSemi,
color: Colours.cAB1941,
),
GestureDetector(
onTap: () async {
Future<bool> result = myController.cancelPay();
if(await result){
Navigator.of(context).pop();
context.pop(true);
}
},
child:Container(
width: 105.w,
color: Colours.cFF,
alignment: Alignment.center,
child: const Text(
'确定',
style: TextStyle(
fontSize: 14,
fontWeight: Fonts.boldSemi,
color: Colours.cAB1941,
),
),
),
],
),
],
);
},
);
},
child: Container(
width: 105.w,
color: Colours.cFF,
alignment: Alignment.center,
child: const Text(
'取消订单',
style: TextStyle(
fontWeight: Fonts.medium,
fontSize: 15,
color: Colours.c9,
),
),
],
),
],
);
},
);
},
child: Container(
width: 105.w,
color: Colours.cFF,
alignment: Alignment.center,
child: const Text(
'取消订单',
style: TextStyle(
fontWeight: Fonts.medium,
fontSize: 15,
color: Colours.c9,
),
),
),
],
),
),
],
),
);
}
},
),
);
}
}
......@@ -23,12 +23,7 @@ class _UserOrderCoinAwaitingState extends State<UserOrderCoinCancelPage> {
@override
Widget build(BuildContext context) {
return WillPopScope(
onWillPop: () async {
context.pop(true);
return false;
},
child: FutureBuilder(
return FutureBuilder(
future: myController.getOrderInfo(),
builder: (context, snapshot) {
if (snapshot.connectionState == ConnectionState.waiting) {
......@@ -39,155 +34,148 @@ class _UserOrderCoinAwaitingState extends State<UserOrderCoinCancelPage> {
),
);
} else {
return WillPopScope(
onWillPop: () async {
context.pop(true);
return false;
},
child: Scaffold(
appBar: CustomAppBar(
title: const Text('已取消'),
actions: [],
),
body: Column(
children: [
Container(
margin: EdgeInsets.symmetric(
horizontal: AppTheme.margin,
vertical: AppTheme.margin),
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(8.w),
color: Colors.white,
boxShadow: [
BoxShadow(
color: Colours.cC7.withOpacity(0.5),
offset: Offset(3.w, 0),
blurRadius: 10.w,
spreadRadius: 0.w,
),
],
),
child: ClipRRect(
borderRadius: BorderRadius.circular(8.w),
child: Column(
mainAxisAlignment: MainAxisAlignment.start,
mainAxisSize: MainAxisSize.min,
children: [
Padding(
padding: EdgeInsets.only(
left: 12.0.w,
top: 17.5.w,
bottom: 12.0.w),
child: Row(
mainAxisAlignment:
MainAxisAlignment.start,
crossAxisAlignment:
CrossAxisAlignment.start,
children: [
Image.asset(
'assets/images/coin.png',
// fit: BoxFit.cover, // 设置适应方式为充满
width: 42.0.w,
height: 42.0.w,
),
Expanded(
child: Padding(
padding:
EdgeInsets.only(right: 16.5.w),
child: Column(
mainAxisAlignment:
MainAxisAlignment
.spaceBetween,
crossAxisAlignment:
CrossAxisAlignment.end,
// 下面的Text靠左
children: [
Text(
'充值${myController.model.bean}紫荆币',
style: TextStyle(
color: Colours.c3,
fontWeight: Fonts.bold,
fontSize: 13.w,
),
maxLines: 2,
overflow: TextOverflow
.ellipsis, // 超过部分显示省略号
),
SizedBox(height: 9.w),
// Text(
// "需付款 ¥${myController.model.finalTotalPrice}",
// style: TextStyle(
// color: Colours.cAB1941,
// fontWeight: Fonts.bold,
// fontSize: 14.w,
// ),
// ),
],
),
),
),
],
),
),
Container(
color: Colours.cLine,
margin: EdgeInsets.only(
left: 10.w, right: 10.w, bottom: 12.w),
height: 1.w,
),
Container(
padding: EdgeInsets.only(
left: 11.5.w,
bottom: 8.w,
right: 23.5.w),
child: Column(
mainAxisAlignment:
MainAxisAlignment.spaceEvenly,
children: myController.orderAwaitings
.map((model) {
return Padding(
padding: EdgeInsets.only(top: 12.w),
child: Row(
return Scaffold(
appBar: CustomAppBar(
title: const Text('已取消'),
actions: [],
),
body: Column(
children: [
Container(
margin: EdgeInsets.symmetric(
horizontal: AppTheme.margin,
vertical: AppTheme.margin),
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(8.w),
color: Colors.white,
boxShadow: [
BoxShadow(
color: Colours.cC7.withOpacity(0.5),
offset: Offset(3.w, 0),
blurRadius: 10.w,
spreadRadius: 0.w,
),
],
),
child: ClipRRect(
borderRadius: BorderRadius.circular(8.w),
child: Column(
mainAxisAlignment: MainAxisAlignment.start,
mainAxisSize: MainAxisSize.min,
children: [
Padding(
padding: EdgeInsets.only(
left: 12.0.w,
top: 17.5.w,
bottom: 12.0.w),
child: Row(
mainAxisAlignment:
MainAxisAlignment.start,
crossAxisAlignment:
CrossAxisAlignment.start,
children: [
Image.asset(
'assets/images/coin.png',
// fit: BoxFit.cover, // 设置适应方式为充满
width: 42.0.w,
height: 42.0.w,
),
Expanded(
child: Padding(
padding:
EdgeInsets.only(right: 16.5.w),
child: Column(
mainAxisAlignment:
MainAxisAlignment.spaceBetween,
MainAxisAlignment
.spaceBetween,
crossAxisAlignment:
CrossAxisAlignment.end,
// 下面的Text靠左
children: [
Text(
model.name,
'充值${myController.model.bean}紫荆币',
style: TextStyle(
fontSize: 13.w,
height: 1.6.w,
color: Colours.c9),
),
Text(
model.value.toString(),
style: TextStyle(
fontSize: 13.w,
height: 1.6.w,
color: Colours.c3),
color: Colours.c3,
fontWeight: Fonts.bold,
fontSize: 13.w,
),
maxLines: 2,
overflow: TextOverflow
.ellipsis, // 超过部分显示省略号
),
SizedBox(height: 9.w),
// Text(
// "需付款 ¥${myController.model.finalTotalPrice}",
// style: TextStyle(
// color: Colours.cAB1941,
// fontWeight: Fonts.bold,
// fontSize: 14.w,
// ),
// ),
],
),
);
}).toList(),
),
),
),
],
),
SizedBox(
height: 13.5.w,
),
Container(
color: Colours.cLine,
margin: EdgeInsets.only(
left: 10.w, right: 10.w, bottom: 12.w),
height: 1.w,
),
Container(
padding: EdgeInsets.only(
left: 11.5.w,
bottom: 8.w,
right: 23.5.w),
child: Column(
mainAxisAlignment:
MainAxisAlignment.spaceEvenly,
children: myController.orderAwaitings
.map((model) {
return Padding(
padding: EdgeInsets.only(top: 12.w),
child: Row(
mainAxisAlignment:
MainAxisAlignment.spaceBetween,
children: [
Text(
model.name,
style: TextStyle(
fontSize: 13.w,
height: 1.6.w,
color: Colours.c9),
),
Text(
model.value.toString(),
style: TextStyle(
fontSize: 13.w,
height: 1.6.w,
color: Colours.c3),
),
],
),
);
}).toList(),
),
],
),
),
SizedBox(
height: 13.5.w,
),
],
),
),
SizedBox(
height: 11.5.w,
),
],
),
),
SizedBox(
height: 11.5.w,
),
],
),
);
}
},
),
);
}
}
......@@ -23,12 +23,7 @@ class _UserOrderCoinAwaitingState extends State<UserOrderCoinCompletedPage> {
@override
Widget build(BuildContext context) {
return WillPopScope(
onWillPop: () async {
context.pop(true);
return false;
},
child: FutureBuilder(
return FutureBuilder(
future: myController.getOrderInfo(),
builder: (context, snapshot) {
if (snapshot.connectionState == ConnectionState.waiting) {
......@@ -39,155 +34,148 @@ class _UserOrderCoinAwaitingState extends State<UserOrderCoinCompletedPage> {
),
);
} else {
return WillPopScope(
onWillPop: () async {
context.pop(true);
return false;
},
child: Scaffold(
appBar: CustomAppBar(
title: const Text('已完成'),
actions: [],
),
body: Column(
children: [
Container(
margin: EdgeInsets.symmetric(
horizontal: AppTheme.margin,
vertical: AppTheme.margin),
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(8.w),
color: Colors.white,
boxShadow: [
BoxShadow(
color: Colours.cC7.withOpacity(0.5),
offset: Offset(3.w, 0),
blurRadius: 10.w,
spreadRadius: 0.w,
),
],
),
child: ClipRRect(
borderRadius: BorderRadius.circular(8.w),
child: Column(
mainAxisAlignment: MainAxisAlignment.start,
mainAxisSize: MainAxisSize.min,
children: [
Padding(
padding: EdgeInsets.only(
left: 12.0.w,
top: 17.5.w,
bottom: 12.0.w),
child: Row(
mainAxisAlignment:
MainAxisAlignment.start,
crossAxisAlignment:
CrossAxisAlignment.start,
children: [
Image.asset(
'assets/images/coin.png',
// fit: BoxFit.cover, // 设置适应方式为充满
width: 42.0.w,
height: 42.0.w,
),
Expanded(
child: Padding(
padding:
EdgeInsets.only(right: 16.5.w),
child: Column(
mainAxisAlignment:
MainAxisAlignment
.spaceBetween,
crossAxisAlignment:
CrossAxisAlignment.end,
// 下面的Text靠左
children: [
Text(
'充值${myController.model.bean}紫荆币',
style: TextStyle(
color: Colours.c3,
fontWeight: Fonts.bold,
fontSize: 13.w,
),
maxLines: 2,
overflow: TextOverflow
.ellipsis, // 超过部分显示省略号
),
SizedBox(height: 9.w),
// Text(
// "需付款 ¥${myController.model.finalTotalPrice}",
// style: TextStyle(
// color: Colours.cAB1941,
// fontWeight: Fonts.bold,
// fontSize: 14.w,
// ),
// ),
],
),
),
),
],
),
),
Container(
color: Colours.cLine,
margin: EdgeInsets.only(
left: 10.w, right: 10.w, bottom: 12.w),
height: 1.w,
),
Container(
padding: EdgeInsets.only(
left: 11.5.w,
bottom: 8.w,
right: 23.5.w),
child: Column(
mainAxisAlignment:
MainAxisAlignment.spaceEvenly,
children: myController.orderAwaitings
.map((model) {
return Padding(
padding: EdgeInsets.only(top: 12.w),
child: Row(
return Scaffold(
appBar: CustomAppBar(
title: const Text('已完成'),
actions: [],
),
body: Column(
children: [
Container(
margin: EdgeInsets.symmetric(
horizontal: AppTheme.margin,
vertical: AppTheme.margin),
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(8.w),
color: Colors.white,
boxShadow: [
BoxShadow(
color: Colours.cC7.withOpacity(0.5),
offset: Offset(3.w, 0),
blurRadius: 10.w,
spreadRadius: 0.w,
),
],
),
child: ClipRRect(
borderRadius: BorderRadius.circular(8.w),
child: Column(
mainAxisAlignment: MainAxisAlignment.start,
mainAxisSize: MainAxisSize.min,
children: [
Padding(
padding: EdgeInsets.only(
left: 12.0.w,
top: 17.5.w,
bottom: 12.0.w),
child: Row(
mainAxisAlignment:
MainAxisAlignment.start,
crossAxisAlignment:
CrossAxisAlignment.start,
children: [
Image.asset(
'assets/images/coin.png',
// fit: BoxFit.cover, // 设置适应方式为充满
width: 42.0.w,
height: 42.0.w,
),
Expanded(
child: Padding(
padding:
EdgeInsets.only(right: 16.5.w),
child: Column(
mainAxisAlignment:
MainAxisAlignment.spaceBetween,
MainAxisAlignment
.spaceBetween,
crossAxisAlignment:
CrossAxisAlignment.end,
// 下面的Text靠左
children: [
Text(
model.name,
'充值${myController.model.bean}紫荆币',
style: TextStyle(
fontSize: 13.w,
height: 1.6.w,
color: Colours.c9),
),
Text(
model.value.toString(),
style: TextStyle(
fontSize: 13.w,
height: 1.6.w,
color: Colours.c3),
color: Colours.c3,
fontWeight: Fonts.bold,
fontSize: 13.w,
),
maxLines: 2,
overflow: TextOverflow
.ellipsis, // 超过部分显示省略号
),
SizedBox(height: 9.w),
// Text(
// "需付款 ¥${myController.model.finalTotalPrice}",
// style: TextStyle(
// color: Colours.cAB1941,
// fontWeight: Fonts.bold,
// fontSize: 14.w,
// ),
// ),
],
),
);
}).toList(),
),
),
),
],
),
SizedBox(
height: 13.5.w,
),
Container(
color: Colours.cLine,
margin: EdgeInsets.only(
left: 10.w, right: 10.w, bottom: 12.w),
height: 1.w,
),
Container(
padding: EdgeInsets.only(
left: 11.5.w,
bottom: 8.w,
right: 23.5.w),
child: Column(
mainAxisAlignment:
MainAxisAlignment.spaceEvenly,
children: myController.orderAwaitings
.map((model) {
return Padding(
padding: EdgeInsets.only(top: 12.w),
child: Row(
mainAxisAlignment:
MainAxisAlignment.spaceBetween,
children: [
Text(
model.name,
style: TextStyle(
fontSize: 13.w,
height: 1.6.w,
color: Colours.c9),
),
Text(
model.value.toString(),
style: TextStyle(
fontSize: 13.w,
height: 1.6.w,
color: Colours.c3),
),
],
),
);
}).toList(),
),
],
),
),
SizedBox(
height: 13.5.w,
),
],
),
),
SizedBox(
height: 11.5.w,
),
],
),
),
SizedBox(
height: 11.5.w,
),
],
),
);
}
},
),
);
}
}
......@@ -19,232 +19,226 @@ class _UserOrderCompletedState extends State<UserOrderCompletedPage> {
@override
Widget build(BuildContext context) {
return WillPopScope(
onWillPop: () async {
context.pop(true);
return false;
},
child: GetBuilder<UserOrderCompletedController>(
init: UserOrderCompletedController(widget.orderNum),
builder: (controller) => Scaffold(
appBar: CustomAppBar(
title: const Text('已完成'),
actions: [],
return GetBuilder<UserOrderCompletedController>(
init: UserOrderCompletedController(widget.orderNum),
builder: (controller) => Scaffold(
appBar: CustomAppBar(
title: const Text('已完成'),
actions: [],
),
body: Container(
width: double.infinity,
margin: EdgeInsets.symmetric(
horizontal: AppTheme.margin, vertical: AppTheme.margin),
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(8.w),
color: Colors.white,
boxShadow: [
BoxShadow(
color: Colours.cC7.withOpacity(0.5),
offset: Offset(3.w, 0),
blurRadius: 10.w,
spreadRadius: 0.w,
),
],
),
body: Container(
width: double.infinity,
margin: EdgeInsets.symmetric(
horizontal: AppTheme.margin, vertical: AppTheme.margin),
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(8.w),
color: Colors.white,
boxShadow: [
BoxShadow(
color: Colours.cC7.withOpacity(0.5),
offset: Offset(3.w, 0),
blurRadius: 10.w,
spreadRadius: 0.w,
),
],
),
child: ClipRRect(
borderRadius: BorderRadius.circular(8.w),
child: Column(
mainAxisAlignment: MainAxisAlignment.start,
mainAxisSize: MainAxisSize.min,
children: [
Padding(
padding: EdgeInsets.only(
left: 12.0.w, top: 12.0.w, bottom: 12.0.w),
child: Row(
mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Image.network(
controller.model.bookList==null?'http://zxts-book-file.zijingebook.com/2024-01/29/b91194564969b9151fa382807977282acdffa22d.jpg':
controller.model.bookList![0].img??'',
// 用实际图片链接替换
fit: BoxFit.cover, // 设置适应方式为充满
width: 72.0.w,
height: 86.0.w,
),
Expanded(
child: Padding(
padding: EdgeInsets.only(
left: 12.0.w, top: 5.5.w, right: 45.w),
child: Column(
mainAxisAlignment:
MainAxisAlignment.spaceBetween,
crossAxisAlignment:
CrossAxisAlignment.start, // 下面的Text靠左
children: [
Container(
height: 47.5.w,
child: Text(
controller.model.bookList==null?'':
controller.model.bookList![0].name??'',
style: TextStyle(
color: Colours.c3,
fontWeight: Fonts.bold,
fontSize: 13.w,
),
maxLines: 2,
overflow:
TextOverflow.ellipsis, // 超过部分显示省略号
),
),
Text(
${controller.model.totalPrice}",
style: TextStyle(
color: Colours.cAB1941,
fontWeight: Fonts.medium,
fontSize: 14.w,
),
),
],
),
),
),
],
),
),
Container(
color: Colours.cLine,
margin: EdgeInsets.only(
left: 10.w, right: 10.w, bottom: 12.w),
height: 1.w,
),
Container(
padding: EdgeInsets.only(
left: 11.5.w, bottom: 8.w, right: 10.w),
child: Column(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: controller.orderCompleteds.map((model) {
return Padding(
padding: EdgeInsets.only(top: 12.w),
child: Row(
child: ClipRRect(
borderRadius: BorderRadius.circular(8.w),
child: Column(
mainAxisAlignment: MainAxisAlignment.start,
mainAxisSize: MainAxisSize.min,
children: [
Padding(
padding: EdgeInsets.only(
left: 12.0.w, top: 12.0.w, bottom: 12.0.w),
child: Row(
mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Image.network(
controller.model.bookList==null?'http://zxts-book-file.zijingebook.com/2024-01/29/b91194564969b9151fa382807977282acdffa22d.jpg':
controller.model.bookList![0].img??'',
// 用实际图片链接替换
fit: BoxFit.cover, // 设置适应方式为充满
width: 72.0.w,
height: 86.0.w,
),
Expanded(
child: Padding(
padding: EdgeInsets.only(
left: 12.0.w, top: 5.5.w, right: 45.w),
child: Column(
mainAxisAlignment:
MainAxisAlignment.spaceBetween,
crossAxisAlignment:
CrossAxisAlignment.start, // 下面的Text靠左
children: [
Container(
height: 47.5.w,
child: Text(
controller.model.bookList==null?'':
controller.model.bookList![0].name??'',
style: TextStyle(
color: Colours.c3,
fontWeight: Fonts.bold,
fontSize: 13.w,
),
maxLines: 2,
overflow:
TextOverflow.ellipsis, // 超过部分显示省略号
),
),
Text(
model.name,
${controller.model.totalPrice}",
style: TextStyle(
fontSize: 13.w,
height: 1.6.w,
color: Colours.c9),
color: Colours.cAB1941,
fontWeight: Fonts.medium,
fontSize: 14.w,
),
),
controller.orderCompleteds.indexOf(model) == 0
? GestureDetector(
onTap: () {
showModalBottomSheet(
context: context,
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.vertical(top: Radius.circular(8.w)),
),
builder: (BuildContext context) {
return RefundedDetailsPage(totalPrice: controller.model.totalPrice.toString(),
couponPrice: controller.model.couponPrice.toString(),
integralPrice: controller.model.integralPrice.toString(),);
},
).then((value) {
print('点击了应付款后面');
});
},
child: Row(
mainAxisAlignment:
MainAxisAlignment.spaceBetween,
children: [
Text(
'共减 ¥ ${model.other.toString()}',
style: TextStyle(
fontSize: 13.w,
height: 1.6,
color: AppTheme.primary,
),
),
SizedBox(
width: 8.w,
],
),
),
),
],
),
),
Container(
color: Colours.cLine,
margin: EdgeInsets.only(
left: 10.w, right: 10.w, bottom: 12.w),
height: 1.w,
),
Container(
padding: EdgeInsets.only(
left: 11.5.w, bottom: 8.w, right: 10.w),
child: Column(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: controller.orderCompleteds.map((model) {
return Padding(
padding: EdgeInsets.only(top: 12.w),
child: Row(
mainAxisAlignment:
MainAxisAlignment.spaceBetween,
children: [
Text(
model.name,
style: TextStyle(
fontSize: 13.w,
height: 1.6.w,
color: Colours.c9),
),
controller.orderCompleteds.indexOf(model) == 0
? GestureDetector(
onTap: () {
showModalBottomSheet(
context: context,
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.vertical(top: Radius.circular(8.w)),
),
builder: (BuildContext context) {
return RefundedDetailsPage(totalPrice: controller.model.totalPrice.toString(),
couponPrice: controller.model.couponPrice.toString(),
integralPrice: controller.model.integralPrice.toString(),);
},
).then((value) {
print('点击了应付款后面');
});
},
child: Row(
mainAxisAlignment:
MainAxisAlignment.spaceBetween,
children: [
Text(
'共减 ¥ ${model.other.toString()}',
style: TextStyle(
fontSize: 13.w,
height: 1.6,
color: AppTheme.primary,
),
Text(
'合计${model.value.toString()}',
style: TextStyle(
fontSize: 13.w,
height: 1.6,
color: Colours.c3,
),
),
SizedBox(
width: 8.w,
),
Text(
'合计${model.value.toString()}',
style: TextStyle(
fontSize: 13.w,
height: 1.6,
color: Colours.c3,
),
Gaps.hGaps8,
Padding(
padding:
EdgeInsets.only(top: 4.w),
child: Image.asset(
'assets/images/right_arrow.png',
),
),
Gaps.hGaps8,
Padding(
padding:
EdgeInsets.only(top: 4.w),
child: Image.asset(
'assets/images/right_arrow.png',
),
],
))
: Padding(
padding:
EdgeInsets.only(right: 12.5.w),
child: Text(
model.value.toString(),
style: TextStyle(
fontSize: 13.w,
height: 1.6.w,
color: Colours.c3),
),
),
],
))
: Padding(
padding:
EdgeInsets.only(right: 12.5.w),
child: Text(
model.value.toString(),
style: TextStyle(
fontSize: 13.w,
height: 1.6.w,
color: Colours.c3),
),
],
),
);
}).toList(),
),
),
Container(
color: Colours.cLine,
margin: EdgeInsets.only(
left: 10.w, right: 10.w, top: 6.w, bottom: 13.w),
height: 1.w,
),
],
),
);
}).toList(),
),
Visibility(
visible: controller.judgeComments() ==0?false:true,
// visible: true,
child: Align(
alignment: Alignment.centerRight,
child: Padding(
padding: EdgeInsets.only(right: 15.2),
child: Container(
height: 23.w,
width: 60.w,
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(10.w),
border: Border.all(
color: Colours.cC31F4C, width: 0.5.w)),
child: Center(
child: GestureDetector(
onTap: () async {
final result = await context.pushNamed(Routes.orderEvaluate,extra:controller.model,
queryParameters: {'orderNum':controller.model.ordersnum});
if (result == true) {
controller.getOrderInfo(); }
},
child: Text(controller.judgeComments() ==1?'去评价':"继续评价",
style: TextStyle(
fontSize: 12.w, color: Colours.cC31F4C),
)),
),
),
Container(
color: Colours.cLine,
margin: EdgeInsets.only(
left: 10.w, right: 10.w, top: 6.w, bottom: 13.w),
height: 1.w,
),
Visibility(
visible: controller.judgeComments() ==0?false:true,
// visible: true,
child: Align(
alignment: Alignment.centerRight,
child: Padding(
padding: EdgeInsets.only(right: 15.2),
child: Container(
height: 23.w,
width: 60.w,
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(10.w),
border: Border.all(
color: Colours.cC31F4C, width: 0.5.w)),
child: Center(
child: GestureDetector(
onTap: () async {
final result = await context.pushNamed(Routes.orderEvaluate,extra:controller.model,
queryParameters: {'orderNum':controller.model.ordersnum}).then((value){
controller.getOrderInfo();
});
},
child: Text(controller.judgeComments() ==1?'去评价':"继续评价",
style: TextStyle(
fontSize: 12.w, color: Colours.cC31F4C),
)),
),
),
),
),
),
SizedBox(
height: 14.5.w,
),
],
),
SizedBox(
height: 14.5.w,
),
],
),
))),
);
),
)));
}
}
......@@ -29,12 +29,7 @@ class _UserOrderEvaluatePageState extends State<UserOrderEvaluatePage> with Auto
@override
Widget build(BuildContext context) {
// super.build(context);
return WillPopScope(
onWillPop: () async {
context.pop(true);
return false;
},
child:GetBuilder<UserOrderEvaluateController>(
return GetBuilder<UserOrderEvaluateController>(
init: UserOrderEvaluateController(widget.orderNum),
builder: (controller) => Scaffold(
appBar: AppBar(
......@@ -95,7 +90,7 @@ class _UserOrderEvaluatePageState extends State<UserOrderEvaluatePage> with Auto
],
),
),
),),);
),);
}
Widget listItem(BookListModel bookListModel,int index,UserOrderEvaluateController myController) {
......
......@@ -12,233 +12,227 @@ class UserOrderRefundedPage extends StatefulWidget {
class _UserOrderRefundedState extends State<UserOrderRefundedPage> {
@override
Widget build(BuildContext context) {
return WillPopScope(
onWillPop: () async {
context.pop(true);
return false;
},
child: GetBuilder<UserOrderCRefundedController>(
init: UserOrderCRefundedController(widget.orderNum),
builder: (controller) => Scaffold(
appBar: CustomAppBar(
title: const Text('已退款'),
actions: [],
),
body:Column(children: [
Container(
width: double.infinity,
margin: EdgeInsets.symmetric(
horizontal: AppTheme.margin, vertical: AppTheme.margin),
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(8.w),
color: Colors.white,
boxShadow: [
BoxShadow(
color: Colours.cC7.withOpacity(0.5),
offset: Offset(3.w, 0),
blurRadius: 10.w,
spreadRadius: 0.w,
),
],
),
child: ClipRRect(
borderRadius: BorderRadius.circular(8.w),
child: Column(
mainAxisAlignment: MainAxisAlignment.start,
mainAxisSize: MainAxisSize.min,
children: [
Padding(
padding: EdgeInsets.only(
left: 8.0.w, top: 12.0.w, bottom: 12.0.w),
child: Row(
mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Image.network(
controller.model?.bookList==null?'http://zxts-book-file.zijingebook.com/2024-01/29/b91194564969b9151fa382807977282acdffa22d.jpg':
controller.model.bookList![0].img??'',
// 用实际图片链接替换
fit: BoxFit.cover, // 设置适应方式为充满
width: 72.0.w,
height: 86.0.w,
),
Expanded(
child: Padding(
padding: EdgeInsets.only(
left: 12.0.w, top: 5.5.w, right: 23.5.w),
child: Column(
mainAxisAlignment:
MainAxisAlignment.spaceBetween,
crossAxisAlignment:
CrossAxisAlignment.start, // 下面的Text靠左
children: [
Container(
height: 62.5.w,
child: Text(
controller.model?.bookList?[0].name??'',
style: TextStyle(
color: Colours.c3,
fontWeight: Fonts.bold,
fontSize: 13.w,
),
maxLines: 2,
overflow:
TextOverflow.ellipsis, // 超过部分显示省略号
return GetBuilder<UserOrderCRefundedController>(
init: UserOrderCRefundedController(widget.orderNum),
builder: (controller) => Scaffold(
appBar: CustomAppBar(
title: const Text('已退款'),
actions: [],
),
body:Column(children: [
Container(
width: double.infinity,
margin: EdgeInsets.symmetric(
horizontal: AppTheme.margin, vertical: AppTheme.margin),
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(8.w),
color: Colors.white,
boxShadow: [
BoxShadow(
color: Colours.cC7.withOpacity(0.5),
offset: Offset(3.w, 0),
blurRadius: 10.w,
spreadRadius: 0.w,
),
],
),
child: ClipRRect(
borderRadius: BorderRadius.circular(8.w),
child: Column(
mainAxisAlignment: MainAxisAlignment.start,
mainAxisSize: MainAxisSize.min,
children: [
Padding(
padding: EdgeInsets.only(
left: 8.0.w, top: 12.0.w, bottom: 12.0.w),
child: Row(
mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Image.network(
controller.model?.bookList==null?'http://zxts-book-file.zijingebook.com/2024-01/29/b91194564969b9151fa382807977282acdffa22d.jpg':
controller.model.bookList![0].img??'',
// 用实际图片链接替换
fit: BoxFit.cover, // 设置适应方式为充满
width: 72.0.w,
height: 86.0.w,
),
Expanded(
child: Padding(
padding: EdgeInsets.only(
left: 12.0.w, top: 5.5.w, right: 23.5.w),
child: Column(
mainAxisAlignment:
MainAxisAlignment.spaceBetween,
crossAxisAlignment:
CrossAxisAlignment.start, // 下面的Text靠左
children: [
Container(
height: 62.5.w,
child: Text(
controller.model?.bookList?[0].name??'',
style: TextStyle(
color: Colours.c3,
fontWeight: Fonts.bold,
fontSize: 13.w,
),
maxLines: 2,
overflow:
TextOverflow.ellipsis, // 超过部分显示省略号
),
Container(
alignment: Alignment.topRight,
child: Text(
${controller.model.totalPrice}",
style: TextStyle(
color: Colours.cAB1941,
fontWeight: Fonts.medium,
fontSize: 14.w,
),
),
Container(
alignment: Alignment.topRight,
child: Text(
${controller.model.totalPrice}",
style: TextStyle(
color: Colours.cAB1941,
fontWeight: Fonts.medium,
fontSize: 14.w,
),
)
),
)
],
),
],
),
),
],
),
),
],
),
Container(
color: Colours.cLine,
margin: EdgeInsets.only(
left: 10.w, right: 10.w, bottom: 12.w),
height: 1.w,
),
Container(
padding: EdgeInsets.only(
left: 11.5.w, bottom: 8.w, right: 10.w),
child: Column(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: controller.orderCompleteds.map((model) {
return Padding(
padding: EdgeInsets.only(bottom: 12.w),
child: Row(
mainAxisAlignment:
MainAxisAlignment.spaceBetween,
children: [
Text(
model.name,
style: TextStyle(
fontSize: 13.w,
height: 1.6.w,
color: Colours.c9),
),
controller.orderCompleteds.indexOf(model) == 0 ?
GestureDetector(
onTap: () {
showModalBottomSheet(
context: context,
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.vertical(top: Radius.circular(8.w)),
),
builder: (BuildContext context) {
return RefundedDetailsPage(totalPrice: controller.model.totalPrice.toString(),
couponPrice: controller.model.couponPrice.toString(),
integralPrice: controller.model.integralPrice.toString(),);
},
).then((value) {
print('点击了应付款后面');
});
),
Container(
color: Colours.cLine,
margin: EdgeInsets.only(
left: 10.w, right: 10.w, bottom: 12.w),
height: 1.w,
),
Container(
padding: EdgeInsets.only(
left: 11.5.w, bottom: 8.w, right: 10.w),
child: Column(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: controller.orderCompleteds.map((model) {
return Padding(
padding: EdgeInsets.only(bottom: 12.w),
child: Row(
mainAxisAlignment:
MainAxisAlignment.spaceBetween,
children: [
Text(
model.name,
style: TextStyle(
fontSize: 13.w,
height: 1.6.w,
color: Colours.c9),
),
controller.orderCompleteds.indexOf(model) == 0 ?
GestureDetector(
onTap: () {
showModalBottomSheet(
context: context,
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.vertical(top: Radius.circular(8.w)),
),
builder: (BuildContext context) {
return RefundedDetailsPage(totalPrice: controller.model.totalPrice.toString(),
couponPrice: controller.model.couponPrice.toString(),
integralPrice: controller.model.integralPrice.toString(),);
},
).then((value) {
print('点击了应付款后面');
});
},
child: Row(
mainAxisAlignment:
MainAxisAlignment.spaceBetween,
children: [
Text(
'共减 ¥ ${model.other.toString()}',
style: TextStyle(
fontSize: 13.w,
height: 1.6,
color: AppTheme.primary,
),
},
child: Row(
mainAxisAlignment:
MainAxisAlignment.spaceBetween,
children: [
Text(
'共减 ¥ ${model.other.toString()}',
style: TextStyle(
fontSize: 13.w,
height: 1.6,
color: AppTheme.primary,
),
SizedBox(
width: 8.w,
),
Text(
'合计${model.value.toString()}',
style: TextStyle(
fontSize: 13.w,
height: 1.6,
color: Colours.c9,
),
),
SizedBox(
width: 8.w,
),
Text(
'合计${model.value.toString()}',
style: TextStyle(
fontSize: 13.w,
height: 1.6,
color: Colours.c9,
),
Gaps.hGaps8,
Padding(
padding:
EdgeInsets.only(top: 4.w),
child: Image.asset(
'assets/images/right_arrow.png',
),
),
Gaps.hGaps8,
Padding(
padding:
EdgeInsets.only(top: 4.w),
child: Image.asset(
'assets/images/right_arrow.png',
),
],
))
: Padding(
padding:
EdgeInsets.only(right: 12.5.w),
child: Text(
model.value.toString(),
style: TextStyle(
fontSize: 13.w,
height: 1.6.w,
color: Colours.c9),
),
),
],
))
: Padding(
padding:
EdgeInsets.only(right: 12.5.w),
child: Text(
model.value.toString(),
style: TextStyle(
fontSize: 13.w,
height: 1.6.w,
color: Colours.c9),
),
],
),
);
}).toList(),
),
),
],
),
);
}).toList(),
),
// SizedBox(
// height: 2.5.w,
// ),
],
),
),
),
SizedBox(height: 4.w,),
Container(
width: double.infinity,
margin: EdgeInsets.symmetric(
horizontal: AppTheme.margin),
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(8.w),
color: Colors.white,
boxShadow: [
BoxShadow(
color: Colours.cC7.withOpacity(0.5),
offset: Offset(3.w, 0),
blurRadius: 10.w,
spreadRadius: 0.w,
),
// SizedBox(
// height: 2.5.w,
// ),
],
),
child: ClipRRect(
borderRadius: BorderRadius.circular(8.w),
child: Container(margin: EdgeInsets.only(top:13.w,left:11.5.w,right: 23.5.w,bottom: 24.w),
child: Column(
mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text('退款原因',style: TextStyle(fontSize: 13.w,color: Colours.c9),),
SizedBox(height: 8.w,),
Text(controller.model.refundReason.toString(),style: TextStyle(fontSize: 13.w,color: Colours.c3),)
],
),
),
),
SizedBox(height: 4.w,),
Container(
width: double.infinity,
margin: EdgeInsets.symmetric(
horizontal: AppTheme.margin),
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(8.w),
color: Colors.white,
boxShadow: [
BoxShadow(
color: Colours.cC7.withOpacity(0.5),
offset: Offset(3.w, 0),
blurRadius: 10.w,
spreadRadius: 0.w,
),
],
),
child: ClipRRect(
borderRadius: BorderRadius.circular(8.w),
child: Container(margin: EdgeInsets.only(top:13.w,left:11.5.w,right: 23.5.w,bottom: 24.w),
child: Column(
mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text('退款原因',style: TextStyle(fontSize: 13.w,color: Colours.c9),),
SizedBox(height: 8.w,),
Text(controller.model.refundReason.toString(),style: TextStyle(fontSize: 13.w,color: Colours.c3),)
],
),
),
)
],),
)),
);
),
)
],),
));
}
}
......@@ -10,52 +10,46 @@ class UserPointPage extends StatefulWidget {
class _UserPointPageState extends State<UserPointPage> {
@override
Widget build(BuildContext context) {
return WillPopScope(
onWillPop: () async {
context.pop(true);
return false;
},
child: GetBuilder<UserPointController>(
init: UserPointController(),
builder: (controller) => Scaffold(
appBar: AppBar(
title: const Text('积分'),
),
body: CustomPullScrollView(
controller: controller.refreshController,
onRefresh: controller.onRefresh,
onLoading: controller.onLoading,
child: controller.points.isEmpty?Container(
padding: EdgeInsets.only(top: 110.w),
alignment: Alignment.center,
child: Column(
crossAxisAlignment: CrossAxisAlignment.center,
children: [
SizedBox(height: 152.w, width: 195.w,
child: Image.asset( 'assets/images/none.png',),),
SizedBox(height: 13.w,),
],
),
):Container(
margin: EdgeInsets.all(10.w),
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(8.w),
color: Colors.white,
boxShadow: [
BoxShadow(
color: const Color(0xFFC7C7C7).withOpacity(0.5),
offset: Offset(3.w, 0),
blurRadius: 10.w,
spreadRadius: 0.w,
),
],
),
child: ListView.builder(
itemBuilder: (BuildContext context, int index){
return BuildCell(model: controller.points[index],);
},
itemCount: controller.points.length,
),
return GetBuilder<UserPointController>(
init: UserPointController(),
builder: (controller) => Scaffold(
appBar: AppBar(
title: const Text('积分'),
),
body: CustomPullScrollView(
controller: controller.refreshController,
onRefresh: controller.onRefresh,
onLoading: controller.onLoading,
child: controller.points.isEmpty?Container(
padding: EdgeInsets.only(top: 110.w),
alignment: Alignment.center,
child: Column(
crossAxisAlignment: CrossAxisAlignment.center,
children: [
SizedBox(height: 152.w, width: 195.w,
child: Image.asset( 'assets/images/none.png',),),
SizedBox(height: 13.w,),
],
),
):Container(
margin: EdgeInsets.all(10.w),
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(8.w),
color: Colors.white,
boxShadow: [
BoxShadow(
color: const Color(0xFFC7C7C7).withOpacity(0.5),
offset: Offset(3.w, 0),
blurRadius: 10.w,
spreadRadius: 0.w,
),
],
),
child: ListView.builder(
itemBuilder: (BuildContext context, int index){
return BuildCell(model: controller.points[index],);
},
itemCount: controller.points.length,
),
),
),
......
......@@ -12,179 +12,173 @@ class UserSecurityPage extends StatefulWidget {
class _UserSecurityPageState extends State<UserSecurityPage> {
@override
Widget build(BuildContext context) {
return WillPopScope(
onWillPop: () async {
context.pop(true);
return false;
},
child: Scaffold(
appBar: AppBar(
centerTitle: true,
title: const Text('账号安全'),
),
body: Column(
children: [
Container(
margin: EdgeInsets.symmetric(vertical: 10.w, horizontal: 10.w),
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(8.w),
color: Colors.white,
boxShadow: [
BoxShadow(
color: const Color(0xFFC7C7C7).withOpacity(0.5),
offset: Offset(3.w, 0),
blurRadius: 10.w,
spreadRadius: 0.w,
),
],
),
child: Column(
children: [
GestureDetector(
onTap: () {
context.pushNamed(Routes.changePhone);
},
child: _buildItem(
title: '修改手机号码', value: widget.model.phone ?? '')),
Container(
margin: EdgeInsets.symmetric(horizontal: 10.w),
height: 0.5.w,
color: Colours.cF0,
),
GestureDetector(
onTap: () {
String type = '1';
if (widget.model.password.toString().isEmpty){
type = '0';
}
context.pushNamed(Routes.changePwd, extra: widget.model,queryParameters: {'type':type});
},
child: _buildItem(
title: '修改密码',
value: widget.model.password.toString().isEmpty
? '未设置'
: '')),
],
),
return Scaffold(
appBar: AppBar(
centerTitle: true,
title: const Text('账号安全'),
),
body: Column(
children: [
Container(
margin: EdgeInsets.symmetric(vertical: 10.w, horizontal: 10.w),
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(8.w),
color: Colors.white,
boxShadow: [
BoxShadow(
color: const Color(0xFFC7C7C7).withOpacity(0.5),
offset: Offset(3.w, 0),
blurRadius: 10.w,
spreadRadius: 0.w,
),
],
),
Container(
margin: EdgeInsets.symmetric(horizontal: 10.w),
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(8.w),
color: Colors.white,
boxShadow: [
BoxShadow(
color: const Color(0xFFC7C7C7).withOpacity(0.5),
offset: Offset(3.w, 0),
blurRadius: 10.w,
spreadRadius: 0.w,
),
],
),
child: Column(
children: [
GestureDetector(
child: _buildItem(title: '账号注销', value: ''),
onTap: () async {
showDialog(
context: context,
builder: (BuildContext context) {
return AlertDialog(
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(8.0.w),
),
contentPadding: EdgeInsets.zero,
// 移除内容部分的内边距
content: Wrap(
child: Column(
children: [
GestureDetector(
onTap: () {
context.pushNamed(Routes.changePhone);
},
child: _buildItem(
title: '修改手机号码', value: widget.model.phone ?? '')),
Container(
margin: EdgeInsets.symmetric(horizontal: 10.w),
height: 0.5.w,
color: Colours.cF0,
),
GestureDetector(
onTap: () {
String type = '1';
if (widget.model.password.toString().isEmpty){
type = '0';
}
context.pushNamed(Routes.changePwd, extra: widget.model,queryParameters: {'type':type});
},
child: _buildItem(
title: '修改密码',
value: widget.model.password.toString().isEmpty
? '未设置'
: '')),
],
),
),
Container(
margin: EdgeInsets.symmetric(horizontal: 10.w),
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(8.w),
color: Colors.white,
boxShadow: [
BoxShadow(
color: const Color(0xFFC7C7C7).withOpacity(0.5),
offset: Offset(3.w, 0),
blurRadius: 10.w,
spreadRadius: 0.w,
),
],
),
child: Column(
children: [
GestureDetector(
child: _buildItem(title: '账号注销', value: ''),
onTap: () async {
showDialog(
context: context,
builder: (BuildContext context) {
return AlertDialog(
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(8.0.w),
),
contentPadding: EdgeInsets.zero,
// 移除内容部分的内边距
content: Wrap(
children: [
Container(
margin:
EdgeInsets.only(top: 44.w, bottom: 29.w),
// 调整上下间距
child: Center(
child: Text(
'确定注销账号吗',
style: TextStyle(
fontSize: 15.w,
fontWeight: Fonts.medium,
color: Colours.c3,
),
),
),
),
Container(
height: 1.w, // 设置分割线的高度
width: double.infinity, // 设置分割线的宽度
color: Colours.cLine, // 设置分割线的颜色
),
],
),
// 去除操作按钮区域的内边距
actionsPadding: EdgeInsets.zero,
actions: <Widget>[
Row(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: [
Container(
margin:
EdgeInsets.only(top: 44.w, bottom: 29.w),
// 调整上下间距
child: Center(
child: Text(
'确定注销账号吗',
GestureDetector(
onTap: () => Navigator.of(context).pop(),
child: Container(
width: 105.w,
color: Colours.cFF,
alignment: Alignment.center,
child: const Text(
'取消',
style: TextStyle(
fontSize: 15.w,
fontSize: 15,
fontWeight: Fonts.medium,
color: Colours.c3,
color: Colours.c6,
),
),
),
),
Container(
height: 1.w, // 设置分割线的高度
width: double.infinity, // 设置分割线的宽度
height: 39.5.w, // 设置分割线的高度
width: 1, // 设置分割线的宽度
color: Colours.cLine, // 设置分割线的颜色
),
],
),
// 去除操作按钮区域的内边距
actionsPadding: EdgeInsets.zero,
actions: <Widget>[
Row(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: [
GestureDetector(
onTap: () => Navigator.of(context).pop(),
child: Container(
width: 105.w,
color: Colours.cFF,
alignment: Alignment.center,
child: const Text(
'取消',
style: TextStyle(
fontSize: 15,
fontWeight: Fonts.medium,
color: Colours.c6,
),
),
),
),
Container(
height: 39.5.w, // 设置分割线的高度
width: 1, // 设置分割线的宽度
color: Colours.cLine, // 设置分割线的颜色
),
GestureDetector(
onTap: () async {
final result = await AccountAPI.delete();
if (result) {
CustomToast.loading();
await UserStore.to.logout();
CustomToast.dismiss();
if (context.mounted) {
context.goNamed(Routes.splash);
}
GestureDetector(
onTap: () async {
final result = await AccountAPI.delete();
if (result) {
CustomToast.loading();
await UserStore.to.logout();
CustomToast.dismiss();
if (context.mounted) {
context.goNamed(Routes.splash);
}
},
child: Container(
width: 105.w,
color: Colours.cFF,
alignment: Alignment.center,
child: const Text(
'确定',
style: TextStyle(
fontSize: 15,
fontWeight: Fonts.boldSemi,
color: Colours.cAB1941,
),
}
},
child: Container(
width: 105.w,
color: Colours.cFF,
alignment: Alignment.center,
child: const Text(
'确定',
style: TextStyle(
fontSize: 15,
fontWeight: Fonts.boldSemi,
color: Colours.cAB1941,
),
),
),
],
),
],
);
},
);
},
),
],
),
)
],
),
),
],
),
],
);
},
);
},
),
],
),
)
],
),
);
}
......
......@@ -25,7 +25,7 @@ const String kReadBook = '$kServerUrl/html/app/read.html';
// 答题页
const String kAnswer = '$kServerUrl/html/app/evaluating.html';
// 答题结果页
const String kAnswerResult = '$kServerUrl/html/app/evaluating_result.html';
const String kAnswerResult = 'http://150.158.138.40:9200/evaluating_result.html';
// 画廊 扩展阅读
const String kReadInfo = '$kServerUrl/html/app/read_info.html';
......
......@@ -91,14 +91,12 @@ class ValidatorTool {
// 密码
static bool isValidPassword(String value) {
RegExp passwordPattern = RegExp(r'^[A-Za-z0-9!@#\$%^&*()_+{}\[\]:;<>,.?~\\/-]{8,12}$');
// RegExp passwordPattern = RegExp(r'^(?=.*[A-Za-z])(?=.*\d)(?=.*[~@#%$*()_+{}\[\]:;<>,.?\\/-])[A-Za-z0-9~@#%$*()_+{}\[\]:;<>,.?\\/-]{8,12}$');
// RegExp passwordPattern = RegExp(r'^\d{6}$');
RegExp passwordPattern = RegExp(r'^(?:(?=.*[a-zA-Z])(?=.*[\d])(?=.*[~@#%$*_\-+=;:,.?])|(?=.*[a-zA-Z])(?=.*[\d])|(?=.*[\d])(?=.*[~@#%$*_\-+=;:,.?])|(?=.*[a-zA-Z])(?=.*[~@#%$*_\-+=;:,.?]))[\w~@#%$*_\-+=;:,.?]{8,12}$');
// 密码必须是数字、字母、特殊符号两种及以上8-12位的组合
return passwordPattern.hasMatch(value);
}
static bool isValidCode(String value) {
// RegExp passwordPattern = RegExp(r'^[A-Za-z0-9!@#\$%^&*()_+{}\[\]:;<>,.?~\\/-]{8,12}$');
RegExp passwordPattern = RegExp(r'^\d{6}$');
return passwordPattern.hasMatch(value);
}
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论