Toggle navigation
Toggle navigation
This project
Loading...
Sign in
OnePoem
/
OnePoem-App
Go to a project
Toggle navigation
Toggle navigation pinning
Projects
Groups
Snippets
Help
Project
Activity
Repository
Pipelines
Graphs
Issues
0
Merge Requests
0
Wiki
Snippets
Network
Create a new issue
Builds
Commits
Issue Boards
Authored by
Reason Pun
2022-05-01 09:57:34 +0800
Browse Files
Options
Browse Files
Download
Email Patches
Plain Diff
Commit
9cdfd00e68c5c7a5b4efc2561aa5b57df8511422
9cdfd00e
1 parent
02df5f54
todo 上传临境
Show whitespace changes
Inline
Side-by-side
Showing
12 changed files
with
231 additions
and
127 deletions
lib/generated/json/auth_entity.g.dart
lib/generated/json/base/json_convert_content.dart
lib/generated/json/category_item_entity.g.dart
lib/generated/json/friend_entity.g.dart
lib/generated/json/lang_sort_entity.g.dart
lib/generated/json/search_entity.g.dart
lib/generated/json/setting_entity.g.dart
lib/generated/json/upload_entity.g.dart
lib/generated/json/user_entity.g.dart
lib/models/upload_entity.dart
lib/net/http_api.dart
lib/poem/page/poem_publish.dart
lib/generated/json/auth_entity.g.dart
View file @
9cdfd00
lib/generated/json/base/json_convert_content.dart
View file @
9cdfd00
...
...
@@ -8,12 +8,12 @@ import 'package:Parlando/account/models/user_entity.dart';
import
'package:Parlando/category/models/category_item_entity.dart'
;
import
'package:Parlando/home/models/setting_entity.dart'
;
import
'package:Parlando/login/models/auth_entity.dart'
;
import
'package:Parlando/models/upload_entity.dart'
;
import
'package:Parlando/poem/models/lang_sort_entity.dart'
;
import
'package:Parlando/poem/models/search_entity.dart'
;
import
'package:Parlando/timeline/models/friend_entity.dart'
;
JsonConvert
jsonConvert
=
JsonConvert
();
typedef
JsonConvertFunction
<
T
>
=
T
Function
(
Map
<
String
,
dynamic
>
json
);
class
JsonConvert
{
...
...
@@ -29,6 +29,9 @@ class JsonConvert {
(
AuthEntity
).
toString
():
AuthEntity
.
fromJson
,
(
AuthData
).
toString
():
AuthData
.
fromJson
,
(
AuthError
).
toString
():
AuthError
.
fromJson
,
(
UploadEntity
).
toString
():
UploadEntity
.
fromJson
,
(
UploadData
).
toString
():
UploadData
.
fromJson
,
(
UploadError
).
toString
():
UploadError
.
fromJson
,
(
LangSortEntity
).
toString
():
LangSortEntity
.
fromJson
,
(
SearchEntity
).
toString
():
SearchEntity
.
fromJson
,
(
SearchItems
).
toString
():
SearchItems
.
fromJson
,
...
...
@@ -111,115 +114,78 @@ class JsonConvert {
//list is returned by type
static
M
?
_getListChildType
<
M
>(
List
<
Map
<
String
,
dynamic
>>
data
)
{
if
(<
UserEntity
>[]
is
M
)
{
return
data
.
map
<
UserEntity
>((
Map
<
String
,
dynamic
>
e
)
=>
UserEntity
.
fromJson
(
e
))
.
toList
()
as
M
;
}
if
(<
UserData
>[]
is
M
)
{
return
data
.
map
<
UserData
>((
Map
<
String
,
dynamic
>
e
)
=>
UserData
.
fromJson
(
e
))
.
toList
()
as
M
;
}
if
(<
UserError
>[]
is
M
)
{
return
data
.
map
<
UserError
>((
Map
<
String
,
dynamic
>
e
)
=>
UserError
.
fromJson
(
e
))
.
toList
()
as
M
;
}
if
(<
CategoryItemEntity
>[]
is
M
)
{
return
data
.
map
<
CategoryItemEntity
>(
(
Map
<
String
,
dynamic
>
e
)
=>
CategoryItemEntity
.
fromJson
(
e
))
.
toList
()
as
M
;
}
if
(<
SettingEntity
>[]
is
M
)
{
return
data
.
map
<
SettingEntity
>(
(
Map
<
String
,
dynamic
>
e
)
=>
SettingEntity
.
fromJson
(
e
))
.
toList
()
as
M
;
}
if
(<
SettingData
>[]
is
M
)
{
return
data
.
map
<
SettingData
>((
Map
<
String
,
dynamic
>
e
)
=>
SettingData
.
fromJson
(
e
))
.
toList
()
as
M
;
}
if
(<
SettingDataLoginSetting
>[]
is
M
)
{
return
data
.
map
<
SettingDataLoginSetting
>(
(
Map
<
String
,
dynamic
>
e
)
=>
SettingDataLoginSetting
.
fromJson
(
e
))
.
toList
()
as
M
;
}
if
(<
SettingError
>[]
is
M
)
{
return
data
.
map
<
SettingError
>(
(
Map
<
String
,
dynamic
>
e
)
=>
SettingError
.
fromJson
(
e
))
.
toList
()
as
M
;
}
if
(<
AuthEntity
>[]
is
M
)
{
return
data
.
map
<
AuthEntity
>((
Map
<
String
,
dynamic
>
e
)
=>
AuthEntity
.
fromJson
(
e
))
.
toList
()
as
M
;
}
if
(<
AuthData
>[]
is
M
)
{
return
data
.
map
<
AuthData
>((
Map
<
String
,
dynamic
>
e
)
=>
AuthData
.
fromJson
(
e
))
.
toList
()
as
M
;
}
if
(<
AuthError
>[]
is
M
)
{
return
data
.
map
<
AuthError
>((
Map
<
String
,
dynamic
>
e
)
=>
AuthError
.
fromJson
(
e
))
.
toList
()
as
M
;
}
if
(<
LangSortEntity
>[]
is
M
)
{
return
data
.
map
<
LangSortEntity
>(
(
Map
<
String
,
dynamic
>
e
)
=>
LangSortEntity
.
fromJson
(
e
))
.
toList
()
as
M
;
}
if
(<
SearchEntity
>[]
is
M
)
{
return
data
.
map
<
SearchEntity
>(
(
Map
<
String
,
dynamic
>
e
)
=>
SearchEntity
.
fromJson
(
e
))
.
toList
()
as
M
;
}
if
(<
SearchItems
>[]
is
M
)
{
return
data
.
map
<
SearchItems
>((
Map
<
String
,
dynamic
>
e
)
=>
SearchItems
.
fromJson
(
e
))
.
toList
()
as
M
;
}
if
(<
SearchItemsOwner
>[]
is
M
)
{
return
data
.
map
<
SearchItemsOwner
>(
(
Map
<
String
,
dynamic
>
e
)
=>
SearchItemsOwner
.
fromJson
(
e
))
.
toList
()
as
M
;
}
if
(<
SearchItemsLicense
>[]
is
M
)
{
return
data
.
map
<
SearchItemsLicense
>(
(
Map
<
String
,
dynamic
>
e
)
=>
SearchItemsLicense
.
fromJson
(
e
))
.
toList
()
as
M
;
}
if
(<
FriendEntity
>[]
is
M
)
{
return
data
.
map
<
FriendEntity
>(
(
Map
<
String
,
dynamic
>
e
)
=>
FriendEntity
.
fromJson
(
e
))
.
toList
()
as
M
;
}
if
(<
FriendData
>[]
is
M
)
{
return
data
.
map
<
FriendData
>((
Map
<
String
,
dynamic
>
e
)
=>
FriendData
.
fromJson
(
e
))
.
toList
()
as
M
;
if
(<
UserEntity
>[]
is
M
){
return
data
.
map
<
UserEntity
>((
Map
<
String
,
dynamic
>
e
)
=>
UserEntity
.
fromJson
(
e
)).
toList
()
as
M
;
}
if
(<
UserData
>[]
is
M
){
return
data
.
map
<
UserData
>((
Map
<
String
,
dynamic
>
e
)
=>
UserData
.
fromJson
(
e
)).
toList
()
as
M
;
}
if
(<
UserError
>[]
is
M
){
return
data
.
map
<
UserError
>((
Map
<
String
,
dynamic
>
e
)
=>
UserError
.
fromJson
(
e
)).
toList
()
as
M
;
}
if
(<
CategoryItemEntity
>[]
is
M
){
return
data
.
map
<
CategoryItemEntity
>((
Map
<
String
,
dynamic
>
e
)
=>
CategoryItemEntity
.
fromJson
(
e
)).
toList
()
as
M
;
}
if
(<
SettingEntity
>[]
is
M
){
return
data
.
map
<
SettingEntity
>((
Map
<
String
,
dynamic
>
e
)
=>
SettingEntity
.
fromJson
(
e
)).
toList
()
as
M
;
}
if
(<
SettingData
>[]
is
M
){
return
data
.
map
<
SettingData
>((
Map
<
String
,
dynamic
>
e
)
=>
SettingData
.
fromJson
(
e
)).
toList
()
as
M
;
}
if
(<
SettingDataLoginSetting
>[]
is
M
){
return
data
.
map
<
SettingDataLoginSetting
>((
Map
<
String
,
dynamic
>
e
)
=>
SettingDataLoginSetting
.
fromJson
(
e
)).
toList
()
as
M
;
}
if
(<
SettingError
>[]
is
M
){
return
data
.
map
<
SettingError
>((
Map
<
String
,
dynamic
>
e
)
=>
SettingError
.
fromJson
(
e
)).
toList
()
as
M
;
}
if
(<
AuthEntity
>[]
is
M
){
return
data
.
map
<
AuthEntity
>((
Map
<
String
,
dynamic
>
e
)
=>
AuthEntity
.
fromJson
(
e
)).
toList
()
as
M
;
}
if
(<
AuthData
>[]
is
M
){
return
data
.
map
<
AuthData
>((
Map
<
String
,
dynamic
>
e
)
=>
AuthData
.
fromJson
(
e
)).
toList
()
as
M
;
}
if
(<
AuthError
>[]
is
M
){
return
data
.
map
<
AuthError
>((
Map
<
String
,
dynamic
>
e
)
=>
AuthError
.
fromJson
(
e
)).
toList
()
as
M
;
}
if
(<
UploadEntity
>[]
is
M
){
return
data
.
map
<
UploadEntity
>((
Map
<
String
,
dynamic
>
e
)
=>
UploadEntity
.
fromJson
(
e
)).
toList
()
as
M
;
}
if
(<
UploadData
>[]
is
M
){
return
data
.
map
<
UploadData
>((
Map
<
String
,
dynamic
>
e
)
=>
UploadData
.
fromJson
(
e
)).
toList
()
as
M
;
}
if
(<
UploadError
>[]
is
M
){
return
data
.
map
<
UploadError
>((
Map
<
String
,
dynamic
>
e
)
=>
UploadError
.
fromJson
(
e
)).
toList
()
as
M
;
}
if
(<
LangSortEntity
>[]
is
M
){
return
data
.
map
<
LangSortEntity
>((
Map
<
String
,
dynamic
>
e
)
=>
LangSortEntity
.
fromJson
(
e
)).
toList
()
as
M
;
}
if
(<
SearchEntity
>[]
is
M
){
return
data
.
map
<
SearchEntity
>((
Map
<
String
,
dynamic
>
e
)
=>
SearchEntity
.
fromJson
(
e
)).
toList
()
as
M
;
}
if
(<
SearchItems
>[]
is
M
){
return
data
.
map
<
SearchItems
>((
Map
<
String
,
dynamic
>
e
)
=>
SearchItems
.
fromJson
(
e
)).
toList
()
as
M
;
}
if
(<
SearchItemsOwner
>[]
is
M
){
return
data
.
map
<
SearchItemsOwner
>((
Map
<
String
,
dynamic
>
e
)
=>
SearchItemsOwner
.
fromJson
(
e
)).
toList
()
as
M
;
}
if
(<
SearchItemsLicense
>[]
is
M
){
return
data
.
map
<
SearchItemsLicense
>((
Map
<
String
,
dynamic
>
e
)
=>
SearchItemsLicense
.
fromJson
(
e
)).
toList
()
as
M
;
}
if
(<
FriendEntity
>[]
is
M
){
return
data
.
map
<
FriendEntity
>((
Map
<
String
,
dynamic
>
e
)
=>
FriendEntity
.
fromJson
(
e
)).
toList
()
as
M
;
}
if
(<
FriendData
>[]
is
M
){
return
data
.
map
<
FriendData
>((
Map
<
String
,
dynamic
>
e
)
=>
FriendData
.
fromJson
(
e
)).
toList
()
as
M
;
}
debugPrint
(
"
${M.toString()}
not found"
);
return
null
;
}
}
static
M
?
fromJsonAsT
<
M
>(
dynamic
json
)
{
if
(
json
is
List
)
{
return
_getListChildType
<
M
>(
json
.
map
((
e
)
=>
e
as
Map
<
String
,
dynamic
>).
toList
());
return
_getListChildType
<
M
>(
json
.
map
((
e
)
=>
e
as
Map
<
String
,
dynamic
>).
toList
());
}
else
{
return
jsonConvert
.
asT
<
M
>(
json
);
}
...
...
lib/generated/json/category_item_entity.g.dart
View file @
9cdfd00
lib/generated/json/friend_entity.g.dart
View file @
9cdfd00
...
...
@@ -3,8 +3,7 @@ import 'package:Parlando/timeline/models/friend_entity.dart';
FriendEntity
$FriendEntityFromJson
(
Map
<
String
,
dynamic
>
json
)
{
final
FriendEntity
friendEntity
=
FriendEntity
();
final
List
<
FriendData
>?
data
=
jsonConvert
.
convertListNotNull
<
FriendData
>(
json
[
'data'
]);
final
List
<
FriendData
>?
data
=
jsonConvert
.
convertListNotNull
<
FriendData
>(
json
[
'data'
]);
if
(
data
!=
null
)
{
friendEntity
.
data
=
data
;
}
...
...
lib/generated/json/lang_sort_entity.g.dart
View file @
9cdfd00
lib/generated/json/search_entity.g.dart
View file @
9cdfd00
...
...
@@ -7,13 +7,11 @@ SearchEntity $SearchEntityFromJson(Map<String, dynamic> json) {
if
(
totalCount
!=
null
)
{
searchEntity
.
totalCount
=
totalCount
;
}
final
bool
?
incompleteResults
=
jsonConvert
.
convert
<
bool
>(
json
[
'incomplete_results'
]);
final
bool
?
incompleteResults
=
jsonConvert
.
convert
<
bool
>(
json
[
'incomplete_results'
]);
if
(
incompleteResults
!=
null
)
{
searchEntity
.
incompleteResults
=
incompleteResults
;
}
final
List
<
SearchItems
>?
items
=
jsonConvert
.
convertListNotNull
<
SearchItems
>(
json
[
'items'
]);
final
List
<
SearchItems
>?
items
=
jsonConvert
.
convertListNotNull
<
SearchItems
>(
json
[
'items'
]);
if
(
items
!=
null
)
{
searchEntity
.
items
=
items
;
}
...
...
lib/generated/json/setting_entity.g.dart
View file @
9cdfd00
...
...
@@ -38,8 +38,7 @@ Map<String, dynamic> $SettingEntityToJson(SettingEntity entity) {
SettingData
$SettingDataFromJson
(
Map
<
String
,
dynamic
>
json
)
{
final
SettingData
settingData
=
SettingData
();
final
List
<
SettingDataLoginSetting
>?
loginSetting
=
jsonConvert
.
convertListNotNull
<
SettingDataLoginSetting
>(
json
[
'login_setting'
]);
final
List
<
SettingDataLoginSetting
>?
loginSetting
=
jsonConvert
.
convertListNotNull
<
SettingDataLoginSetting
>(
json
[
'login_setting'
]);
if
(
loginSetting
!=
null
)
{
settingData
.
loginSetting
=
loginSetting
;
}
...
...
@@ -52,10 +51,8 @@ Map<String, dynamic> $SettingDataToJson(SettingData entity) {
return
data
;
}
SettingDataLoginSetting
$SettingDataLoginSettingFromJson
(
Map
<
String
,
dynamic
>
json
)
{
final
SettingDataLoginSetting
settingDataLoginSetting
=
SettingDataLoginSetting
();
SettingDataLoginSetting
$SettingDataLoginSettingFromJson
(
Map
<
String
,
dynamic
>
json
)
{
final
SettingDataLoginSetting
settingDataLoginSetting
=
SettingDataLoginSetting
();
final
String
?
icon
=
jsonConvert
.
convert
<
String
>(
json
[
'icon'
]);
if
(
icon
!=
null
)
{
settingDataLoginSetting
.
icon
=
icon
;
...
...
@@ -71,8 +68,7 @@ SettingDataLoginSetting $SettingDataLoginSettingFromJson(
return
settingDataLoginSetting
;
}
Map
<
String
,
dynamic
>
$SettingDataLoginSettingToJson
(
SettingDataLoginSetting
entity
)
{
Map
<
String
,
dynamic
>
$SettingDataLoginSettingToJson
(
SettingDataLoginSetting
entity
)
{
final
Map
<
String
,
dynamic
>
data
=
<
String
,
dynamic
>{};
data
[
'icon'
]
=
entity
.
icon
;
data
[
'name'
]
=
entity
.
name
;
...
...
lib/generated/json/upload_entity.g.dart
0 → 100644
View file @
9cdfd00
import
'package:Parlando/generated/json/base/json_convert_content.dart'
;
import
'package:Parlando/models/upload_entity.dart'
;
UploadEntity
$UploadEntityFromJson
(
Map
<
String
,
dynamic
>
json
)
{
final
UploadEntity
uploadEntity
=
UploadEntity
();
final
String
?
status
=
jsonConvert
.
convert
<
String
>(
json
[
'status'
]);
if
(
status
!=
null
)
{
uploadEntity
.
status
=
status
;
}
final
int
?
code
=
jsonConvert
.
convert
<
int
>(
json
[
'code'
]);
if
(
code
!=
null
)
{
uploadEntity
.
code
=
code
;
}
final
String
?
message
=
jsonConvert
.
convert
<
String
>(
json
[
'message'
]);
if
(
message
!=
null
)
{
uploadEntity
.
message
=
message
;
}
final
UploadData
?
data
=
jsonConvert
.
convert
<
UploadData
>(
json
[
'data'
]);
if
(
data
!=
null
)
{
uploadEntity
.
data
=
data
;
}
final
UploadError
?
error
=
jsonConvert
.
convert
<
UploadError
>(
json
[
'error'
]);
if
(
error
!=
null
)
{
uploadEntity
.
error
=
error
;
}
return
uploadEntity
;
}
Map
<
String
,
dynamic
>
$UploadEntityToJson
(
UploadEntity
entity
)
{
final
Map
<
String
,
dynamic
>
data
=
<
String
,
dynamic
>{};
data
[
'status'
]
=
entity
.
status
;
data
[
'code'
]
=
entity
.
code
;
data
[
'message'
]
=
entity
.
message
;
data
[
'data'
]
=
entity
.
data
?.
toJson
();
data
[
'error'
]
=
entity
.
error
?.
toJson
();
return
data
;
}
UploadData
$UploadDataFromJson
(
Map
<
String
,
dynamic
>
json
)
{
final
UploadData
uploadData
=
UploadData
();
final
String
?
relativePath
=
jsonConvert
.
convert
<
String
>(
json
[
'relative_path'
]);
if
(
relativePath
!=
null
)
{
uploadData
.
relativePath
=
relativePath
;
}
final
String
?
absolutePath
=
jsonConvert
.
convert
<
String
>(
json
[
'absolute_path'
]);
if
(
absolutePath
!=
null
)
{
uploadData
.
absolutePath
=
absolutePath
;
}
return
uploadData
;
}
Map
<
String
,
dynamic
>
$UploadDataToJson
(
UploadData
entity
)
{
final
Map
<
String
,
dynamic
>
data
=
<
String
,
dynamic
>{};
data
[
'relative_path'
]
=
entity
.
relativePath
;
data
[
'absolute_path'
]
=
entity
.
absolutePath
;
return
data
;
}
UploadError
$UploadErrorFromJson
(
Map
<
String
,
dynamic
>
json
)
{
final
UploadError
uploadError
=
UploadError
();
return
uploadError
;
}
Map
<
String
,
dynamic
>
$UploadErrorToJson
(
UploadError
entity
)
{
final
Map
<
String
,
dynamic
>
data
=
<
String
,
dynamic
>{};
return
data
;
}
\ No newline at end of file
lib/generated/json/user_entity.g.dart
View file @
9cdfd00
lib/models/upload_entity.dart
0 → 100644
View file @
9cdfd00
import
'dart:convert'
;
import
'package:Parlando/generated/json/base/json_field.dart'
;
import
'package:Parlando/generated/json/upload_entity.g.dart'
;
@JsonSerializable
()
class
UploadEntity
{
String
?
status
;
int
?
code
;
String
?
message
;
UploadData
?
data
;
UploadError
?
error
;
UploadEntity
();
factory
UploadEntity
.
fromJson
(
Map
<
String
,
dynamic
>
json
)
=>
$UploadEntityFromJson
(
json
);
Map
<
String
,
dynamic
>
toJson
()
=>
$UploadEntityToJson
(
this
);
@override
String
toString
()
{
return
jsonEncode
(
this
);
}
}
@JsonSerializable
()
class
UploadData
{
@JSONField
(
name:
"relative_path"
)
String
?
relativePath
;
@JSONField
(
name:
"absolute_path"
)
String
?
absolutePath
;
UploadData
();
factory
UploadData
.
fromJson
(
Map
<
String
,
dynamic
>
json
)
=>
$UploadDataFromJson
(
json
);
Map
<
String
,
dynamic
>
toJson
()
=>
$UploadDataToJson
(
this
);
@override
String
toString
()
{
return
jsonEncode
(
this
);
}
}
@JsonSerializable
()
class
UploadError
{
UploadError
();
factory
UploadError
.
fromJson
(
Map
<
String
,
dynamic
>
json
)
=>
$UploadErrorFromJson
(
json
);
Map
<
String
,
dynamic
>
toJson
()
=>
$UploadErrorToJson
(
this
);
@override
String
toString
()
{
return
jsonEncode
(
this
);
}
}
\ No newline at end of file
lib/net/http_api.dart
View file @
9cdfd00
...
...
@@ -4,6 +4,7 @@ class HttpApi {
static
const
String
verify
=
'verify'
;
static
const
String
login
=
'login'
;
static
const
String
uploadVideo
=
'upload/video'
;
static
const
String
immersive
=
'immersive'
;
static
const
String
user
=
'user'
;
static
const
String
search
=
'search/repositories'
;
static
const
String
subscriptions
=
'users/simplezhli/subscriptions'
;
...
...
lib/poem/page/poem_publish.dart
View file @
9cdfd00
import
'package:Parlando/models/upload_entity.dart'
;
import
'package:Parlando/net/dio_utils.dart'
;
import
'package:Parlando/net/http_api.dart'
;
import
'package:Parlando/util/toast_utils.dart'
;
import
'package:dio/dio.dart'
;
import
'package:flutter/cupertino.dart'
;
import
'package:flutter/material.dart'
;
...
...
@@ -231,14 +233,36 @@ class _PoemPublishState extends State<PoemPublish> {
"video"
:
value
,
};
FormData
formData
=
FormData
.
fromMap
(
map
);
DioUtils
.
instance
.
asyncRequestNetwork
(
DioUtils
.
instance
.
asyncRequestNetwork
<
UploadEntity
>
(
Method
.
post
,
HttpApi
.
uploadVideo
,
params:
formData
,
onSuccess:
(
data
)
{
print
(
data
);
//TODO 上传视频成功之后创建临境
String
path
=
data
!.
data
!.
relativePath
!;
String
videoId
=
"1"
;
//TODO 临时用video id
Map
<
String
,
String
>
params
=
<
String
,
String
>{
"video_id"
:
videoId
,
"video_url"
:
path
,
"content"
:
msg
,
};
DioUtils
.
instance
.
asyncRequestNetwork
(
Method
.
post
,
HttpApi
.
immersive
,
params:
params
,
onSuccess:
(
data
)
{
isPublishing
=
false
;
NavigatorUtils
.
push
(
context
,
'
${PoemRouter.poemCompletePage}
?id=100'
,
);
},
onError:
(
code
,
msg
)
{
Toast
.
show
(
msg
.
toString
());
isPublishing
=
false
;
setState
(()
{});
},
);
},
onError:
(
code
,
msg
)
{
isPublishing
=
false
;
...
...
@@ -246,14 +270,6 @@ class _PoemPublishState extends State<PoemPublish> {
},
);
});
// TODO 等待套入正式接口发布临境
// await Future.delayed(const Duration(seconds: 2), () {
// NavigatorUtils.push(
// context,
// '${PoemRouter.poemCompletePage}?id=100',
// );
// });
}
Future
<
bool
>
_isExit
()
async
{
...
...
Please
register
or
login
to post a comment