在HompePage,我正在导航到设置页面;
Navigator.push(
context,
new MaterialPageRoute(
builder: (BuildContext context) => Settings()));
Settings()
页面包含一个int
输入,允许用户指定他们想要在HomePage
上看到的帖子数量。当用户输入数字和form.save时,该值存储在SharedPreferences
中。但是当用户回到HomePage
时,帖子的初始数量仍然存在。我希望HomePage
state能够刷新,以便用户在“设置页面”中指定的帖子数量会立即生效,并保存表单。
以下是我的代码的一些片段;
这是_submit
页面上的Settings()
形式,
_submit() async {
final form = _formKey.currentState;
SharedPreferences prefs = await SharedPreferences.getInstance();
if (form.validate()) {
prefs.setInt('defaultField', newva);
form.save();
final mysb = SnackBar(
duration: Duration(seconds: 1),
content: new Text(
'Data Saved Successfully',
style: TextStyle(
color: Colors.white,
fontWeight: FontWeight.bold,
),
),
backgroundColor: Colors.red,
);
_scaffoldKey.currentState?.showSnackBar(mysb);
myHomePageState.setState(() {
newSULength = newva;
});
print('Done for $newva');
}
}
这是我的MyHomePage()
MyHomePageState myHomePageState = new MyHomePageState();
class MyHomePage extends StatefulWidget {
MyHomePage({Key key, this.title}) : super(key: key);
final String title;
@override
State<MyHomePage> createState() => new MyHomePageState();
static MyHomePageState of(BuildContext context){
final MyHomePageState navigator = context.ancestorStateOfType(const TypeMatcher<MyHomePageState>());
assert(() {
if(navigator == null) {
throw new FlutterError('Error occoured');
}
return true;
}());
return navigator;
}
}
class MyHomePageState extends State<MyHomePage> {
int newSULength = 0;
void initState() {
// TODO: implement initState
super.initState();
loadDF();
}
set newle(String value) => setState(() => _string = value);
loadDF() async {
SharedPreferences prefs = await SharedPreferences.getInstance();
setState(() {
newSULength = (prefs.getInt('defaultField') ?? 5);
for (int i = 0; i < newSULength; i++) {
\\todos
}
});
print('Done');
}
}
您可以使用callbacks
来指示HomePage
页面在共享首选项中更改了某个值。请参阅Settings