@ -3,6 +3,7 @@ package dartgen
import "text/template"
var funcMap = template . FuncMap {
"getBaseName" : getBaseName ,
"getPropertyFromMember" : getPropertyFromMember ,
"isDirectType" : isDirectType ,
"isClassListType" : isClassListType ,
@ -99,6 +100,96 @@ Future _apiRequest(String method, String path, dynamic data,
}
`
apiFileContentV2 = ` import ' dart : io ' ;
import ' dart : convert ' ;
import ' . . / vars / kv . dart ' ;
import ' . . / vars / vars . dart ' ;
/// send request with post method
///
/// data: any request class that will be converted to json automatically
/// ok: is called when request succeeds
/// fail: is called when request fails
/// eventually: is always called until the nearby functions returns
Future apiPost ( String path , dynamic data ,
{ Map < String , String > ? header ,
Function ( Map < String , dynamic > ) ? ok ,
Function ( String ) ? fail ,
Function ? eventually } ) async {
await _apiRequest ( ' POST ' , path , data ,
header : header , ok : ok , fail : fail , eventually : eventually ) ;
}
/// send request with get method
///
/// ok: is called when request succeeds
/// fail: is called when request fails
/// eventually: is always called until the nearby functions returns
Future apiGet ( String path ,
{ Map < String , String > ? header ,
Function ( Map < String , dynamic > ) ? ok ,
Function ( String ) ? fail ,
Function ? eventually } ) async {
await _apiRequest ( ' GET ' , path , null ,
header : header , ok : ok , fail : fail , eventually : eventually ) ;
}
Future _apiRequest ( String method , String path , dynamic data ,
{ Map < String , String > ? header ,
Function ( Map < String , dynamic > ) ? ok ,
Function ( String ) ? fail ,
Function ? eventually } ) async {
var tokens = await getTokens ( ) ;
try {
var client = HttpClient ( ) ;
HttpClientRequest r ;
if ( method == ' POST ' ) {
r = await client . postUrl ( Uri . parse ( ' https : //' + serverHost + path));
} else {
r = await client . getUrl ( Uri . parse ( ' https : //' + serverHost + path));
}
r . headers . set ( ' Content - Type ' , ' application / json ' ) ;
if ( tokens != null ) {
r . headers . set ( ' Authorization ' , tokens . accessToken ) ;
}
if ( header != null ) {
header . forEach ( ( k , v ) {
r . headers . set ( k , v ) ;
} ) ;
}
var strData = ' ' ;
if ( data != null ) {
strData = jsonEncode ( data ) ;
}
r . write ( strData ) ;
var rp = await r . close ( ) ;
var body = await rp . transform ( utf8 . decoder ) . join ( ) ;
print ( ' $ { rp . statusCode } - $ path ' ) ;
print ( ' -- request -- ' ) ;
print ( strData ) ;
print ( ' -- response -- ' ) ;
print ( ' $ body \ n ' ) ;
if ( rp . statusCode == 404 ) {
if ( fail != null ) fail ( ' 404 not found ' ) ;
} else {
Map < String , dynamic > base = jsonDecode ( body ) ;
if ( rp . statusCode == 200 ) {
if ( base [ ' code ' ] != 0 ) {
if ( fail != null ) fail ( base [ ' desc ' ] ) ;
} else {
if ( ok != null ) ok ( base [ ' data ' ] ) ;
}
} else if ( base [ ' code ' ] != 0 ) {
if ( fail != null ) fail ( base [ ' desc ' ] ) ;
}
}
} catch ( e ) {
if ( fail != null ) fail ( e . toString ( ) ) ;
}
if ( eventually != null ) eventually ( ) ;
} `
tokensFileContent = ` class Tokens {
/// 用于访问的token, 每次请求都必须带在Header里面
final String accessToken ;
@ -132,5 +223,41 @@ Future _apiRequest(String method, String path, dynamic data,
} ;
}
}
`
tokensFileContentV2 = ` class Tokens {
/// 用于访问的token, 每次请求都必须带在Header里面
final String accessToken ;
final int accessExpire ;
/// 用于刷新token
final String refreshToken ;
final int refreshExpire ;
final int refreshAfter ;
Tokens ( {
required this . accessToken ,
required this . accessExpire ,
required this . refreshToken ,
required this . refreshExpire ,
required this . refreshAfter
} ) ;
factory Tokens . fromJson ( Map < String , dynamic > m ) {
return Tokens (
accessToken : m [ ' access_token ' ] ,
accessExpire : m [ ' access_expire ' ] ,
refreshToken : m [ ' refresh_token ' ] ,
refreshExpire : m [ ' refresh_expire ' ] ,
refreshAfter : m [ ' refresh_after ' ] ) ;
}
Map < String , dynamic > toJson ( ) {
return {
' access_token ' : accessToken ,
' access_expire ' : accessExpire ,
' refresh_token ' : refreshToken ,
' refresh_expire ' : refreshExpire ,
' refresh_after ' : refreshAfter ,
} ;
}
}
`
)