Flutter 我能';似乎无法将令牌从auth.dart文件传递到我的提供程序类
这是我的主.dart文件:Flutter 我能';似乎无法将令牌从auth.dart文件传递到我的提供程序类,flutter,Flutter,这是我的主.dart文件: class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { return MultiProvider( providers: [ ChangeNotifierProvider( create: (ctx) => Auth(), ), Cha
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MultiProvider(
providers: [
ChangeNotifierProvider(
create: (ctx) => Auth(),
),
ChangeNotifierProxyProvider<Auth, Transactions>(
update: (ctx, auth, previousTransactions) => Transactions(
auth.token,
previousTransactions == null
? []
: previousTransactions.userTransactions),
),
],
class Auth with ChangeNotifier {
String _token;
DateTime _expiryDate;
String _userId;
bool get isAuth {
return token != null;
}
String get token {
if (_expiryDate != null &&
_expiryDate.isAfter(DateTime.now()) &&
_token != null) {
return _token;
}
return null;
}
Future<void> signUp(String username, String password) async {
const url =
'https://identitytoolkit.googleapis.com/v1/accounts:signUp?key=APIKEY';
try {
final response = await http.post(
url,
body: json.encode(
{
'email': username,
'password': password,
'returnSecureToken': true,
},
),
);
final responseData = jsonDecode(response.body);
if (responseData['error'] != null) {
throw HttpException(responseData['error']['message']);
}
} catch (error) {
throw error;
}
}
Future<void> logIn(String username, String password) async {
const url =
'https://identitytoolkit.googleapis.com/v1/accounts:signInWithPassword?key=APIKEY';
try {
final response = await http.post(
url,
body: json.encode(
{
'email': username,
'password': password,
'returnSecureToken': true,
},
),
);
final responseData = jsonDecode(response.body);
if (responseData['error'] != null) {
throw HttpException(responseData['error']['message']);
}
_token = responseData['idToken'];
_userId = responseData['localId'];
_expiryDate = DateTime.now().add(
Duration(
seconds: int.parse(responseData['expiresIn']),
),
);
notifyListeners();
} catch (error) {
throw error;
}
}
}
类MyApp扩展了无状态小部件{
@凌驾
小部件构建(构建上下文){
回程多供应商(
供应商:[
变更通知提供者(
create:(ctx)=>Auth(),
),
ChangeNotifierProxyProvider(
更新:(ctx、身份验证、以前的事务)=>事务(
auth.token,
previousTransactions==null
? []
:previousTransactions.userTransactions),
),
],
这是我的Auth.dart文件:
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MultiProvider(
providers: [
ChangeNotifierProvider(
create: (ctx) => Auth(),
),
ChangeNotifierProxyProvider<Auth, Transactions>(
update: (ctx, auth, previousTransactions) => Transactions(
auth.token,
previousTransactions == null
? []
: previousTransactions.userTransactions),
),
],
class Auth with ChangeNotifier {
String _token;
DateTime _expiryDate;
String _userId;
bool get isAuth {
return token != null;
}
String get token {
if (_expiryDate != null &&
_expiryDate.isAfter(DateTime.now()) &&
_token != null) {
return _token;
}
return null;
}
Future<void> signUp(String username, String password) async {
const url =
'https://identitytoolkit.googleapis.com/v1/accounts:signUp?key=APIKEY';
try {
final response = await http.post(
url,
body: json.encode(
{
'email': username,
'password': password,
'returnSecureToken': true,
},
),
);
final responseData = jsonDecode(response.body);
if (responseData['error'] != null) {
throw HttpException(responseData['error']['message']);
}
} catch (error) {
throw error;
}
}
Future<void> logIn(String username, String password) async {
const url =
'https://identitytoolkit.googleapis.com/v1/accounts:signInWithPassword?key=APIKEY';
try {
final response = await http.post(
url,
body: json.encode(
{
'email': username,
'password': password,
'returnSecureToken': true,
},
),
);
final responseData = jsonDecode(response.body);
if (responseData['error'] != null) {
throw HttpException(responseData['error']['message']);
}
_token = responseData['idToken'];
_userId = responseData['localId'];
_expiryDate = DateTime.now().add(
Duration(
seconds: int.parse(responseData['expiresIn']),
),
);
notifyListeners();
} catch (error) {
throw error;
}
}
}
使用ChangeNotifier进行类身份验证{
字符串标记;
日期时间_expiryDate;
字符串_userId;
布尔盖伊萨思{
返回令牌!=null;
}
字符串获取令牌{
如果(_expiryDate!=null&&
_expireydate.isAfter(DateTime.now())&&
_令牌!=null){
返回令牌;
}
返回null;
}
未来注册(字符串用户名、字符串密码)异步{
常量url=
'https://identitytoolkit.googleapis.com/v1/accounts:signUp?key=APIKEY';
试一试{
最终响应=等待http.post(
网址,
正文:json.encode(
{
“电子邮件”:用户名,
“密码”:密码,
“returnSecureToken”:true,
},
),
);
最终响应data=jsonDecode(response.body);
if(responseData['error']!=null){
抛出HttpException(responseData['error']['message']);
}
}捕获(错误){
投掷误差;
}
}
未来登录(字符串用户名、字符串密码)异步{
常量url=
'https://identitytoolkit.googleapis.com/v1/accounts:signInWithPassword?key=APIKEY';
试一试{
最终响应=等待http.post(
网址,
正文:json.encode(
{
“电子邮件”:用户名,
“密码”:密码,
“returnSecureToken”:true,
},
),
);
最终响应data=jsonDecode(response.body);
if(responseData['error']!=null){
抛出HttpException(responseData['error']['message']);
}
_令牌=响应数据['idToken'];
_userId=responseData['localId'];
_expireydate=DateTime.now().add(
持续时间(
秒:int.parse(responseData['expiresIn']),
),
);
notifyListeners();
}捕获(错误){
投掷误差;
}
}
}
这是我的提供程序类,它接受令牌:
class Transactions with ChangeNotifier {
List<Transaction> _userTransactions = [
];
final String authToken;
Transactions(this.authToken, this._userTransactions);
使用ChangeNotifier分类事务{
列表_用户事务=[
];
最后一个字符串authToken;
事务(this.authToken、this.\u userTransactions);
ProxyProvider代码提示我使用create,但我已经在使用传递令牌的update,当我使用create时,我因未传递令牌而收到错误。在这种情况下,如何在代理提供程序中同时使用create和update