【发布时间】:2018-10-12 14:24:02
【问题描述】:
所以我有 2 个屏幕。在屏幕 1 上,我从 SharedPreferences 中检索了一个编码的 JSON,并且我有一个按钮可以导航到屏幕 2 并传递检索到的数据。但在屏幕 2 上,数据一直显示为空。当前一个小部件的状态更新时,小部件不是要更新吗?
屏幕 1
import 'package:flutter/material.dart';
import 'dart:async';
import 'dart:convert';
import 'package:shared_preferences/shared_preferences.dart';
import 'screen2.dart';
class ScreenA extends StatefulWidget {
@override
_ProfileState createState() => new _ScreenAState();
}
class _ScreenAState extends State<Profile> {
Map _user;
@override
void initState() {
_getUser();
super.initState();
}
Future<bool> _getUser() async {
SharedPreferences prefs = await SharedPreferences.getInstance();
String result = prefs.getString("user") ?? "";
if(result != ""){
setState(() {
_user = json.decode(result);
});
}
return true;
}
@override
Widget build(BuildContext context) {
return new Scaffold(
body: Container(
child: RaisedButton(
child: Text("Go to Screen 2"),
onPressed: (){
Navigator.push(
context,
MaterialPageRoute(
builder: (context)=> Screen2(user: user)
)
);
}
)
)
)
}
}
屏幕 2
import 'package:flutter/material.dart';
class Screen2 extends StatefulWidget {
Screen2({this.user});
final Map user;
@override
_Screen2State createState() => new _Screen2State();
}
class _Screen2State extends State<Screen2> {
Map _user;
@override
void initState() {
_user = widget.user;
super.initState();
}
@override
Widget build(BuildContext context) {
return new Scaffold(
body: Text(_user["name"])
);
}
}
但是当我单击ScreenA 中的按钮时,会显示此错误。
那么,我如何将共享首选项中的数据传递到另一个屏幕?
【问题讨论】:
-
你正在做
Screen2(user: user),但你的变量是_user。 -
你想念等待 -
String result = (await prefs.getString("user")) ?? "";