【问题标题】:Show back button instead of drawer button - flutter显示后退按钮而不是抽屉按钮 - 颤动
【发布时间】:2019-12-19 11:32:25
【问题描述】:

我有一个使用材料设计的 Flutter 项目,当我浏览路线时,appbar 将显示后退按钮。最近在我的项目中刚刚实现了一个抽屉,抽屉图标覆盖了后退图标。我基本上想撤消此操作,为某些屏幕显示后退按钮,并为其他屏幕显示菜单按钮,就像我定义具有showIcon: false 属性的抽屉时一样?我知道这个post 是一个类似的问题,但没有显示问题或解决方案的代码......我的抽屉看起来像这样:

return Scaffold(
  //appbar is here
  appBar: AppBar(
    title: Text("Title"),
  ),
  drawer: drawer,
  body: _buildBody(),
);

我在这里定义抽屉:

var drawer = Drawer(
  child: ListView(
    padding: EdgeInsets.zero,
    children: <Widget>[
      //My listTiles and UserAccountsDrawerHeader are removed for simplicity
    ],
  ),
);

感谢您的帮助。

【问题讨论】:

  • 能否编辑您的问题,显示您如何在应用中的不同屏幕中导航?您可以在不同的小部件中为不同的Scaffolds 传递不同的AppBar 对象,但似乎您只使用单个Scaffold 对象进行操作。
  • 如果这不起作用,Jack 一定要告诉我。

标签: flutter flutter-layout


【解决方案1】:

我不确定我的理解是否正确,这是输出,下面是完整代码。

void main() => runApp(MaterialApp(home: MyPage()));

class MyPage extends StatefulWidget {
  @override
  _MyPageState createState() => _MyPageState();
}

class _MyPageState extends State<MyPage> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(),
      body: Center(
        child: Column(
          children: <Widget>[
            RaisedButton(
              onPressed: () => Navigator.push(context, MaterialPageRoute(builder: (_) => Page1())),
              child: Text("Go to Drawer Page"),
            ),
            RaisedButton(
              onPressed: () => Navigator.push(context, MaterialPageRoute(builder: (_) => Page2())),
              child: Text("Go to Back button Page"),
            ),
          ],
        ),
      ),
    );
  }
}

// this has drawer
class Page1 extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(),
      body: Center(),
      drawer: Drawer(),
    );
  }
}


// this has back button and drawer
class Page2 extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        leading: IconButton(
          icon: Icon(Icons.arrow_back),
          onPressed: () => Navigator.pop(context),
        ),
      ),
      body: Center(),
      drawer: Drawer(),
    );
  }
}

【讨论】:

  • 我仍然希望抽屉在第 2 页上可用,只需从右边缘向左滑动即可。
  • 好的,没问题,我已经更新了代码,现在它会有第 2 页的后退图标,还有一个抽屉,可以从右向左滑动。
【解决方案2】:
AppBar(
leading: Builder(
builder: (BuildContext context) {
  return IconButton(
    icon: const Icon(Icons.arrow_back),
    onPressed: () { Navigator.pop(context); },

  );
},
),
)

【讨论】:

  • 将此解决方案与使用 endDrawer 代替抽屉相结合,您可以同时拥有返回按钮和抽屉功能。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-04-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-01
  • 2023-03-19
  • 1970-01-01
相关资源
最近更新 更多