Flutter开发(十二)—— 页面跳转与返回

2023-10-30

示例代码:
以下代码展示页面跳转与返回,抛开所有复杂因素,只展示最简单的跳转!
第一个页面,点击按钮时onPressed 进行相应,通过 Navigator.push 和 MaterialPageRoute 进行页面跳转功能实现;
第二个页面,点击按钮时onPressed 进行相应,通过Navigator.pop(context) 返回上一个页面。

import 'package:flutter/material.dart';

main(List<String> args) {
  runApp(MaterialApp(
    title:'',
    home: FristScreen(),
  ));
}

class FristScreen extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text("第一页"),),
      body: Center(
        child: RaisedButton(  //按钮
          child: Text('跳转到第二页'),
          onPressed: (){  //相应按钮点击事件
            // 通过MaterialPageRoute跳转逻辑 的具体执行
            Navigator.push(context, MaterialPageRoute(
              builder: (context)=>SecondScreen()
            ));
          },
        ),
      ),
    );
  }
}

class SecondScreen extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text("第一页"),),
      body: Center(
        child: RaisedButton(
          child: Text("返回第一页"),
          onPressed: (){
            Navigator.pop(context);
          },
        ),
      ),
    );
  }
}

效果展示:
在这里插入图片描述
//------------------------------------
上面的跳转太简单了,下面展示一个结合GridView 自动填充数据,跳转并传值的实例。这个场景,实际工作中,非常常见。以下代码,class Animal 进行属性定义,并组织数据。
第一个页面:AnimalListPage,利用Grid展示 动物图片(小图);
第二个页面:AnimalBigImage,展示跳转后传值并展示对应大图。

Bean类创建,并初始化数据:


class Animal {
  final String name;

  final String image;

  final String description;

  Animal({this.name, this.image, this.description});

  static List<Animal> allAnimal() {
    var animal = List<Animal>();

    animal.add(Animal(
      name: "老虎",
      description: "老虎屁股摸不得!",
      image: "https://dwz.cn/ghiCDaUp",
    ));

    animal.add(Animal(
      name: "小狗",
      description: "小狗啃骨头",
      image: "https://dwz.cn/Isoze9KN",
    ));

    animal.add(Animal(
      name: "小猫",
      description: "小猫吃鱼",
      image: "https://dwz.cn/x4dNzR6r",
    ));

    animal.add(Animal(
      name: "老鼠",
      description: "老鼠会打洞",
      image: "https://dwz.cn/1WeGTFA5",
    ));

    animal.add(Animal(
      name: "小鸡",
      description: "小鸡本米尺",
      image: "https://dwz.cn/SXhBUBCP",
    ));
    return animal;
  }
}

页面显示和跳转逻辑

import 'package:flutter/material.dart';
import 'Animal.dart';	//引入class  Animal

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: "Grid Image",
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: AnimalListPage(),
    );
  }
}

class AnimalListPage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('动物列表'),
      ),
      body: Center(
        child: GridView.count(
          crossAxisCount: 3,
          padding: EdgeInsets.all(8.0),
          // .map().toList 对allAnimal 进行遍历赋值
          children: Animal.allAnimal().map((Animal animal) {
            return _getGridViewItemUI(context, animal); //赋值后的Widget
          }).toList(),
        ),
      ),
    );
  }
}

// animal将 其属性的值,付给自定义的Widget
Widget _getGridViewItemUI(BuildContext context, Animal animal) {
  return InkWell(
    // 处理点击事件,进行传值(animal)跳转(AnimalBigImage)
    onTap: () {
      Navigator.push(
          context,
          MaterialPageRoute(
              builder: (context) => AnimalBigImage(
                    animal: animal,
                  )));
    },
    child: Card(
      elevation: 4.0,
      child: Column(
        children: <Widget>[
          // 按比例垂直布局 4 : 1
          Expanded(
            child: Image.network(
              '${animal.image}',
              fit: BoxFit.cover,
            ),
            flex: 4,
          ),
          Expanded(
            child: Text(
              animal.name,
              style: TextStyle(fontSize: 14.0, fontWeight: FontWeight.bold),
            ),
            flex: 1,
          ),
        ],
      ),
    ),
  );
}

// 第二个页面 展示Animal Big Image
class AnimalBigImage extends StatelessWidget {
  final Animal animal;
  AnimalBigImage({Key key, @required this.animal}) : super(key: key);
  @override
  Widget build(BuildContext context) {
    final size = MediaQuery.of(context).size; //获取设备屏幕长宽
    return Scaffold(
      appBar: AppBar(
        title: Text('${animal.description}'),
      ),
      body: Center(
        child: Image.network(
          '${animal.image}',
          width: size.width,
          height: size.height,
          fit: BoxFit.cover,
        ),
      ),
    );
  }
}

展示效果:(效果太他妈流程了)
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Flutter开发(十二)—— 页面跳转与返回 的相关文章

随机推荐

  • 多个RecycleView 嵌套显示不全的情况

    场景 项目中最外层使用ScrollView 里面嵌套了recycleview recycleview中又嵌套了多个recycleview 导致部分recycleview显示不出来 app界面的结构图
  • 空间域图像增强:图像锐化/增强

    空间域图像增强 OpenCV图像锐化 增强 0 综述 1 Laplacian高通滤波算子 2 Laplacian锐化代码实践 3 USM锐化增强算法 4 USM代码实践 0 综述 图像的卷积计算除了可以完成我们前面介绍的模糊去噪 边缘检测等
  • anaconda3.6.5安装pyhive

    1 首先安装anaconda3 6 5 略 2 配置好bin下环境变量 3 来到anaconda官网 搜索需要的包 pyhive 不是anaconda前缀的也行 例如biaze pyhive https anaconda org anaco
  • Qt学习笔记

    1 Qt 音同 cute 是一个跨平台的 C 开发库 主要用来开发图形用户界面 Graphical User Interface GUI 程序 当然也可以开发不带界面的命令行 Command User Interface CUI 程序 2
  • Ubuntu 16.04出现:Problem executing scripts APT::Update

    Ubuntu 16 04出现 Problem executing scripts APT Update Post Invoke Success if usr bin test w var cache app info a e usr bin
  • unity按钮实现人物变大效果

    unity按钮实现人物变大效果 游戏里面模型变大效果的实现 如下动态图所示 点我下载 https download csdn net download weixin 43474701 71975042
  • java 通过pdf模板,生成PDF,并下载到本地

    注意 本例子是从向模板定义的变量赋值 而不是从无到有的来生成pdf 直接就能用 maven依赖
  • 精通MySQL之架构篇

    今天给大家分享的是大数据开发基础部分MySQL的第一篇 老刘讲点和别人不一样的内容 众多伙伴都知道MySQL的基础知识以及使用 但是对里面的原理知道的不多 咱们学知识只看表面绝对是不行的 所以老刘争取把MySQL的架构知识给大家讲明白 My
  • Shell编程之echo命令

    Shell 的 echo 指令与 PHP 的 echo 指令类似 都是用于字符串的输出 命令格式 echo string 您可以使用echo实现更复杂的输出格式控制 1 显示普通字符串 echo It is a test 这里的双引号完全可
  • Vue3 (computed函数,watch函数,watchEffect函数)

    1 computed函数 与vue2中computed配置功能一致 变化 需要引入 组合式的API
  • 树莓派第一讲:入门那些事(系统烧录、外设连接)

    目录 基本了解 系统烧录 连接外设 基本了解 树莓派4B是一款单板计算机 采用ARM架构处理器 配备4GB内存 Gigabit以太网口 多个USB接口 HDMI输出接口等 它具备1 5Ghz运行的64位四核处理器 最高支持以60fps速度刷
  • 因果推断 - 基础知识

    目录 因果关系之梯 因果图的路径结构 阻断 d 分离 混杂 结构因果模型 SCM 版权 转载前请联系作者获得授权 声明 部分内容出自因果关系之梯 已获得原作者授权 参考书籍 The Book of Why Judea Pearl 因果关系之
  • 什么是回调函数Callback----自己的一点理解

    何为回调函数 若把函数的指针作为函数参数传递给一个函数 当这个指着被用来调用它所指向的函数时 我们将该指针所指向的函数称为回调函数 回调函数与普通函数最大区别在于函数的调用 对普通函数而言 函数实现者可以直接拿来用 可以直接将它放在main
  • 金山逍遥网 sersync 服务器实时镜像同步方案

    金山逍遥网 sersync 服务器实时镜像同步方案 1 sersync rsync原理 2 inotify和sersync同步的区别 3 配置sersync rsync实现实时同步 2台centos7 4 一台装sersync一台装rsyn
  • 『网络安全』蜜罐到蜜网入门指南(三)蜜罐内部组成分析

    原创不易 点个赞呗 如果喜欢 关注 收藏不迷路 前言 大家好 网络安全 蜜罐到蜜网入门指南 进入第三篇 通过前面的内容 我们知道了什么是蜜罐以及蜜罐的作用和分类等 点击下方链接 可快速查看 相关文章 网络安全 蜜罐到蜜网入门指南 一 蜜罐初
  • php执行命令的函数和方法

    PHP提供4个专门的执行外部命令的函数 exec system passthru shell exec 1 exec 原型 string exec string command array output int return var 说明
  • Win10+Ubuntu双系统 使用EasyUEFI修复Ubuntu引导启动项

    某同事安装了Win10 Ubuntu双系统 有一天电脑突然坏了开不了机 把硬盘拆下放到别的机器上 发现是直接进入Win10系统 而不是grub选择界面 进F12也找不到ubuntu的启动项 最开始我先使用 Win10 Ubuntu双系统修复
  • 在项目中添加天气预报功能

    查看当地的天气情况 调用七日的天气预报情况 天气预报 注册账号获取appid和APPSecret使用 https www tianqiapi com api 图标可以直接在网站上下载
  • CoreDNS 惊现诡异 bug,导致服务大面积中断

    Sealos 公众号已接入了 GPT 4 完全免费 欢迎前来调戏 原文链接 https juejin cn post 7277471908417110053 我是 LEE 老李 一个在 IT 行业摸爬滚打 17 年的技术老兵 事件背景 某天
  • Flutter开发(十二)—— 页面跳转与返回

    示例代码 以下代码展示页面跳转与返回 抛开所有复杂因素 只展示最简单的跳转 第一个页面 点击按钮时onPressed 进行相应 通过 Navigator push 和 MaterialPageRoute 进行页面跳转功能实现 第二个页面 点