首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在推送到数据库之前,如何在多个小部件之间本地存储数据?

在推送到数据库之前,如何在多个小部件之间本地存储数据?
EN

Stack Overflow用户
提问于 2021-05-09 00:49:23
回答 1查看 144关注 0票数 1

为了给您提供一些上下文,我正在构建一个页面,在该页面中,用户将首先被邀请填写他的用户名,然后他将被推送到下一个小部件,出生日期等。

我计划在用户从第一个小部件转移到最后一个小部件时在本地存储数据,并且只将累积的数据全部推送为一个类,用户(用户名: xyz,出生日期: 11/11/2001,性别:男性,兴趣:网球)。

我计划使用Provider包,在将用户推到下一页之前,我将在本地存储数据,如下所示。但是,我不确定如何在Provider类中设置_user实例的各个属性

你能告诉我怎么做吗?或者是否有更好的本地存储数据的方法。

我为每个页面提供程序的代码片段如下所示:

代码语言:javascript
复制
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

但是,我目前正在收到如下所示的错误消息:

代码语言:javascript
复制
[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<…>

有人知道问题出在哪里吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-05-09 04:27:20

您应该在User构造函数中创建一个UserProvider实例!

这将解决错误。

会是这样的:

代码语言:javascript
复制
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类作为提供程序类。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67453407

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档