Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
B
book-app
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
EzijingWeb
book-app
Commits
15924952
提交
15924952
authored
2月 20, 2024
作者:
maodou
浏览文件
操作
浏览文件
下载
差异文件
Merge remote-tracking branch 'origin/test' into test
上级
26409a7f
e74a0d00
隐藏空白字符变更
内嵌
并排
正在显示
5 个修改的文件
包含
236 行增加
和
213 行删除
+236
-213
view.dart
lib/pages/book_detail/view.dart
+13
-3
banner.dart
lib/pages/course/widgets/banner.dart
+1
-1
view.dart
lib/pages/read_web/view.dart
+169
-163
index.dart
lib/pages/user_coin/index.dart
+1
-0
view.dart
lib/pages/user_coin/view.dart
+52
-46
没有找到文件。
lib/pages/book_detail/view.dart
浏览文件 @
15924952
...
...
@@ -133,7 +133,10 @@ class _BookDetailPageState extends State<BookDetailPage> with SingleTickerProvid
// 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
);
final
result
=
await
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
);
if
(
result
==
true
){
controller
.
getBookDetails
();
}
}
else
{
// 没有购买
...
...
@@ -159,11 +162,18 @@ class _BookDetailPageState extends State<BookDetailPage> with SingleTickerProvid
}
}
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
);
final
result
=
await
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
);
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
);
final
result
=
await
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
);
if
(
result
==
true
){
controller
.
getBookDetails
();
}
}
}
},
...
...
lib/pages/course/widgets/banner.dart
浏览文件 @
15924952
...
...
@@ -43,7 +43,7 @@ class BuildBanner extends StatelessWidget {
//CustomImage.network(item.pic??'',)
child:
GestureDetector
(
onTap:
(){
if
(
onTap
!=
null
)
onTap
!(
item
);
if
(
onTap
!=
null
&&
item
.
url
!.
isNotEmpty
)
onTap
!(
item
);
},
child:
ClipRRect
(
borderRadius:
BorderRadius
.
circular
(
8
.
w
),
...
...
lib/pages/read_web/view.dart
浏览文件 @
15924952
...
...
@@ -25,185 +25,191 @@ class _ReadPageState extends State<ReadPage> {
}
@override
Widget
build
(
BuildContext
context
)
{
return
GetBuilder
<
ReadController
>(
init:
ReadController
(
bookId:
widget
.
bookId
,
chapterId:
widget
.
chapterId
,
chapterName:
widget
.
chapterName
,
bookDetailModel:
widget
.
bookDetailModel
),
builder:
(
readController
)
=>
Scaffold
(
appBar:
CustomAppBar
(
title:
Text
(
readController
.
chapterName
),
centerTitle:
false
,
actions:
[
GestureDetector
(
onTap:
()
{
readController
.
getBookDown
();
},
child:
Text
(
'离线阅读'
,
style:
TextStyle
(
fontSize:
14
.
w
,
color:
Colours
.
c3
),
))
],
),
resizeToAvoidBottomInset:
false
,
floatingActionButton:
readController
.
show
&&
!
readController
.
toolModel
.
selected
?
GestureDetector
(
onTap:
(){
readController
.
setShowChat
(
true
);
readController
.
noteTitle
=
'你好你问你你等您第五年对哦in我ID呢哦win地哦为内地那打卡你打困哪'
;
readController
.
setChatType
(
1
);
},
child:
Image
.
asset
(
'assets/images/chat.png'
),
):
null
,
// floatingActionButtonAnimator: const NoAnimationFabAnimator(),
floatingActionButtonLocation:
MyFloatingActionButtonLocation
(),
body:
Container
(
color:
Colors
.
white
,
child:
Stack
(
children:
[
// Container(
// height: 40,
// width: double.infinity,
// color: Colors.lightBlue,
// ),
InAppWebView
(
initialUrlRequest:
URLRequest
(
url:
Uri
.
parse
(
'http://150.158.138.40:9200/read.html'
),
),
contextMenu:
ContextMenu
(
options:
ContextMenuOptions
(
hideDefaultSystemContextMenuItems:
true
),
),
onWebViewCreated:
(
InAppWebViewController
controller
){
readController
.
webViewController
=
controller
;
},
onConsoleMessage:
(
controller
,
consoleMessage
)
{
// 接收从 WebView 发送的消息
print
(
"Received message from WebView:
${consoleMessage.message}
"
);
return
WillPopScope
(
onWillPop:
()
async
{
context
.
pop
(
true
);
return
false
;
},
child:
GetBuilder
<
ReadController
>(
init:
ReadController
(
bookId:
widget
.
bookId
,
chapterId:
widget
.
chapterId
,
chapterName:
widget
.
chapterName
,
bookDetailModel:
widget
.
bookDetailModel
),
builder:
(
readController
)
=>
Scaffold
(
appBar:
CustomAppBar
(
title:
Text
(
readController
.
chapterName
),
centerTitle:
false
,
actions:
[
GestureDetector
(
onTap:
()
{
readController
.
getBookDown
();
},
onLoadStop:
(
controller
,
url
)
{
// flutter 主动给 js 传参数
Map
<
String
,
dynamic
>
param
=
{
'book_id'
:
readController
.
bookId
,
'chapter_id'
:
readController
.
chapterId
,
'token'
:
UserStore
.
to
.
token
};
Console
.
log
(
'param--------------------------------
$param
'
);
controller
.
evaluateJavascript
(
source
:
'callbackInFlutterComponent("
$param
");'
);
child:
Text
(
'离线阅读'
,
style:
TextStyle
(
fontSize:
14
.
w
,
color:
Colours
.
c3
),
))
],
),
resizeToAvoidBottomInset:
false
,
floatingActionButton:
readController
.
show
&&
!
readController
.
toolModel
.
selected
?
GestureDetector
(
onTap:
(){
readController
.
setShowChat
(
true
);
readController
.
noteTitle
=
'你好你问你你等您第五年对哦in我ID呢哦win地哦为内地那打卡你打困哪'
;
readController
.
setChatType
(
1
);
},
child:
Image
.
asset
(
'assets/images/chat.png'
),
):
null
,
// floatingActionButtonAnimator: const NoAnimationFabAnimator(),
floatingActionButtonLocation:
MyFloatingActionButtonLocation
(),
body:
Container
(
color:
Colors
.
white
,
child:
Stack
(
children:
[
// Container(
// height: 40,
// width: double.infinity,
// color: Colors.lightBlue,
// ),
InAppWebView
(
initialUrlRequest:
URLRequest
(
url:
Uri
.
parse
(
'http://150.158.138.40:9200/read.html'
),
),
contextMenu:
ContextMenu
(
options:
ContextMenuOptions
(
hideDefaultSystemContextMenuItems:
true
),
),
onWebViewCreated:
(
InAppWebViewController
controller
){
readController
.
webViewController
=
controller
;
},
onConsoleMessage:
(
controller
,
consoleMessage
)
{
// 接收从 WebView 发送的消息
print
(
"Received message from WebView:
${consoleMessage.message}
"
);
},
onLoadStop:
(
controller
,
url
)
{
// flutter 主动给 js 传参数
Map
<
String
,
dynamic
>
param
=
{
'book_id'
:
readController
.
bookId
,
'chapter_id'
:
readController
.
chapterId
,
'token'
:
UserStore
.
to
.
token
};
String
str
=
'
${readController.bookId}
,
${readController.chapterId}
,
${UserStore.to.token}
'
;
controller
.
evaluateJavascript
(
source
:
'callbackInFlutterComponent("
$str
");'
);
// 添加单击事件
controller
.
evaluateJavascript
(
source
:
'''
document.addEventListener('
click
', function() {
window.flutter_inappwebview.callHandler('
onTap
');
});
'''
);
// 添加单击事件
controller
.
evaluateJavascript
(
source
:
'''
document.addEventListener('
click
', function() {
window.flutter_inappwebview.callHandler('
onTap
');
});
'''
);
// 监听js单击回调
controller
.
addJavaScriptHandler
(
handlerName:
'onTap'
,
callback:
(
args
){
readController
.
setShow
(
readController
.
show
);
// 监听js单击回调
controller
.
addJavaScriptHandler
(
handlerName:
'onTap'
,
callback:
(
args
){
readController
.
setShow
(
readController
.
show
);
});
});
// 监听笔记回调
controller
.
addJavaScriptHandler
(
handlerName:
'noteCallBack'
,
callback:
(
args
){
});
// 监听笔记回调
controller
.
addJavaScriptHandler
(
handlerName:
'noteCallBack'
,
callback:
(
args
){
});
// 监听百科回调
controller
.
addJavaScriptHandler
(
handlerName:
'baikeCallBack'
,
callback:
(
args
){
context
.
pushNamed
(
Routes
.
baiKe
,
queryParameters:
{
'keyword'
:
args
});
});
// 监听百科回调
controller
.
addJavaScriptHandler
(
handlerName:
'baikeCallBack'
,
callback:
(
args
){
context
.
pushNamed
(
Routes
.
baiKe
,
queryParameters:
{
'keyword'
:
args
});
});
// 监听讨论回调
controller
.
addJavaScriptHandler
(
handlerName:
'discussCallBack'
,
callback:
(
args
){
readController
.
setShowChat
(
true
);
readController
.
setChatType
(
0
);
readController
.
titleInput
.
text
=
'11111'
;
});
// 监听讨论回调
controller
.
addJavaScriptHandler
(
handlerName:
'discussCallBack'
,
callback:
(
args
){
readController
.
setShowChat
(
true
);
readController
.
setChatType
(
0
);
readController
.
titleInput
.
text
=
'11111'
;
});
},
),
// AnimatedPositioned(
// duration: readController.controller.duration!,
// curve: Curves.easeInOut,
// top: readController.show ? 0 : -100, // 负值隐藏,0 显示
// left: 0,
// right: 0,
// height: 100,
// child: Container(
// color: Colors.limeAccent,
// alignment: Alignment.center,
// child: Text('top View'),
// ),
// ),
Positioned
(
left:
0
,
right:
0
,
top:
0
,
bottom:
49
,
child:
_showContent
(
readController
,
readController
.
toolModel
)
),
// AnimatedPositioned(
// duration: readController.controller.duration!,
// curve: Curves.easeInOut,
// bottom: readController.show ? 0 : -49 - MediaQuery.of(context).viewInsets.bottom, // 负值隐藏,0 显示
// left: 0,
// right: 0,
// height: 49,
// child: Container(
// color: Colors.limeAccent,
// alignment: Alignment.center,
// child: _createToolBar(readController)
// ),
// ),
/// 底部工具栏布局
Visibility
(
visible:
readController
.
show
,
child:
Positioned
(
left:
0
,
right:
0
,
bottom:
0
,
child:
SafeArea
(
child:
Container
(
height:
49
,
color:
Colors
.
limeAccent
,
alignment:
Alignment
.
center
,
child:
_createToolBar
(
readController
)
),
),
)
),
/// 悬浮按钮点击发起话题布局
Visibility
(
visible:
readController
.
showChat
,
child:
Positioned
(
},
),
// AnimatedPositioned(
// duration: readController.controller.duration!,
// curve: Curves.easeInOut,
// top: readController.show ? 0 : -100, // 负值隐藏,0 显示
// left: 0,
// right: 0,
// height: 100,
// child: Container(
// color: Colors.limeAccent,
// alignment: Alignment.center,
// child: Text('top View'),
// ),
// ),
Positioned
(
left:
0
,
right:
0
,
top:
0
,
bottom:
0
,
child:
GestureDetector
(
onTap:
(){
readController
.
setShowChat
(
false
);
readController
.
clearAllDiscussInput
();
},
child:
Container
(
color:
const
Color
(
0xFF000000
).
withOpacity
(
0.5
),
child:
SingleChildScrollView
(
reverse:
true
,
child:
Container
(
color:
Colors
.
white
,
padding:
EdgeInsets
.
only
(
bottom:
MediaQuery
.
of
(
context
).
viewInsets
.
bottom
),
// alignment:Alignment.bottomCenter,
child:
GestureDetector
(
behavior:
HitTestBehavior
.
opaque
,
onTap:
(){},
child:
ReadInputDiscuss
(
controller:
readController
,)
)
),
bottom:
49
,
child:
_showContent
(
readController
,
readController
.
toolModel
)
),
// AnimatedPositioned(
// duration: readController.controller.duration!,
// curve: Curves.easeInOut,
// bottom: readController.show ? 0 : -49 - MediaQuery.of(context).viewInsets.bottom, // 负值隐藏,0 显示
// left: 0,
// right: 0,
// height: 49,
// child: Container(
// color: Colors.limeAccent,
// alignment: Alignment.center,
// child: _createToolBar(readController)
// ),
// ),
/// 底部工具栏布局
Visibility
(
visible:
readController
.
show
,
child:
Positioned
(
left:
0
,
right:
0
,
bottom:
0
,
child:
SafeArea
(
child:
Container
(
height:
49
,
color:
Colors
.
limeAccent
,
alignment:
Alignment
.
center
,
child:
_createToolBar
(
readController
)
),
),
)
),
),
],
/// 悬浮按钮点击发起话题布局
Visibility
(
visible:
readController
.
showChat
,
child:
Positioned
(
left:
0
,
right:
0
,
top:
0
,
bottom:
0
,
child:
GestureDetector
(
onTap:
(){
readController
.
setShowChat
(
false
);
readController
.
clearAllDiscussInput
();
},
child:
Container
(
color:
const
Color
(
0xFF000000
).
withOpacity
(
0.5
),
child:
SingleChildScrollView
(
reverse:
true
,
child:
Container
(
color:
Colors
.
white
,
padding:
EdgeInsets
.
only
(
bottom:
MediaQuery
.
of
(
context
).
viewInsets
.
bottom
),
// alignment:Alignment.bottomCenter,
child:
GestureDetector
(
behavior:
HitTestBehavior
.
opaque
,
onTap:
(){},
child:
ReadInputDiscuss
(
controller:
readController
,)
)
),
),
),
)
),
),
],
),
),
),
),
),
);
...
...
lib/pages/user_coin/index.dart
浏览文件 @
15924952
...
...
@@ -12,6 +12,7 @@ import 'package:flutter_inapp_purchase/modules.dart';
import
'package:flutter_screenutil/flutter_screenutil.dart'
;
import
'package:fluwx/fluwx.dart'
;
import
'package:get/get.dart'
;
import
'package:go_router/go_router.dart'
;
import
'package:tobias/tobias.dart'
;
import
'../../apis/index.dart'
;
...
...
lib/pages/user_coin/view.dart
浏览文件 @
15924952
...
...
@@ -10,53 +10,59 @@ class UserCoinPage extends StatefulWidget {
class
_UserCoinPageState
extends
State
<
UserCoinPage
>
{
@override
Widget
build
(
BuildContext
context
)
{
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
)),
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
.
getCoin
();
});
},
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:
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
,
),
builder:
(
BuildContext
context
)
{
return
const
CoinRechargePage
();
},
).
then
((
value
)
{
controller
.
getCoin
();
});
},
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:
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
,
],
),
child:
ListView
.
builder
(
itemBuilder:
(
BuildContext
context
,
int
index
){
return
BuildCell
(
model:
controller
.
coins
[
index
],);
},
itemCount:
controller
.
coins
.
length
,
),
),
),
),
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论