返回顶部
首页 > 资讯 > 移动开发 >Flutter 构建一个常用的页面框架
  • 781
分享到

Flutter 构建一个常用的页面框架

2024-04-02 19:04:59 781人浏览 泡泡鱼
摘要

目录图标准备BottomNavigationBar 简介构建项目页面结构简化入口代码复用 最终实现的结果如上图所示,顶部共用一个导航栏,底部有四个图标导航,点击对应的图标跳转到对应的

最终实现的结果如上图所示,顶部共用一个导航栏,底部有四个图标导航,点击对应的图标跳转到对应的页面。

图标准备

本次例程需要4个图标,2种颜色,可以从 iconfont 中找到自己需要的图标下载不同的颜色使用。然后在 pubspec.yaml 中的 assets 指定素材所在目录。需要注意的是如果是 png 文件直接指定整个目录即可,但如果是 jpg 格式,则需要同时指定文件名及后缀。

BottomNavigationBar 简介

BottomNavigationBar的构造函数如下:


BottomNavigationBar({
    Key? key,
    required this.items,
    this.onTap,
    this.currentIndex = 0,
    this.elevation,
    this.type,
    Color? fixedColor,
    this.backgroundColor,
    this.iconSize = 24.0,
    Color? selectedItemColor,
    this.unselectedItemColor,
    this.selectedIconTheme,
    this.unselectedIconTheme,
    this.selectedFontSize = 14.0,
    this.unselectedFontSize = 12.0,
    this.selectedLabelStyle,
    this.unselectedLabelStyle,
    this.showSelectedLabels,
    this.showUnselectedLabels,
    this.mouseCursor,
  })

其中常用的属性为:

  • items:及对应的页面组件数组
  • currentIndex:默认显示第几个页面
  • type:组件类型,使用BottomNavigationBarType枚举,有 fixed 和 shifting 两种。fixed 是图标固定位置,而 shifting 的图标点击后会有一个漂移效果,可以实际试一下,一般用fixed 比较多。
  • onTap:点击后的事件,一般用这个更新状态数据,以便更新页面。

其他属性用于控制样式的,可以根据实际需要设置图标大小,主题色,字体等参数。

构建项目页面结构

首先,新建四个业务页面,分别是 dynamic.dart,message.dart,cateGory.dart 和 mine.dart,分别对应动态、消息、分类浏览和个人中心四个页面。目前这四个页面很简单,只是在页面中间依次显示“岛上码农”四个字。代码都是类似的,以 dynamic 为例:


import 'package:Flutter/material.dart';

class DynamicPage extends StatelessWidget {
  const DynamicPage({Key key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Center(
        child: Text('岛'),
      ),
    );
  }
}

注意的是这里的 Scaffold 没有 AppBar 了,这是因为在首页已经有了,如果再有 AppBar 就会出现两个。

其次,新建首页,用于管理四个业务页面,命名为 app.dart。app.dart 使用了 BottomNavigationBar 管理四个业务页面的切换。


import 'package:flutter/material.dart';
import 'dynamic.dart';
import 'message.dart';
import 'category.dart';
import 'mine.dart';

class AppHomePage extends StatefulWidget {
  AppHomePage({Key key}) : super(key: key);

  @override
  _AppHomePageState createState() => _AppHomePageState();
}

class _AppHomePageState extends State<AppHomePage> {
  int _index = 0;

  List<Widget> _homeWidgets = [
    DynamicPage(),
    MessagePage(),
    CategoryPage(),
    MinePage(),
  ];

  void _onBottomNagigationBarTapped(index) {
    setState(() {
      _index = index;
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('岛上码农'),
      ),
      body: IndexedStack(
        index: _index,
        children: _homeWidgets,
      ),
      bottomNavigationBar: BottomNavigationBar(
        type: BottomNavigationBarType.fixed,
        currentIndex: _index,
        onTap: _onBottomNagigationBarTapped,
        items: [
          _getBottomNavItem(
              '动态', 'images/dynamic.png', 'images/dynamic-hover.png', 0),
          _getBottomNavItem(
              ' 消息', 'images/message.png', 'images/message-hover.png', 1),
          _getBottomNavItem(
              '分类浏览', 'images/category.png', 'images/category-hover.png', 2),
          _getBottomNavItem(
              '个人中心', 'images/mine.png', 'images/mine-hover.png', 3),
        ],
      ),
    );
  }

  BottomNavigationBarItem _getBottomNavItem(
      String title, String nORMalIcon, String pressedIcon, int index) {
    return BottomNavigationBarItem(
      icon: _index == index
          ? Image.asset(
              pressedIcon,
              width: 32,
              height: 28,
            )
          : Image.asset(
              normalIcon,
              width: 32,
              height: 28,
            ),
      label: title,
    );
  }
}

这里关键的地方有两个,一是使用的 IndexedStack,这是一个管理页面显示层级的容器。使用 index 属性确定当前容器里那个页面在最顶上,容器里的页面通过 children 属性设置,要求是一个 Widget 数组。因此,逻辑就是当 BottomNavigationBar 中的图标被点击后,对应点击事件会回调 onTap属性指定的方法,将当前的点击索引值传递回调函数,因此可以利用这个方式控制 IndexedStack 的页面层级切换。

最后,使用了状态变量_index 存储IndexedStatck当前显示页面的索引值,然后当 BottomNavigationBar的图标点击事件发生后,在回调函数中使用 setState 更新状态变量_index 来刷新当前界面。

简化入口

main.dart 是入口文件,应当做最基础的配置和全局初始化配置,而不应该有业务代码,因此可以简化为从main 方法加载首页即可。通过这种方式可以让 main.dart 文件即为简洁。这也是在开发的时候需要注意的地方,将不相关的代码剥离,相关的代码聚合,即所谓的“高内聚,低耦合”原则。


import 'package:flutter/material.dart';
import 'app.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'App 框架',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: AppHomePage(),
    );
  }
}

代码复用

写代码的时候要注意复用,在这里将构建 BottomNavigationBar 元素抽离出了一个构建方法_getBottomNavItem,从而提高代码的复用性和维护性,也可以避免 Flutter 的组件构建的 build 方法中出现过多的元素和嵌套,影响代码的可读性。

以上就是Flutter 构建一个常用的页面框架的详细内容,更多关于Flutter 构建页面框架的资料请关注编程网其它相关文章!

--结束END--

本文标题: Flutter 构建一个常用的页面框架

本文链接: https://lsjlt.com/news/126325.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Flutter 构建一个常用的页面框架
    目录图标准备BottomNavigationBar 简介构建项目页面结构简化入口代码复用 最终实现的结果如上图所示,顶部共用一个导航栏,底部有四个图标导航,点击对应的图标跳转到对应的...
    99+
    2024-04-02
  • 利用CSS设计一个全面的网页布局框架
    如何运用CSS创建一个完善的网页布局框架 随着互联网的快速发展和普及,网页布局框架的重要性也日益凸显。而CSS(层叠样式表)作为前端开发的基础技术,可以实现网页的美观、灵活和可维护,成为创建一个完善的网页布局框架的重要工具。本文...
    99+
    2024-01-16
    网页布局 CSS布局 网页框架
  • 怎么从0开始构建一个PHP框架
    这篇文章主要讲解了“怎么从0开始构建一个PHP框架”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么从0开始构建一个PHP框架”吧!如何构建一个自己的PHP框架为什么我们要去构建一个自己的P...
    99+
    2023-06-17
  • 如何用Python和Pygame模块构建一个游戏框架
    如何用Python和Pygame模块构建一个游戏框架,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。通过创建一个简单的骰子游戏来探究 Python。现在是来从零制作你自己的游戏的...
    99+
    2023-06-16
  • Bash、Java、和LeetCode:如何快速构建一个框架?
    在软件开发中,框架是一种非常重要的概念。框架是指一套可以用来快速搭建应用程序的技术架构和工具集。它可以提供预定义的代码和模块,使得开发者可以更加专注于业务逻辑,而不必在每个项目中都从头开始构建基础设施。本文将介绍如何使用Bash、Java...
    99+
    2023-11-05
    leetcode 框架 bash
  • Django框架:一个全面的介绍
    Django框架:一个全面的介绍 Django是Python中最受欢迎和使用广泛的Web开发框架之一。它是一个强大的、高效的、自由的开源造架构,可以帮助Web开发人员快速构建高质量的Web应用程序。通过Django,开发人员可以...
    99+
    2024-01-19
    框架 django 全面
  • 如何使用Go和Bash构建一个强大的数组框架?
    在计算机编程中,数组是一种非常常见的数据结构,它可以用来存储一系列的数据。使用数组可以很方便地对数据进行排序、搜索、过滤等操作。在本文中,我们将介绍如何使用Go和Bash构建一个强大的数组框架,帮助您更好地处理数据。 一、Go语言简介 G...
    99+
    2023-11-05
    bash 数组 框架
  • HTML 框架集标签:构建灵活和响应式的 Web 页面
    HTML 框架集标签用于创建具有多个框架的 Web 页面,每个框架都可以承载独立的文档或应用程序。这些框架可以并排、上下或网格状排列,以创建灵活和响应式的布局。 语法 <frameset> ... </frameset&...
    99+
    2024-04-02
  • 使用Python的Tornado框架实现一个Web端图书展示页面
    首先,为什么选择Tornado: 1.高性能的网络库,这可以和gevent,twisted,libevent等做对。 提供了异步io支持,超时事件处理,在此基础上提供了tcpserver,httpclien...
    99+
    2022-06-04
    框架 页面 图书
  • 构建一个即时消息应用之实现Conversation页面
    这篇文章主要讲解了“构建一个即时消息应用之实现Conversation页面”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“构建一个即时消息应用之实现Conversation页面”吧!聊天标题让...
    99+
    2023-06-16
  • 构建一个即时消息应用之实现Home页面
    这篇文章主要介绍“构建一个即时消息应用之实现Home页面”,在日常操作中,相信很多人在构建一个即时消息应用之实现Home页面问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”构建一个即时消息应用之实现Home页面...
    99+
    2023-06-16
  • vue-cli中怎么利用webpack 构建一个多页面应用
    vue-cli中怎么利用webpack 构建一个多页面应用,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。关于vue.jsvue.js是一套...
    99+
    2024-04-02
  • 掌握HTML框架集标签:构建多页面网站的秘密武器
    HTML 框架集标签是构建多页面网站的强大工具,它允许您将一个网页划分为多个区域(称为框架),每个区域包含一个单独的网页。通过使用框架集,您可以轻松创建复杂的网站,其中不同的页面相互关联并共享共同的导航结构。 框架集标签概述 框架集由 ...
    99+
    2024-03-05
    HTML、框架集、多页面网站、嵌套框架、浮动框架
  • NativePHP:使用PHP构建跨平台桌面应用的新框架
    NativePHP是一个用于使用PHP构建桌面应用的框架。它允许PHP开发人员使用熟悉的工具和技术创建跨平台的原生应用。NativePHP具有一系列易于使用的类,一套用于构建和打包应用程序的工具以及一个静态跨平台PHP运行时。 官网地址:h...
    99+
    2023-08-31
    php 开发语言
  • vue2.0中怎么构建一个单页应用
    vue2.0中怎么构建一个单页应用,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。1.我们将会使用webpack去为我们的模块打包,预处理,热加...
    99+
    2024-04-02
  • Flutter应用框架搭建屏幕适配的方法
    本篇内容主要讲解“Flutter应用框架搭建屏幕适配的方法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Flutter应用框架搭建屏幕适配的方法”吧!因移动设备的多样性,特别是 Android ...
    99+
    2023-06-29
  • 如何使用Go和Bash构建一个具有高可用性的数组框架?
    在现代的计算机应用程序中,数组是最基本的数据结构之一。然而,由于数组的重要性,我们需要确保数组框架具有高可用性,以确保应用程序的稳定性和可靠性。本文将介绍如何使用Go和Bash构建一个具有高可用性的数组框架。 一、什么是高可用性 高可用性...
    99+
    2023-11-05
    bash 数组 框架
  • 如何用vue的vue-router构建一个列表页
    这篇文章主要介绍了如何用vue的vue-router构建一个列表页的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇如何用vue的vue-router构建一个列表页文章都会有所收获,下面我们一起来看看吧。一: 环境...
    99+
    2023-07-04
  • 搭建一个基础的Resty项目框架
    目录1.RestFilter2.Config3.resources4.编写一个Resource一个Resty项目包含的部分(resty-route): 1. RestFilter 像...
    99+
    2024-04-02
  • 优雅设计:学习选择和使用常见CSS框架来构建界面
    构建优雅界面:掌握常用CSS框架的选择与使用 引言:在现代网页设计中,要打造一个美观、优雅的界面十分重要。CSS框架作为前端开发的重要工具,具备了样式预置、网格布局、响应式设计等功能,对于快速实现页面外观的一致性和适配性起到了至...
    99+
    2024-01-16
    CSS框架 界面构建 优雅设计
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作