在flutter中的dispose()之后如何设置状态?

时间:2019-08-10 05:29:00

标签: flutter dart

我有2页,在第一页中有一个单击的按钮将打开第二页,在第二页中,我有变量number = 999;,所以当我回到第一页时,我想显示数字print(number);或在Text(number)上显示如何使用dispose()

@override
void dispose() {
    super.dispose();
    // send data to the first page
}

感谢您的回答

2 个答案:

答案 0 :(得分:1)

您可以简单地在导航器的帮助下完成此操作。

  

Navigator.push返回一个Future,该Future在调用后完成   第二个屏幕上的Navigator.pop带有传递的值。

e.x代码:

import 'package:flutter/material.dart';

void main() {
  runApp(MaterialApp(
    title: 'Returning Data',
    home: HomeScreen(),
  ));
}

class HomeScreen extends StatelessWidget {
  String _resultNumber = '';
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Returning Data Demo'),
      ),
      body: Center(child: SelectionButton()),
    );
  }
}

class SelectionButton extends StatefulWidget {
  @override
  _SelectionButtonState createState() => _SelectionButtonState();
}

class _SelectionButtonState extends State<SelectionButton> {
  String _resultNumber;

  @override
  Widget build(BuildContext context) {
    return Column(
        mainAxisAlignment: MainAxisAlignment.center,
        mainAxisSize: MainAxisSize.min,
        children: <Widget>[
          RaisedButton(
            onPressed: () => _navigateAndDisplaySelection(context),
            child: Text('Pick an option, any number!'),
          ),
          Text(_resultNumber ?? ''),
        ]);
  }

  _navigateAndDisplaySelection(BuildContext context) async {
    // Navigator.push returns a Future that completes after calling
    // Navigator.pop on the Selection Screen.
    final result = await Navigator.push(
      context,
      MaterialPageRoute(builder: (context) => SelectionScreen()),
    );
    _resultNumber = result;
  }
}

class SelectionScreen extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Pick a number'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Padding(
              padding: const EdgeInsets.all(8.0),
              child: RaisedButton(
                onPressed: () {
                  // Close the screen and return "Yep!" as the result.
                  Navigator.pop(context, '999');
                },
                child: Text('999 Number'),
              ),
            ),
            Padding(
              padding: const EdgeInsets.all(8.0),
              child: RaisedButton(
                onPressed: () {
                  // Close the screen and return "Nope!" as the result.
                  Navigator.pop(context, '500');
                },
                child: Text('550 Number'),
              ),
            )
          ],
        ),
      ),
    );
  }
}

enter image description here

答案 1 :(得分:0)

使用 dispose() 您需要覆盖按下的后退,为此将 Scaffold 包装在 WillPopScope 小部件中。

return WillPopScope(
  onWillPop: () {
    _backPressed();
    return Future.value(false);
  },
  child: Scaffold(
    appBar: AppBar(
      title: Text('your text'),
    ),
    body: Center(),
  ),
);

void _backPressed() {
  Navigator.pop(context, '999');
}