flutter - 错误:类“字符串”没有实例获取器“令牌”。I/颤振(3268):接收器:“dc9e0de8fa2eaa917657e810db06aad2458e4f65”
问题描述
我已经为这个问题苦苦挣扎了两天。我的社交媒体应用程序应该在登录时保存其状态,这样当您离开应用程序并再次返回时,它应该从主页开始,而不是登录页面。我发现使用 StreamBuilder 和 FutureBuilder 可以做到这一点。我用 FutureBuilder 尝试了一些东西,但我有一些错误。
下面是我的主页的样子:
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return ChangeNotifierProvider(
create: (BuildContext context) => UserData(),
child: MaterialApp(
title: 'Curtain App',
debugShowCheckedModeBanner: false,
home: FutureBuilder(
future: SharedPreferencesHelper.getPrefs(),
builder: (BuildContext context, AsyncSnapshot<dynamic> snapshot) {
if (snapshot.connectionState == ConnectionState.waiting) {
return CircularProgressIndicator();
}
if (snapshot.hasData) {
Provider.of<UserData>(context).currentUserId =
snapshot.data.token;
return HomeScreen();
} else {
return LoginScreen();
}
},
),
),
);
}
}
class SharedPreferencesHelper {
static final String _tokenCode = "token";
static Future<String> getPrefs() async {
final SharedPreferences preferences = await SharedPreferences.getInstance();
return preferences.getString(_tokenCode) ?? "empty";
}
}
这是我的 LoginPage 提交 btn 代码:
_submit() async {
if (_formKey.currentState.validate()) {
_formKey.currentState.save();
// logging in the user w/ Firebase
//AuthService.login(_email, _password);
var user = await DatabaseService.loginUser(_username, _password);
final data = json.decode(user);
SharedPreferences sharedPreferences =
await SharedPreferences.getInstance();
print("Hi ${data['username']}");
print("Status ${data['status']}");
print("Token ${data['token']}");
if (data['username'] != null) {
setState(() {
_message = "Hi ${data['username']}";
sharedPreferences.setString('token', data['token']);
});
Navigator.of(context).pushAndRemoveUntil(
CupertinoPageRoute(
builder: (context) => HomeScreen(),
),
(Route<dynamic> route) => false);
}
}
}
关于如何解决这个问题的任何想法?
解决方案
只需.token
从发生错误的行中删除。snapshot.data
已经是令牌。
推荐阅读
- r - 如何在 coefplot::coefplot.default() 中设置标题字体大小?
- c++ - 为什么在 C++ 标准库中为列表/树节点使用基类?
- windows - 是否可以创建一个虚拟 Windows 麦克风驱动程序来替换触发词
- html - 使用网格时的响应式布局
- python - 将 `lbound:ubound` 索引符号存储在变量 pandas 中
- javascript - 将 Buy Me A Coffee 小部件添加到 React 应用程序
- php - 如何检查标点符号是否存在于给定数量的字符中以及是否确实剪切了那里的文本-PHP?
- postgresql - 如何在 Google Cloud SQL PostgreSQL 11 实例上记录 SQL 查询?
- django - Django列出包含某些相同项目的类别中的项目
- snowflake-cloud-data-platform - 无法通过 DBEAVER 连接到雪花超时