Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
B
book-app
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
EzijingWeb
book-app
Commits
d02750e4
提交
d02750e4
authored
2月 18, 2024
作者:
yueweilu
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
消息跳转
上级
137e992f
隐藏空白字符变更
内嵌
并排
正在显示
3 个修改的文件
包含
203 行增加
和
179 行删除
+203
-179
view.dart
lib/pages/book_detail/view.dart
+147
-141
view.dart
lib/pages/user_msg/view.dart
+12
-0
view.dart
lib/pages/user_order/view.dart
+44
-38
没有找到文件。
lib/pages/book_detail/view.dart
浏览文件 @
d02750e4
...
...
@@ -20,161 +20,167 @@ class _BookDetailPageState extends State<BookDetailPage> with SingleTickerProvid
Widget
build
(
BuildContext
context
)
{
return
GetBuilder
<
BookDetailController
>(
init:
BookDetailController
(
widget
.
bookId
),
builder:
(
controller
)=>
Scaffold
(
appBar:
CustomAppBar
(
backgroundColor:
const
Color
(
0xFFAB1941
).
withOpacity
(
0.02
),
title:
const
Text
(
'详情'
),
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'
,
builder:
(
controller
)=>
WillPopScope
(
onWillPop:
()
async
{
context
.
pop
(
true
);
return
false
;
},
child:
Scaffold
(
appBar:
CustomAppBar
(
backgroundColor:
const
Color
(
0xFFAB1941
).
withOpacity
(
0.02
),
title:
const
Text
(
'详情'
),
actions:
[
CustomButton
.
icon
(
padding:
EdgeInsets
.
zero
,
backgroundColor:
Colors
.
transparent
,
icon:
Image
.
asset
(
'assets/images/shop.png'
),
onPressed:
()
=>
context
.
pushNamed
(
Routes
.
shop
),
),
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
.
medium
),
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
,
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
!);
},
),
),
Expanded
(
child:
TabBarView
(
controller:
controller
.
tabController
,
children:
[
BookCategoryPage
(
chapters:
controller
.
chapters
,
bookId:
controller
.
bookId
,
bookDetails:
controller
.
bookDetails
,),
Container
(
padding:
EdgeInsets
.
only
(
left:
15
.
w
,
right:
15
.
w
,
top:
12
.
w
),
color:
Colors
.
white
,
child:
Text
(
controller
.
bookDetails
.
content
??
''
,
style:
TextStyle
(
fontSize:
12
.
w
,
height:
1.5
,
color:
Colours
.
c3
),),
),
BookInfoPage
(
model:
controller
.
bookDetails
,)
],
],
),
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
.
medium
),
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
,
children:
[
BookCategoryPage
(
chapters:
controller
.
chapters
,
bookId:
controller
.
bookId
,
bookDetails:
controller
.
bookDetails
,),
Container
(
padding:
EdgeInsets
.
only
(
left:
15
.
w
,
right:
15
.
w
,
top:
12
.
w
),
color:
Colors
.
white
,
child:
Text
(
controller
.
bookDetails
.
content
??
''
,
style:
TextStyle
(
fontSize:
12
.
w
,
height:
1.5
,
color:
Colours
.
c3
),),
),
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
){
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
],
),
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
){
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),
),
// color: Colours.cE0.withOpacity(0.5),
// padding: EdgeInsets.symmetric(vertical: 8),
child:
controller
.
bookDetails
.
isHave
==
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
),),
),
// padding: EdgeInsets.symmetric(vertical: 8),
child:
controller
.
bookDetails
.
isHave
==
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
){
context
.
pushNamed
(
Routes
.
web
,
queryParameters:
{
'book_id'
:
controller
.
bookDetails
.
bookId
.
toString
(),
'chapter_id'
:
controller
.
bookDetails
.
chapterId
.
toString
(),
'chapter_name'
:
controller
.
bookDetails
.
chapterName
.
toString
()},
extra:
controller
.
bookDetails
);
}
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
);
// 1免费 0 不免费
if
(
controller
.
bookDetails
.
isFree
==
1
){
context
.
pushNamed
(
Routes
.
web
,
queryParameters:
{
'book_id'
:
controller
.
bookDetails
.
bookId
.
toString
(),
'chapter_id'
:
controller
.
bookDetails
.
chapterId
.
toString
(),
'chapter_name'
:
controller
.
bookDetails
.
chapterName
.
toString
()},
extra:
controller
.
bookDetails
);
}
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
();
final
result
=
await
context
.
pushNamed
(
Routes
.
bookPay
,
extra:
buy
);
if
(
result
==
true
)
{
controller
.
getBookDetails
();
}
}
}
else
{
context
.
pushNamed
(
Routes
.
web
,
queryParameters:
{
'book_id'
:
controller
.
bookDetails
.
bookId
.
toString
(),
'chapter_id'
:
controller
.
bookDetails
.
chapterId
.
toString
(),
'chapter_name'
:
controller
.
bookDetails
.
chapterName
.
toString
()},
extra:
controller
.
bookDetails
);
}
}
else
{
context
.
pushNamed
(
Routes
.
web
,
queryParameters:
{
'book_id'
:
controller
.
bookDetails
.
bookId
.
toString
(),
'chapter_id'
:
controller
.
bookDetails
.
chapterId
.
toString
(),
'chapter_name'
:
controller
.
bookDetails
.
chapterName
.
toString
()},
extra:
controller
.
bookDetails
);
else
{
context
.
pushNamed
(
Routes
.
web
,
queryParameters:
{
'book_id'
:
controller
.
bookDetails
.
bookId
.
toString
(),
'chapter_id'
:
controller
.
bookDetails
.
chapterId
.
toString
(),
'chapter_name'
:
controller
.
bookDetails
.
chapterName
.
toString
()},
extra:
controller
.
bookDetails
);
}
}
else
{
context
.
pushNamed
(
Routes
.
web
,
queryParameters:
{
'book_id'
:
controller
.
bookDetails
.
bookId
.
toString
(),
'chapter_id'
:
controller
.
bookDetails
.
chapterId
.
toString
(),
'chapter_name'
:
controller
.
bookDetails
.
chapterName
.
toString
()},
extra:
controller
.
bookDetails
);
}
}
}
},
child:
Container
(
decoration:
BoxDecoration
(
borderRadius:
BorderRadius
.
circular
(
17.5
.
w
),
color:
AppTheme
.
primary
.
withOpacity
(
0.1
)
},
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
),),
),
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
),),
),
)
,
)
]
,
)
],
)
,
),
),
),
...
...
lib/pages/user_msg/view.dart
浏览文件 @
d02750e4
...
...
@@ -35,12 +35,24 @@ class MsgPage extends StatelessWidget {
if
(
model
.
type
==
1
){
// 1订单支付快要超时(跳转订单详情)
final
result
=
await
context
.
pushNamed
(
Routes
.
order
);
if
(
result
==
true
){
controller
.
onRefresh
();
}
///TODO:
}
else
if
(
model
.
type
==
2
){
// 2 购买完成三天未评价(跳转订单列表--已完成)
final
result
=
await
context
.
pushNamed
(
Routes
.
order
);
if
(
result
==
true
){
controller
.
onRefresh
();
}
///TODO:
}
else
if
(
model
.
type
==
3
){
// 3 讨论有人回复的时候 (跳转对应书籍的讨论页面)
final
result
=
await
context
.
pushNamed
(
Routes
.
bookDetail
,
queryParameters:
{
'book_id'
:
model
.
urlId
?.
bookId
.
toString
()});
if
(
result
==
true
){
controller
.
onRefresh
();
}
}
else
if
(
model
.
type
==
4
){
// 4 订单完成后有新的积分增加(跳转用户积分记录页)
...
...
lib/pages/user_order/view.dart
浏览文件 @
d02750e4
...
...
@@ -76,46 +76,52 @@ class _UserOrderState extends State<UserOrderPage> with SingleTickerProviderStat
body: _buildBody(controller),
),
);*/
Scaffold
(
appBar:
CustomAppBar
(
automaticallyImplyLeading:
false
,
titleSpacing:
0
,
title:
Padding
(
padding:
EdgeInsets
.
symmetric
(
horizontal:
AppTheme
.
margin
),
child:
CustomInputSearch
(
controller:
searchController
,
readOnly:
false
,
hintText:
'搜索我的订单'
,
onTap:
()
{
// context.pushNamed(Routes.msgs);
},
onEditingComplete:
()
{
// _getOrders(
// isRefresh: true,
// keys: searchController.text,
// tabIndex: _tabController.index);
FocusNode
blankNode
=
FocusNode
();
FocusScope
.
of
(
context
).
requestFocus
(
blankNode
);
//指定为空白焦点
},
),
),
actions:
[
GestureDetector
(
onTap:
()
{
context
.
pop
();
},
child:
Container
(
padding:
EdgeInsets
.
only
(
left:
10
.
w
,
top:
10
.
w
,
bottom:
10
.
w
),
child:
Text
(
'取消'
,
style:
TextStyle
(
fontSize:
14
.
w
,
height:
1.5
,
color:
Colours
.
c3
),
WillPopScope
(
onWillPop:
()
async
{
context
.
pop
(
true
);
return
false
;
},
child:
Scaffold
(
appBar:
CustomAppBar
(
automaticallyImplyLeading:
false
,
titleSpacing:
0
,
title:
Padding
(
padding:
EdgeInsets
.
symmetric
(
horizontal:
AppTheme
.
margin
),
child:
CustomInputSearch
(
controller:
searchController
,
readOnly:
false
,
hintText:
'搜索我的订单'
,
onTap:
()
{
// context.pushNamed(Routes.msgs);
},
onEditingComplete:
()
{
// _getOrders(
// isRefresh: true,
// keys: searchController.text,
// tabIndex: _tabController.index);
FocusNode
blankNode
=
FocusNode
();
FocusScope
.
of
(
context
).
requestFocus
(
blankNode
);
//指定为空白焦点
},
),
),
)
],
),
body:
_buildBody
(),
actions:
[
GestureDetector
(
onTap:
()
{
context
.
pop
();
},
child:
Container
(
padding:
EdgeInsets
.
only
(
left:
10
.
w
,
top:
10
.
w
,
bottom:
10
.
w
),
child:
Text
(
'取消'
,
style:
TextStyle
(
fontSize:
14
.
w
,
height:
1.5
,
color:
Colours
.
c3
),
),
),
)
],
),
body:
_buildBody
(),
)
);
}
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论