flutter - Flutter StatefulWidget 层次结构
问题描述
我想这是设计使然,但是当从 StatefulWidget 导航到新页面时,原始页面会在渲染第二个页面时重建。这是来自https://flutter.io/cookbook/navigation/navigation-basics/的示例代码,我刚刚添加了打印语句来显示活动并将第一页转换为有状态的。
import 'package:flutter/material.dart';
void main() {
runApp(MaterialApp(
title: 'Navigation Basics',
home: FirstScreen(),
));
}
class FirstScreen extends StatefulWidget {
@override
FirstScreenState createState() {
return new FirstScreenState();
}
}
class FirstScreenState extends State<FirstScreen> {
@override
Widget build(BuildContext context) {
print('Building Screen 1');
return Scaffold(
appBar: AppBar(
title: Text('First Screen'),
),
body: Center(
child: RaisedButton(
child: Text('Launch screen'),
onPressed: () {
Navigator.push(
context,
MaterialPageRoute(builder: (context) => SecondScreen()),
);
},
),
),
);
}
}
class SecondScreen extends StatelessWidget {
@override
Widget build(BuildContext context) {
print('Building Screen 2');
return Scaffold(
appBar: AppBar(
title: Text("Second Screen"),
),
body: Center(
child: RaisedButton(
onPressed: () {
Navigator.pop(context);
},
child: Text('Go back!'),
),
),
);
}
}
输出显示,在渲染第二个页面时,第一个页面也被重建:
I/flutter (20929): Building Screen 2
I/flutter (20929): Building Screen 1
我有一个这种场景的实例,其中屏幕 1 使用 FutureBuilder。我不想每次重建屏幕 2 时都必须重新加载所有数据。不禁认为我错过了一些基本的东西,因为这似乎不合逻辑。
解决方案
推荐阅读
- json - 为什么我的自定义排序不适用于 Material-UI 数据网格组件?
- javascript - 滚动时使 div 更大更宽
- amazon-web-services - 您可以使用非字符串参数调用 lambda 函数吗?
- css - 将 alpha 蒙版添加到 SVG
- r - 用列表中的空格替换句点时出错
- android - 如何围绕 ImageView 对齐 TextView?图片应该在 textview 的右边
- python-3.x - 打印返回的 Zeep 对象的特定值
- android - 更改 Snackbar 样式
- c++ - 汇编x64 linux问题C ++中的模数
- sql - 使用 athena-express 的 Athena 查询不适用于 req.body 输入