通过异步功能将数据传递到第二页

时间:2019-04-28 06:35:16

标签: dart flutter

我有一个两页抖动应用程序,我正在将一些数据从第一页推送到第二页。

我在第一页中还有一个Future,当它满足时,它应该能够在第二页中更改数据。

以下是我的应用程序中的示例代码。

String _text = "From screen one";
ImagePicker.pickImage(source: ImageSource.camera).then((image) {
  _text = "got image";
});
Future.delayed(const Duration(milliseconds: 600), () {
  //StateContainer.of(context).updateStatus(Status.loading);
  Navigator.push(
    context,
    MaterialPageRoute(builder: (context) => SecondPage(text: _text)),
  );
});

/// My second page
class SecondPage extends StatelessWidget {
  String text;
  SecondPage({Key key, @required this.text}) : super(key: key);
  @override
  Widget build(BuildContext context) {
    return Scaffold(
        body: SingleChildScrollView(
          child: Container(
            padding: EdgeInsets.all(40.0),
            child: Text(
              this.text,
              style: TextStyle(
                fontSize: 20.0,
                color: Colors.grey,
              ),
            ),
          ),
        ));
  }
} 

我的问题是第二页上没有显示got image。如何显示?

1 个答案:

答案 0 :(得分:0)

pskink在注释中所建议的,下面的代码对我有用。

final Future promise = ImagePicker.pickImage(source: ImageSource.camera);
 Navigator.push(
    context,
    MaterialPageRoute(builder: (context) => SecondPage(promise: promise,)),
  );

/// My second page
class SecondPage extends StatelessWidget {
  final Future promise;
  SecondPage({Key key, @required this.promise}) : super(key: key);
  @override
  Widget build(BuildContext context) {
    return Scaffold(
        body: SingleChildScrollView(
          child: Container(
            padding: EdgeInsets.all(40.0),
            child: FutureBuilder(
              future: this.promise,
              builder: (BuildContext context, AsyncSnapshot snapshot) {
                print(snapshot.data);
                return Text('Hello ');
              }
          ),
        ));
  }
}