Flutter上的小部件的onResume()和onPause()

现在,小部件仅具有initeState()

和dispose(),该initeState()在第一次创建小部件时被触发,而dispose()在小部件

被破坏时被触发。有没有一种方法可以检测小部件何时回到

前台?当一个小部件由于另一个

小部件刚刚被前景显示而将要进入后台时?这等效

于Android触发onResume和onPause ,以及ios触发viewWillAppear和viewWillDisappear

回答:

最常见的情况是,如果您正在运行动画并且不想在后台消耗资源。在这种情况下,你应该延长您的State使用TickerProviderStateMixin,并使用你的State作为vsync的说法AnimationController。当您State可见时,Flutter 只会处理动画控制器的侦听器。

如果你想State住在你的S PageRoute当被置于PageRoute被其他内容遮挡,可以传递的参数,以您的构造函数。如果执行此操作,则隐藏时将重置自身(及其子代),并且必须使用作为 其构造函数参数传入的属性来 重新构造自身。如果您不希望 完全重置 ,则可以使用模型或控制器类或来保存用户的进度信息。

maintainState

falsePageRoute

State

initState

widget

PageStorage

这是一个演示这些概念的示例应用程序。

import 'package:flutter/material.dart';

void main() {

runApp(new MaterialApp(

onGenerateRoute: (RouteSettings settings) {

if (settings.name == '/') {

return new MaterialPageRoute<Null>(

settings: settings,

builder: (_) => new MyApp(),

maintainState: false,

);

}

return null;

}

));

}

class MyApp extends StatefulWidget {

MyAppState createState() => new MyAppState();

}

class MyAppState extends State<MyApp> with TickerProviderStateMixin {

AnimationController _controller;

@override

void initState() {

print("initState was called");

_controller = new AnimationController(vsync: this)

..repeat(min: 0.0, max: 1.0, period: const Duration(seconds: 1))

..addListener(() {

print('animation value ${_controller.value}');

});

super.initState();

}

@override

void dispose() {

print("dispose was called");

_controller.dispose();

super.dispose();

}

int _counter = 0;

@override

Widget build(BuildContext context) {

return new Scaffold(

appBar: new AppBar(

title: new Text('home screen')

),

body: new Center(

child: new RaisedButton(

onPressed: () {

setState(() {

_counter++;

});

},

child: new Text('Button pressed $_counter times'),

),

),

floatingActionButton: new FloatingActionButton(

child: new Icon(Icons.remove_red_eye),

onPressed: () {

Navigator.push(context, new MaterialPageRoute(

builder: (BuildContext context) {

return new MySecondPage(counter: _counter);

},

));

},

),

);

}

}

class MySecondPage extends StatelessWidget {

MySecondPage({ this.counter });

final int counter;

Widget build(BuildContext context) {

return new Scaffold(

appBar: new AppBar(

title: new Text('Certificate of achievement'),

),

body: new Column(

crossAxisAlignment: CrossAxisAlignment.stretch,

mainAxisAlignment: MainAxisAlignment.spaceAround,

children: [

new Icon(Icons.developer_mode, size: 200.0),

new Text(

'Congrats, you clicked $counter times.',

style: Theme.of(context).textTheme.title,

textAlign: TextAlign.center,

),

new Text(

'All your progress has now been lost.',

style: Theme.of(context).textTheme.subhead,

textAlign: TextAlign.center,

),

],

),

);

}

}

以上是 Flutter上的小部件的onResume()和onPause() 的全部内容, 来源链接: utcz.com/qa/428824.html

回到顶部