【发布时间】:2022-08-04 16:12:34
【问题描述】:
我做了一个 Api 类:
class Api
{
// Token for authentication
String bearerToken;
// Generate a bearer token
void login(String username,String password){
// Some Implementation hidden for simplicity
}
void refreshToken(){
// Some Implementation hidden for simplicity
}
void consumeAnEndpointUsingBearerToken(){
// Some Implementation hidden for simplicity
}
}
我做了一个登录小部件:
class LoginPage extends StatefulWidget {
final String title;
final Api api;
const LoginPage({Key? key, required this.title, required this.api})
: super(key: key);
@override
State<LoginPage> createState() => _LoginPageState(api);
}
class _LoginPageState extends State<LoginPage> {
String username = \'\';
String password = \'\';
final Api api;
_LoginPageState(this.api)
void __setUsername(username) {
this.username = username;
}
void __setPassword(password) {
this.password = password;
}
void _login() {
setState(() {
api.login(username,password);
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(widget.title),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
AppTextInput(
hintText: \'Username\',
onChanged: __setUsername,
),
AppTextInput(
obscureText: true,
hintText: \'Password\',
onChanged: __setPassword,
),
AppButton(
onPressed: _login,
text: \'Login\',
)
],
),
),
);
}
}
还有一个使用 api 的页面:
class ConsumeApi extends StatelessWidget {
const ConsumeApi({Key? key, required this.title, required this.api})
: super(key: key);
// Dender another PAge
}
因此,每次我需要执行登录时,我都需要提供一个通用的 Api 实例并传递它。有没有更好的方法来拥有一个通用的 Api 服务并使用某种服务提供商?