Flutter 返回同一准确位置颤振导航

Flutter 返回同一准确位置颤振导航,flutter,dart,Flutter,Dart,使用此选项时,是否可能返回到完全相同的位置,即颤振状态 Navigator.of(context).push(new MaterialPageRoute(builder: (BuildContext context) => new ConnectHome(user:widget.user)))); 主屏幕“ConnectHome()”上有卡片,我们需要将它们返回到同一位置。您可以复制粘贴并运行下面的完整代码 您可以等待导航器。按并在Navigator.pop中包括UserObject()

使用此选项时,是否可能返回到完全相同的位置,即颤振状态

Navigator.of(context).push(new MaterialPageRoute(builder: (BuildContext context) => new ConnectHome(user:widget.user))));

主屏幕“ConnectHome()”上有卡片,我们需要将它们返回到同一位置。

您可以复制粘贴并运行下面的完整代码
您可以
等待导航器。按
并在
Navigator.pop
中包括
UserObject()

您可以看到代码继续执行并打印
UserObject()

代码片段

final result = await Navigator.push(
  context,
  MaterialPageRoute(builder: (context) => ConnectHome()),
);

print('result ${result.name}')

...
Navigator.pop(context, UserObject("hello","world"));
工作演示

完整代码

import 'package:flutter/material.dart';

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

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

class SelectionButton extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return RaisedButton(
      onPressed: () {
        _navigateAndDisplaySelection(context);
      },
      child: Text('Pick an option, any option!'),
    );
  }

  // A method that launches the SelectionScreen and awaits the result from
  // Navigator.pop.
  _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) => ConnectHome()),
    );

    print('result ${result.name}');
    // After the Selection Screen returns a result, hide any previous snackbars
    // and show the new result.
    Scaffold.of(context)
      ..removeCurrentSnackBar()
      ..showSnackBar(SnackBar(content: Text("${result.name}")));
  }
}

class UserObject {
  String name;
  String id;

  UserObject(this.name, this.id);
}

class ConnectHome extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Pick an option'),
      ),
      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, UserObject("hello","world"));
                },
                child: Text('Hello'),
              ),
            ),
            Padding(
              padding: const EdgeInsets.all(8.0),
              child: RaisedButton(
                onPressed: () {
                  // Close the screen and return "Nope!" as the result.
                  Navigator.pop(context, UserObject("no","No"));
                },
                child: Text('No.'),
              ),
            )
          ],
        ),
      ),
    );
  }
}
导入“包装:颤振/材料.省道”;
void main(){
runApp(材料应用程序)(
标题:“返回数据”,
主页:主屏幕(),
));
}
类主屏幕扩展无状态小部件{
@凌驾
小部件构建(构建上下文){
返回脚手架(
appBar:appBar(
标题:文本(“返回数据演示”),
),
主体:居中(子项:SelectionButton()),
);
}
}
类SelectionButton扩展了无状态小部件{
@凌驾
小部件构建(构建上下文){
返回上升按钮(
已按下:(){
_导航显示选择(上下文);
},
子项:文本('选择一个选项,任意选项!'),
);
}
//启动SelectionScreen并等待来自的结果的方法
//Navigator.pop。
_navigateAndDisplaySelection(BuildContext上下文)异步{
//Navigator.push返回在调用
//选择屏幕上的Navigator.pop。
最终结果=等待Navigator.push(
上下文
MaterialPage路由(生成器:(上下文)=>ConnectHome()),
);
打印('result${result.name}');
//在选择屏幕返回结果后,隐藏所有以前的快捷键
//并给出了新的结果。
脚手架(上下文)
…删除当前snackbar()
…showSnackBar(SnackBar(内容:Text(${result.name}));
}
}
类用户对象{
字符串名;
字符串id;
UserObject(this.name,this.id);
}
类ConnectHome扩展了无状态小部件{
@凌驾
小部件构建(构建上下文){
返回脚手架(
appBar:appBar(
标题:文本(“选择选项”),
),
正文:中(
子:列(
mainAxisAlignment:mainAxisAlignment.center,
儿童:[
填充物(
填充:常数边集全部(8.0),
孩子:升起按钮(
已按下:(){
//关闭屏幕并返回“Yep!”作为结果。
pop(context,UserObject(“hello”,“world”));
},
child:Text('Hello'),
),
),
填充物(
填充:常数边集全部(8.0),
孩子:升起按钮(
已按下:(){
//关闭屏幕并返回“否!”作为结果。
pop(上下文,UserObject(“no”,“no”));
},
子项:文本('编号'),
),
)
],
),
),
);
}
}

为什么使用
Navigator.pop返回对您无效?我需要传递用户对象,pop允许吗?是的,它允许。您可以将值传递给
pop