flutter鸿蒙版本通过底部导航栏的实现熟悉架构及语法

简介: flutter鸿蒙版本通过底部导航栏的实现熟悉架构及语法

写在前面

  1. 引入 Flutter 包

  2. 应用程序的入口

  3. 创建 MyApp 组件

  4. 创建 HomePage 组件

  5. 实现状态类

状态变量

页面列表

点击事件处理

  1. 构建用户界面

Scaffold 布局

顶部应用栏

显示页面

底部导航栏

  1. 完整代码

写在最后

写在前面
在这篇博客中,我们将深入分析一个 Flutter 应用的完整代码,该应用实现了一个底部导航栏,允许用户在不同页面之间切换。我们将逐行讲解代码,帮助大家理解 Flutter 的结构、状态管理以及组件之间的交互。

  1. 引入 Flutter 包
    import 'package:flutter/material.dart';
    这一行代码导入了 Flutter 的核心 Material Design 库。这个库为我们提供了各种丰富的 UI 组件,允许我们构建出具有良好用户体验的应用界面。

  2. 应用程序的入口
    void main() {
    runApp(MyApp());
    }
    main() 函数是 Dart 应用程序的入口。在这里,我们调用 runApp() 方法来启动 Flutter 应用,并传入 MyApp 组件作为根组件。runApp() 方法会将传入的 Widget 加载到屏幕上。

  3. 创建 MyApp 组件
    class MyApp extends StatelessWidget { ///无状态的视图(非响应式)
    @override
    Widget build(BuildContext context) {
    return MaterialApp(
    title: 'Flutter Bottom Navigation',
    theme: ThemeData(

     primarySwatch: Colors.blue,
    

    ),
    home: HomePage(),
    );
    }
    }
    MyApp 继承自 StatelessWidget,表明这是一个无状态的视图组件,它不会随着时间的推移而改变。
    在 build 方法中,我们构建了一个 MaterialApp,这是 Flutter 应用的核心组件,提供了应用的主题、路由等设置。
    title 属性定义了应用的标题,通常用于显示在任务切换器中。
    theme 属性设置了应用的主题,这里我们使用蓝色调(primarySwatch 为 Colors.blue)。
    home 属性指定了应用的主页,这里我们将其设置为 HomePage 组件。

  4. 创建 HomePage 组件
    class HomePage extends StatefulWidget {
    ///有状态的视图(响应式)
    @override
    _HomePageState createState() => _HomePageState();
    }
    HomePage 组件继承自 StatefulWidget,表明它是一个有状态的组件。与无状态组件不同,有状态组件可以根据用户的交互而改变其显示内容。
    createState 方法返回一个 _HomePageState 对象,该对象将保存 HomePage 的状态。
  5. 实现状态类
    class _HomePageState extends State {
    int _selectedIndex = 0; // 当前选中的底部导航项

    // 页面列表
    List _pages = [
    Center(child: Text('Home Page')),
    Center(child: Text('Search Page')),
    Center(child: Text('Profile Page')),
    ];

    void _onItemTapped(int index) {
    setState(() {
    _selectedIndex = index; // 更新选中的索引
    });
    }
    状态变量
    _HomePageState 类负责管理 HomePage 的状态。我们定义了一个整型变量 _selectedIndex,初始值为 0,用于追踪当前选中的底部导航项。
    页面列表
    _pages 列表包含了三个页面,分别是:
    Home Page
    Search Page
    Profile Page
    每个页面都是一个 Center 小部件,里面包含一个 Text 小部件,表示当前页面的名称。

点击事件处理
_onItemTapped 方法用于处理底部导航项的点击事件。当用户点击某个导航项时,这个方法会被调用,并通过 setState 方法更新 _selectedIndex,触发界面重建,从而显示新选中的页面。

  1. 构建用户界面
    @override
    Widget build(BuildContext context) {
    return Scaffold(
    appBar: AppBar(
    title: Text('Flutter Bottom Navigation'),
    ),
    body: _pages[_selectedIndex], // 显示当前选中的页面
    bottomNavigationBar: BottomNavigationBar(
    items: const [
     BottomNavigationBarItem(
       icon: Icon(Icons.home),
       label: 'Home',
     ),
     BottomNavigationBarItem(
       icon: Icon(Icons.search),
       label: 'Search',
     ),
     BottomNavigationBarItem(
       icon: Icon(Icons.person),
       label: 'Profile',
     ),
    
    ],
    currentIndex: _selectedIndex, // 当前选中的索引
    selectedItemColor: Colors.blue,
    onTap: _onItemTapped, // 点击事件
    ),
    );
    }

Scaffold 布局
build 方法返回一个 Scaffold 小部件,它提供了应用的基本视觉结构,包括 appBar、body 和 bottomNavigationBar。
顶部应用栏
appBar 属性设置了应用的顶部导航栏,显示了应用的标题。
显示页面
body 属性通过 _pages[_selectedIndex] 动态显示当前选中的页面。根据 _selectedIndex 的值,应用会渲染不同的页面内容。
底部导航栏
bottomNavigationBar 属性定义了底部导航栏的结构。它包含三个导航项:

Home:图标为家(Icons.home)。
Search:图标为搜索(Icons.search)。
Profile:图标为个人资料(Icons.person)。
currentIndex 属性设置当前选中的索引,selectedItemColor 属性定义了选中项的颜色。

onTap 属性将点击事件绑定到 _onItemTapped 方法,使得点击导航项时可以更新状态和切换页面。

  1. 完整代码
    下面是整段代码的完整展示,方便您对照:

import 'package:flutter/material.dart';

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

class MyApp extends StatelessWidget {
///无状态的视图(非响应式)
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Bottom Navigation',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: HomePage(),
);
}
}

class HomePage extends StatefulWidget {
///有状态的视图(响应式)
@override
_HomePageState createState() => _HomePageState();
}

class _HomePageState extends State {
int _selectedIndex = 0; // 当前选中的底部导航项

// 页面列表
List _pages = [
Center(child: Text('Home Page')),
Center(child: Text('Search Page')),
Center(child: Text('Profile Page')),
];

void _onItemTapped(int index) {
setState(() {
_selectedIndex = index; // 更新选中的索引
});
}

@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Flutter Bottom Navigation'),
),
body: _pages[_selectedIndex], // 显示当前选中的页面
bottomNavigationBar: BottomNavigationBar(
items: const [
BottomNavigationBarItem(
icon: Icon(Icons.home),
label: 'Home',
),
BottomNavigationBarItem(
icon: Icon(Icons.search),
label: 'Search',
),
BottomNavigationBarItem(
icon: Icon(Icons.person),
label: 'Profile',
),
],
currentIndex: _selectedIndex, // 当前选中的索引
selectedItemColor: Colors.blue,
onTap: _onItemTapped, // 点击事件
),
);
}
}

写在最后
通过这段代码,我们构建了一个基本的 Flutter 应用,包含了底部导航栏,可以在不同页面之间进行切换。该示例展示了 Flutter 的状态管理机制、组件结构以及如何使用 Material Design 组件构建用户界面。

希望本文能够帮助您更好地理解 Flutter 开发!如果您有任何问题或建议,欢迎与我交流。

相关文章
【YashanDB知识库】如何排查YMP报错:”OCI版本为空或OCI的架构和本地系统的架构不符“
【YashanDB知识库】如何排查YMP报错:”OCI版本为空或OCI的架构和本地系统的架构不符“
【YashanDB知识库】如何排查YMP报错:”OCI版本为空或OCI的架构和本地系统的架构不符“
|
8月前
|
资源调度 前端开发 算法
鸿蒙OS架构设计探秘:从分层设计到多端部署
本文深入探讨了鸿蒙OS的架构设计,从独特的“1+8+N”分层架构到模块化设计,再到智慧分发和多端部署能力。分层架构让系统更灵活,模块化设计通过Ability机制实现跨设备一致性,智慧分发优化资源调度,多端部署提升开发效率。作者结合实际代码示例,分享了开发中的实践经验,并指出生态建设是未来的关键挑战。作为国产操作系统的代表,鸿蒙的发展值得每一位开发者关注与支持。
|
4月前
|
达摩院 安全 Anolis
Anolis OS 23 架构支持家族新成员:Anolis OS 23.3 版本及 RISC-V 预览版发布
Anolis OS 23.3在保障基础功能持续演进、完善安全漏洞的修复的同时,实现了对 RISC-V 的初步支持。
|
5月前
|
设计模式 开发者
一、HarmonyOS Next 开发者手册项目之项目架构设计
该项目是一个基于HarmonyOS Next的开发者学习手册应用,旨在帮助开发者系统学习HarmonyOS开发知识。项目采用分级学习方式,从基础到高级逐步深入讲解技术与实践案例。前四章重点介绍应用架构相关内容,助力快速掌握应用核心。 项目结构清晰,包含主入口、源代码目录、公共资源和工具等。页面导航分为多个阶段:萌新小白(基础入门)、登堂入室(进阶学习)、进阶高手(高级开发)。支持Markdown解析,使用`@luvi/lv-markdown-in`插件展示内容,并定义了多种数据结构以规范开发流程。 源码已开源,持续更新中
120 1
|
11月前
|
自然语言处理 JavaScript Java
《鸿蒙HarmonyOS应用开发从入门到精通(第2版)》学习笔记——HarmonyOS架构介绍
HarmonyOS采用分层架构设计,从下至上分为内核层、系统服务层、框架层和应用层。内核层支持多内核设计与硬件驱动;系统服务层提供核心能力和服务;框架层支持多语言开发;应用层包括系统及第三方应用,支持跨设备调度,确保一致的用户体验。
869 81
|
9月前
|
前端开发 Java Shell
【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
569 20
【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
|
9月前
|
缓存 Java 测试技术
【01】噩梦终结flutter配安卓android鸿蒙harmonyOS 以及next调试环境配鸿蒙和ios真机调试环境-flutter项目安卓环境配置-gradle-agp-ndkVersion模拟器运行真机测试环境-本地环境搭建-如何快速搭建android本地运行环境-优雅草卓伊凡-很多人在这步就被难倒了
【01】噩梦终结flutter配安卓android鸿蒙harmonyOS 以及next调试环境配鸿蒙和ios真机调试环境-flutter项目安卓环境配置-gradle-agp-ndkVersion模拟器运行真机测试环境-本地环境搭建-如何快速搭建android本地运行环境-优雅草卓伊凡-很多人在这步就被难倒了
1030 3
【01】噩梦终结flutter配安卓android鸿蒙harmonyOS 以及next调试环境配鸿蒙和ios真机调试环境-flutter项目安卓环境配置-gradle-agp-ndkVersion模拟器运行真机测试环境-本地环境搭建-如何快速搭建android本地运行环境-优雅草卓伊凡-很多人在这步就被难倒了
|
7月前
|
前端开发 API 开发工具
一年撸完百万行代码,企业微信的全新鸿蒙NEXT客户端架构演进之路
本文将要分享的是企业微信的鸿蒙Next客户端架构的演进过程,面对代码移植和API不稳定的挑战,提出了DataList框架解决方案。通过结构化、动态和认知三重熵减机制,将业务逻辑与UI解耦,实现数据驱动开发。采用MVDM分层架构(业务实体层、逻辑层、UI数据层、表示层),屏蔽系统差异,确保业务代码稳定。
290 0
|
9月前
【YashanDB 知识库】如何排查 YMP 报错:”OCI 版本为空或 OCI 的架构和本地系统的架构不符“
在迁移预检查的版本检查阶段报错“OCI 版本为空”,原因是 OCI 架构与本地系统不符或依赖库缺失。排查发现 `libdrv_oracle.so` 缺少 `libnsl.so.1` 库,尽管 OCI 客户端路径已正确加入 `LD_LIBRARY_PATH`。解决方法包括下载安装相应动态库版本,或通过软链接指向更高版本库(如 `libnsl.so.2`)。总结:确保动态库路径正确配置,并使用 `ldd` 查看依赖库,必要时创建软链接以解决问题。
|
9月前
【YashanDB 知识库】如何排查 YMP 报错:”OCI 版本为空或 OCI 的架构和本地系统的架构不符“
**问题现象**:迁移预检查时,因OCI版本为空或架构不符报错。通过查看yasdts日志发现缺少libnsl.so.1依赖库。 **排查步骤**: 1. 查看日志确认缺少的依赖库。 2. 检查OCI客户端路径是否已加入LD_LIBRARY_PATH环境变量。 3. 使用`ldd`命令检查其他缺失的依赖库。 **解决方法**: 1. 下载并安装所需的动态库版本。 2. 若无法联网,查找本地是否有相应库。 3. 如本地有高版本库,创建软链接指向所需版本(如`ln -s /lib64/libnsl.so.2 libnsl.so.1`)。

热门文章

最新文章