Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 我能';似乎无法将令牌从auth.dart文件传递到我的提供程序类_Flutter - Fatal编程技术网

Flutter 我能';似乎无法将令牌从auth.dart文件传递到我的提供程序类

Flutter 我能';似乎无法将令牌从auth.dart文件传递到我的提供程序类,flutter,Flutter,这是我的主.dart文件: class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { return MultiProvider( providers: [ ChangeNotifierProvider( create: (ctx) => Auth(), ), Cha

这是我的主.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;
    }
  }
}
类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