import 'package:flutter/material.dart';
class ScreenLifecyle extends StatefulWidget {
ScreenLifecyleState state;
//createState(): When the Framework is instructed to build a StatefulWidget, it immediately calls createState()
@override
State<StatefulWidget> createState() {
// TODO: implement createState
return ScreenLifecyleState();
}
}
class ScreenLifecyleState extends State<ScreenLifecyle> {
/*
mounted is true: When createState creates your state class, a buildContext is assigned to that state.
BuildContext is, overly simplified, the place in the widget tree in which this widget is placed.
Here's a longer explanation. All widgets have a bool this.mounted property.
It is turned true when the buildContext is assigned. It is an error to call setState when a widget is unmounted.
mounted is false: The state object can never remount, and an error is thrown is setState is called.
*/
/*
This is the first method called when the widget is created (after the class constructor, of course.)
initState is called once and only once. It must called super.initState().
*/
@override
void initState() {
// TODO: implement initState
super.initState();
print("initState");
}
/*
This method is called immediately after initState on the first time the widget is built.
*/
@override
void didChangeDependencies() {
// TODO: implement didChangeDependencies
super.didChangeDependencies();
print("didChangeDependencies");
}
/*
build(): This method is called often. It is required, and it must return a Widget.
*/
@override
Widget build(BuildContext context) {
print("build");
// TODO: implement build
return Container();
}
/*
If the parent widget changes and has to rebuild this widget (because it needs to give it different data),
but it's being rebuilt with the same runtimeType, then this method is called.
This is because Flutter is re-using the state, which is long lived.
In this case, you may want to initialize some data again, as you would in initState.
*/
@override
void didUpdateWidget(ScreenLifecyle oldWidget) {
print("didUpdateWidget");
// TODO: implement didUpdateWidget
super.didUpdateWidget(oldWidget);
}
@override
void setState(fn) {
print("setState");
// TODO: implement setState
super.setState(fn);
}
/*
Deactivate is called when State is removed from the tree,
but it might be reinserted before the current frame change is finished.
This method exists basically because State objects can be moved from one point in a tree to another.
*/
@override
void deactivate() {
// TODO: implement deactivate
print("deactivate");
super.deactivate();
}
/*
Dispose is called when the State object is removed, which is permanent.
This method is where you should unsubscribe and cancel all animations, streams, etc.
*/
@override
void dispose() {
// TODO: implement dispose
super.dispose();
}
@override
void didChangeAppLifecycleState(AppLifecycleState state) {
super.didChangeAppLifecycleState(state);
switch (state) {
case AppLifecycleState.inactive:
print('appLifeCycleState inactive');
break;
case AppLifecycleState.resumed:
print('appLifeCycleState resumed');
break;
case AppLifecycleState.paused:
print('appLifeCycleState paused');
break;
case AppLifecycleState.suspending:
print('appLifeCycleState suspending');
break;
}
}
}
要求是他想从页面 A 中打开页面 B,比方说从页面 B 中选择文件,一旦选择了文件,他想回到页面 A,需要处理页面 A 中选择的文件,就像在 android 中一样,我们可以用 onActivityResult ()方法做到这一点。下面是我们在颤动中可以达到的方法。
你可以从下面的 A 页打开 B 页
Map results = await Navigator.of(context).push(MaterialPageRoute(
builder: (BuildContext context) {
return new PageB(title: "Choose File");
},
));
if (results != null && results.containsKey('selection')) {
setState(() {
_selection = results['selection'];
});
**//here you can do whatever you want to do with selection variable.**
}
@override
void didPushNext() { //similar to onPause
// will be called when a new route has been pushed, and the current route is no longer visible. acts similar to onPause
}
@override
void didPopNext() { //similar to onResume
// will be called when the top route has been popped off, and the current route shows up. acts similar to onResume when you are navigated back to your activity/fragment
}