• Flutter


    之前写过一篇文章,Flutter - 创建横跨所有页面的侧滑菜单。这个里面中使用了Navigator.of(context).push来导航到新的页面。

    这次介绍一种不使用导航,仅仅改变content即可。

    这样做的好处是,不需要来回处理导航和路由那么个复杂的东西。

    1. 准备工作

    新建四个页面,CartJDTaobiaoSettings。这里仅放一下Cart的代码,其他类似

    import 'package:flutter/material.dart';
    
    class Cart extends StatelessWidget{
      @override
      Widget build(BuildContext context){
        return new Center(
          child: Text('Cart'),
        );
      }
    }

    2. 添加页面引用

    由于我放在了同级目录,仅作演示。所以引用如下

    import './cart.dart';
    import './settings.dart';
    import './jd.dart';
    import './taobiao.dart';

    实际项目不建议这么操作,可以新建一个pages文件夹,放进去。

    3. 新建一个空页面,并添加一个drawer,加入四个ListTile,分别是Cart、JD、Taobiao、Settings

    void main() => runApp(new MaterialApp(
          home: new NavDrawer(),
        ));
    
    class NavDrawer extends StatefulWidget {
      @override
      _NavDrawerState createState() => new _NavDrawerState();
    }
    
    class _NavDrawerState extends State<NavDrawer> {
      @override
      initState() {
        super.initState();
      }
    
      @override
      Widget build(BuildContext context) {
        return new Scaffold(
          appBar: new AppBar(),
          drawer: new Drawer(
            child: new ListView(
              children: <Widget>[
                new ListTile(
                  title: new Text("Cart"),
                  trailing: new Icon(Icons.local_florist),
                ),
                new ListTile(
                  title: new Text("JD"),
                  trailing: new Icon(Icons.desktop_windows),
                ),
                new ListTile(
                  title: new Text("Taobiao"),
                  trailing: new Icon(Icons.table_chart),
                ),
                new ListTile(
                  title: new Text("Settings"),
                  trailing: new Icon(Icons.settings),
                )
              ],
            ),
          ),
          body: new Container(
    
          ),
        );
      }
    }

    可以看到我们并没有添加onTap事件,还有Scaffoldbody是空的,暂时没有设置。

    4. 添加点击事件

    这里仅演示Cart的点击代码,其他类似 

                  onTap: () {
                    setState(() {
                      content = Cart();
                      Navigator.pop(context);
                    });
                  },

     里面有一个Cart()赋值给了content,所以需要在类_NavDrawerState的最开始定义一下

    dynamic content=Cart();

    同时使用了setState方法,来通知框架content的值已改变。

     

    5. 设置Scaffold的内容

    body: new Container(
            child: content,
          ),

    6. 运行调试

  • 相关阅读:
    一失足千古恨在 WSL 中使用了 md 创建文件夹 (2020-04-26)
    开源中国 ThinkPHP 领奖
    投资投机脑图(2019-12-12)
    什么? 1XIN = 21BTC
    笔记:投机和投资 F4NNIU
    如何设置单个 Git 仓库的代理从而提高更新速度
    FastAdmin 使用 phpmail 出现 spl_autoload_register 错误
    plsql 引用型变量
    oracle 存储函数
    oracle存储过程(带参数的存储过程)
  • 原文地址:https://www.cnblogs.com/hupo376787/p/10064391.html
Copyright © 2020-2023  润新知