Flutter无状态UI生命周期

时间:2019-11-01 03:25:11

标签: flutter

我有一个基于{:items=> ["cust.category=Jackets,Belts & Buttons", "items.receive_dt=2 years", "prdcts.brand=Armani"] } 的Flutter应用。我看到了exampleStatelessWidget,它使程序员可以在StatefulWidget方法中执行某些操作。我试图查看dispose()是否也提供了这样的功能?

StatelessWidget

已更新

import 'package:flutter/material.dart';
import 'routes.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {

  // This widget is the root of your application.
  @override
  Widget build(BuildContext context) { 
      return MaterialApp(
        title: 'My App',
        theme: ThemeData(
          primarySwatch: colorCustom,
          fontFamily: 'Roboto',
        ),
        initialRoute: '/',
        routes: routes,
      ); 
    }

}

嗯,更新代码后,import 'package:flutter/material.dart'; import 'routes.dart'; void main() => runApp(MyApp()); class MyApp extends StatelessWidget { Future<bool> _exitApp(BuildContext context) { return showDialog( context: context, child: new AlertDialog( title: new Text('Do you want to exit this application?'), content: new Text('We hate to see you leave...'), actions: <Widget>[ new FlatButton( onPressed: () => Navigator.of(context).pop(false), child: new Text('No'), ), new FlatButton( onPressed: () => Navigator.of(context).pop(true), child: new Text('Yes'), ), ], ), ) ?? false; } @override Widget build(BuildContext context) { return MaterialApp( title: 'My App', home: WillPopScope( child: MaterialApp( theme: ThemeData( primarySwatch: colorCustom, fontFamily: 'Roboto', ), initialRoute: '/', routes: routes ), onWillPop: () => _exitApp(context) ) ); } 不会弹出吗?

1 个答案:

答案 0 :(得分:2)

简短的回答是“否”,dispose()中没有类似于StatelessWidget的方法,因为顾名思义,它不维护State

长答案是dispose()方法-

当此State对象再也不会构建时,框架将调用此方法。处理完框架调用后,State对象被视为已卸载,并且已安装的属性为false。此时调用setState是错误的。

生命周期的这一阶段是终极阶段:无法重新挂载已处置的State对象。

由于StatelessWidget没有与之关联的State,因此没有dispose()方法。

StatelessWidgets的类似解决方案-

那么,如果只想在从导航堆栈中弹出StatelessWidgets或从StatelessWidget返回一些数据之后才运行一些代码,该怎么办?

嗯,this Flutter docmentation页面上对此进行了解释,并附带示例。希望这会有所帮助!