我对Flutter 翼是个新手.

我有一个应用程序有两个子部件(Android中有两个片段),当我在WidgetA中单击next按钮时,我想将该部件替换(或推送)到WidgetChildA中,就像Android中的推送(或替换)片段一样.但是,我得到了一个全屏小部件,就像《颤栗》中的普通屏幕一样.

Here is my code:

import 'package:flutter/material.dart';

class DemoFragment extends StatefulWidget {
  @override
  State<StatefulWidget> createState() {
    return new DemoFragmentState();
  }
}

class DemoFragmentState extends State<DemoFragment> {
  @override
  Widget build(BuildContext context) {
    print(context.toString() + context.hashCode.toString());
    return new Scaffold(
      appBar: new AppBar(title: new Text("Demo fragment")),
      body: new Column(
        crossAxisAlignment: CrossAxisAlignment.stretch,
        mainAxisAlignment: MainAxisAlignment.spaceEvenly,
        mainAxisSize: MainAxisSize.max,
        children: <Widget>[
          new FragmentA(),
          new FragmentB()
        ],
      ),
    );
  }
}

class FragmentA extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    print(context.toString() + context.hashCode.toString());
    return new Center(
      child: new Column(
        children: <Widget>[
          new Text("Fragment A"),
          new RaisedButton(
              child: new Text("next"),
              onPressed: () {
                print(context.toString() + context.hashCode.toString());
                Navigator.of(context).push(new PageRouteBuilder(
                    opaque: true,
                    transitionDuration: const Duration(milliseconds: 0),
                    pageBuilder: (BuildContext context, _, __) {
                      return new FragmentChildA();
                    }));

                /*showDialog(
                    context: context,
                    builder: (_) => new AlertDialog(
                          title: new Text("Hello world"),
                          content: new Text("this is my content"),
                        ));*/
              })
        ],
      ),
    );
  }
}

class FragmentB extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    print(context.toString() + context.hashCode.toString());
    return new Center(
        child: new Column(
      children: <Widget>[
        new Text("Fragment B"),
        new RaisedButton(
            child: new Text("next"),
            onPressed: () {
              print(context.toString() + context.hashCode.toString());
              Navigator.of(context).push(new PageRouteBuilder(
                  opaque: true,
                  transitionDuration: const Duration(milliseconds: 0),
                  pageBuilder: (BuildContext context, _, __) {
                    return new FragmentChildB();
                  }));
            })
      ],
    ));
  }
}

class FragmentChildA extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return new Scaffold(
        body: new Center(
            child: new Column(
      mainAxisAlignment: MainAxisAlignment.center,
      children: <Widget>[new Text("Fragment Child A")],
    )));
  }
}

class FragmentChildB extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return new Scaffold(
        body: new Center(
            child: new Column(
      mainAxisAlignment: MainAxisAlignment.center,
      children: <Widget>[new Text("Fragment Child B")],
    )));
  }
}

截图:

Home page
enter image description here

After clicked
enter image description here

推荐答案

嗯,几个月来我想出了处理这个案子的办法,但我只是忘了回答这个问题.

解决方案是用新的导航器包装小部件.

你可以看到视频示例here

还有它的简单演示

这种解决方案的缺点是,有时键盘并没有显示出我的意图.

Dart相关问答推荐

数字到字符串的转换在 Dart 中总是不变的(即没有文化)?

NetworkImage 正在缓存旧图像

一键式 Flutter 工具提示

如何实现 Iterable

Dart 包 - 如何隐藏内部方法和类?

如何在仍然引用来自 pub.dartlang.org 的包的同时运行私有 pub 服务器?

如何在Flutter应用程序中使用套接字?

在调试和生产模式之间切换

无法使用 Flutter 调用 Localhost,将随机端口分配给 HTTP GET 调用

dart的Completer和Future?

在 Dart 中发送 SMTP 邮箱

如何在 Dart 2 中clone复杂对象

如何在 Dart 2 中将 List 更改为 List

Dart:将map转换为查询字符串

~ 在 Dart 中是什么意思?

Dart: 必须取消 Stream 订阅并关闭 StreamSinks 吗?

在 Dart 中打开类类型

dart列表最小值/最大值

如何在 Dart 中获取时间戳?

如何在 Dart 中执行运行时类型判断?