2

我想这是设计使然,但是当从 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 时都必须重新加载所有数据。不禁认为我错过了一些基本的东西,因为这似乎不合逻辑。

4

0 回答 0