为了给您提供一些上下文,我正在构建一个页面,在该页面中,用户将首先被邀请填写他的用户名,然后他将被推送到下一个小部件,出生日期等。
我计划在用户从第一个小部件转移到最后一个小部件时在本地存储数据,并且只将累积的数据全部推送为一个类,用户(用户名: xyz,出生日期: 11/11/2001,性别:男性,兴趣:网球)。
我计划使用Provider包,在将用户推到下一页之前,我将在本地存储数据,如下所示。但是,我不确定如何在Provider类中设置_user实例的各个属性
你能告诉我怎么做吗?或者是否有更好的本地存储数据的方法。
我为每个页面提供程序的代码片段如下所示:
class User {
String uid;
String name;
String email;
String username;
String status;
int state;
String profilePhoto;
User({
this.uid,
this.name,
this.email,
this.username,
this.status,
this.state,
this.profilePhoto,
});
}
class UserProvider {
User _user;
User get getUser => _user;
set setUsername(username){
_user.name = username;
}
set setEmail(email){
_user.email = email;
etc...
}
}
//username page
Provider.of<UserProvider>(context, listen:false).setUsername='johncena';
print(Provider.of<UserProvider>(context, listen:false).getUser.username);
//email page
Provider.of<UserProvider>(context, listen:false).setEmail='hello@gmail.com';
print(Provider.of<UserProvider>(context, listen:false).getUser.username);
//at the last page
Provider.of<UserProvider>(context, listen:false).setStatus='available';
print(Provider.of<UserProvider>(context, listen:false).getUser.status);
//then I'll push the _user instance data that I stored in UserProvider to the backend但是,我目前正在收到如下所示的错误消息:
[VERBOSE-2:ui_dart_state.cc(177)] Unhandled Exception: NoSuchMethodError: The setter 'username=' was called on null.
Receiver: null
Tried calling: username="johncena"
#0 Object.noSuchMethod (dart:core-patch/object_patch.dart:51:5)
#1 UserProvider.setUsername= (package:okepos/provider/user_provider.dart:13:11)
#2 _UsernameState.build.<anonymous closure> (package:okepos/screen/Onboarding/username.dart:76:32)
#3 _InkResponseState._handleTap (package:flutter/src/material/ink_well.dart:993:19)
#4 _InkResponseState.build.<anonymous closure> (package:flutter/src/material/ink_well.dart:1111:38)
#5 GestureRecognizer.invokeCallback (package:flutter/src/gestures/recognizer.dart:183:24)
#6 TapGestureRecognizer.handleTapUp (package:flutter/src/gestures/tap.dart:598:11)
#7 BaseTapGestureRecognizer._checkUp (package:flutter/src/gestures/tap.dart:287:5)
#8 BaseTapGestureRecognizer.handlePrimaryPointer (package:flutter/src/gestures/tap.dart:222:7)
#9 PrimaryPointerGes<…>有人知道问题出在哪里吗?
发布于 2021-05-09 04:27:20
您应该在User构造函数中创建一个UserProvider实例!
这将解决错误。
会是这样的:
class UserProvider {
User _user;
UserProvider() {
_user = User();
}
User get getUser => _user;
set setUsername(username){
_user.name = username;
}
set setEmail(email){
_user.email = email;
etc...
}
}您还可以直接使用User类作为提供程序类。
https://stackoverflow.com/questions/67453407
复制相似问题