Flutter系列文章-Flutter在实际业务中的应用
不同场景下的解决方案
1. 跨平台开发: 在移动应用开发中,面对不同的平台(iOS和Android),我们通常需要编写两套不同的代码。而Flutter通过一套代码可以构建适用于多个平台的应用,大大提高了开发效率,降低了维护成本。
2. 混合开发: 在一些已有的原生应用中,引入Flutter可以用于开发某些特定的模块,从而实现混合开发的方式。这能够在不重写整个应用的情况下,引入Flutter的高性能、丰富的UI组件。
3. 新项目开发: 对于全新的项目,Flutter提供了完整的开发框架,可以从头开始构建应用。这为开发者提供了更大的灵活性,能够根据项目需求来设计架构和实现。
Flutter的业务架构模型
1. BLoC模式: BLoC模式通过将业务逻辑和界面逻辑分离,使用Stream进行状态管理,从而使代码更具可维护性和可测试性。通过Sink将输入事件发送到BLoC,再通过StreamBuilder或Provider来更新UI。
2. Provider模式: Provider是一种轻量级的状态管理解决方案,适用于小型到中等规模的应用。它通过InheritedWidget实现了状态在小部件树中共享,通过ChangeNotifier来监听状态变化。
3. Riverpod模式: Riverpod是Provider的一个增强版,提供更强大的依赖注入和状态管理功能。它支持懒加载、异步和作用域等特性,可以更好地管理复杂的状态逻辑。
持续集成和自动化测试
1. GitHub Actions: GitHub Actions是一个内置于GitHub的持续集成工具,它可以在代码提交后自动触发构建、运行测试和部署应用。通过定义工作流程,你可以确保代码的稳定性和质量。
2. Travis CI: 类似于GitHub Actions,Travis CI也是一个广泛使用的持续集成工具。通过在配置文件中定义任务,它可以在每次提交后自动运行测试,以确保代码质量。
Flutter应用监控和数据上报
1. Sentry: Sentry是一个强大的应用错误监控平台,它可以自动捕获应用中的错误和异常,包括崩溃和性能问题。它提供了详细的错误信息、堆栈跟踪和上下文,帮助开发者快速定位和修复问题。
2. Firebase Analytics: Firebase提供了一套应用分析工具,用于跟踪用户行为、应用使用情况和性能指标。你可以了解用户的活跃度、留存率以及应用的加载时间和性能数据。
示例Demo:实际业务场景下的Flutter应用
场景:跨平台音乐播放器
在这个示例中,我们将开发一个跨平台音乐播放器应用。我们将详细展示如何在不同场景下使用Flutter解决方案,以及如何应用业务架构模型、持续集成、自动化测试和应用监控。
功能:
- 播放音乐、暂停、停止
- 显示当前播放歌曲信息
- 列表显示歌曲列表
- 音乐播放状态管理
import 'package:flutter/material.dart';void main() {runApp(MusicPlayerApp());
}class MusicPlayerApp extends StatelessWidget {@overrideWidget build(BuildContext context) {return MaterialApp(title: 'Music Player',theme: ThemeData(primarySwatch: Colors.blue,),home: MusicPlayerScreen(),);}
}class MusicPlayerScreen extends StatefulWidget {@override_MusicPlayerScreenState createState() => _MusicPlayerScreenState();
}class _MusicPlayerScreenState extends State<MusicPlayerScreen> {bool _isPlaying = false;String _currentSong = 'Song Title';void _togglePlay() {setState(() {_isPlaying = !_isPlaying;});}void _changeSong(String songTitle) {setState(() {_currentSong = songTitle;});}@overrideWidget build(BuildContext context) {return Scaffold(appBar: AppBar(title: Text('Music Player')),body: Center(child: Column(mainAxisAlignment: MainAxisAlignment.center,children: [Text('Now Playing: $_currentSong'),IconButton(icon: Icon(_isPlaying ? Icons.pause : Icons.play_arrow),onPressed: _togglePlay,),SongList(onSongChange: _changeSong),],),),);}
}class SongList extends StatelessWidget {final Function(String) onSongChange;SongList({required this.onSongChange});@overrideWidget build(BuildContext context) {return ListView(shrinkWrap: true,children: [ListTile(title: Text('Song 1'),onTap: () => onSongChange('Song 1'),),ListTile(title: Text('Song 2'),onTap: () => onSongChange('Song 2'),),// ... More song items],);}
}
这个示例将包括详细的代码和解释,以及如何使用不同的Flutter特性来实现这些功能。
通过这个示例,你将更深入地了解如何在实际业务中应用Flutter,以及如何运用不同的解决方案和技术来构建高效、稳定的应用。
相关文章:
Flutter系列文章-Flutter在实际业务中的应用
不同场景下的解决方案 1. 跨平台开发: 在移动应用开发中,面对不同的平台(iOS和Android),我们通常需要编写两套不同的代码。而Flutter通过一套代码可以构建适用于多个平台的应用,大大提高了开发效率&#x…...
FPGA | Verilog仿真VHDL文件
当VHDL模块中有Generic块时,应该怎么例化? VHDL模块代码 entity GenericExample isgeneric (DATA_WIDTH : positive : 8; -- 泛型参数:数据宽度ENABLE_FEATURE : boolean : true -- 泛型参数:是否启用特定功能);Port ( clk : …...

微服务--Gatway:网关
routes: - id:order_route(路由唯一 标识,路由到order) uri:http://localhost:8020 #需要转发的地址 #断言规则(用于路由规则的匹配) predicates: -path/order-serv/** -pathlb://order-service # lb: 使用nacos中的本地…...

Django传递dataframe对象到前端网页
在django前端页面上展示的数据,还是使用django模板自带的语法 方式1 不推荐使用 直接使用 【df.to_html(indexFalse)】 使用to_html他会生成一个最基本的表格没有任何的样式,一点都不好看,如果有需要的话可以自行修改表格的样式,…...
iOS swift5 弹出提示文字(停留1~2s)XHToastSwift
CoderZhuXH/XHToastSwift - github // // XHToast.swift // XHToastSwiftExample // // Created by xiaohui on 16/8/12. // Copyright © 2016年 CoderZhuXH. All rights reserved. // 代码地址:https://github.com/CoderZhuXH/XHToastSwiftimport UIKit/*** Toast…...
Spring Bean 的生命周期,如何被管理的
实例化一个Bean,也就是我们通常说的new 按照Spring上下文对实例化的Bean进行配置,也就是IOC注入 如果这个Bean实现了BeanNameAware接口,会调用它实现的setBeanName(String beanId)方法,此处传递的是Spring配置文件中Bean的ID 如…...
MATLAB算法实战应用案例精讲-【概念篇】量子机器学习
目录 前言 几个高频面试题目 机器学习的方法论 知识储备 机器学习的实现...

【kubernetes】Argo Rollouts -- k8s下的自动化蓝绿部署
蓝绿(Blue-Green)部署简介 在现代软件开发和交付中,确保应用程序的平稳更新和发布对于用户体验和业务连续性至关重要。蓝绿部署是一种备受推崇的部署策略,它允许开发团队在不影响用户的情况下,将新版本的应用程序引入生产环境。 蓝绿部署的核心思想在于维护两个独立的环…...

vue Cesium接入在线地图
Cesium接入在线地图只需在创建时将imageryProvider属性换为在线地图的地址即可。 目录 天地图 OSM地图 ArcGIS 地图 谷歌影像地图 天地图 //矢量服务let imageryProvider new Cesium.WebMapTileServiceImageryProvider({url: "http://t0.tianditu.com/vec_w/wmts?s…...

OBS Studio 30.0 承诺在 Linux 上支持英特尔 QSV,为 DeckLink 提供 HDR 回放功能
导读OBS Studio 30.0 现已推出公开测试版,承诺为这款广受欢迎的免费开源截屏和流媒体应用程序提供多项令人兴奋的新功能,以及大量其他更改和错误修复。 OBS Studio 30.0 承诺在 Linux 上支持英特尔 QSV(快速同步视频)、WHIP/WebRT…...

springboot整合SpringSecurity
先写了一个配置类 给这个访问路径,加上角色权限 package com.qf.config;import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; impo…...
最近在搭建ELK日志平台时,logstash报错JSON parse error
直接进入正题,我在搭建elk日志,使用最简单的log4j2 socket json格式 输出到logstash. 但是logstash报错如下: [WARN ] 2023-08-30 10:15:17.766 [nioEventLoopGroup-2-2] jsonlines - JSON parse error, original data now in message field…...

某次护网红队getshell的经历
信息收集 某企业提供信息:企业官网的真实外网ip,内网ip 企业官网比较硬,从控股超过51%的子公司入手 通过企查查找到一堆控股高的子公司,通过ICP/IP地址/域名信息备案管理系统查找子公司官网,收集二级域名。通过google…...
C#实现日期选择器、显示当地时间、跑马灯等功能
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System...

如何让看书变听书?
听书神器 安卓 页面简单,易操作,全网小说随便听 各种声音帮你读你喜欢听的小说,带你进入主人公世界 支持网页版小说、本地小说、图片,都能读给你听 想看小说,又怕伤眼睛的宝子,可以试试看!…...

pytorch异常——loss异常,不断增大,并且loss出现inf
文章目录 异常报错异常截图异常代码原因解释修正代码执行结果 异常报错 epoch1:loss3667.782471 epoch2:loss65358620.000000 epoch3:loss14979486720.000000 epoch4:loss1739650891776.000000 epoch5:loss12361745880317952.000000 epoch6:loss2740315398365287284736.000000…...

Lua学习(一)
lua基础学习 LUA 语言1. 什么是lua?1.1 准备工作 2. 基本语法2.1 注释2.2 标识符2.3 关键字2.4 全局变量 3. 数据类型4. 变量4.1 赋值语句 5. 循环5.1 while循环5.2 for循环5.3泛型for循环5.4 repeat until 循环5.5 break 语句 6. 流程控制6.1 if语句6.2 if else 语…...

Python:列表推导式
相关阅读 Python专栏https://blog.csdn.net/weixin_45791458/category_12403403.html?spm1001.2014.3001.5482 列表推导式使得创建特定列表的方式更简洁。常见的用法为,对序列或可迭代对象中的每个元素应用某种操作,用生成的结果创建新的列表ÿ…...

应急三维电子沙盘数字孪生系统
一、简介应急三维电子沙盘数字孪生系统是一种基于虚拟现实技术和数字孪生技术的应急管理工具。它通过将真实世界的地理环境与虚拟世界的模拟环境相结合,实现了对应急场景的模拟、分析和决策支持。该系统主要由三维电子沙盘和数字孪生模型两部分组成。三维电子沙盘是…...
LeetCode每日一题:1654. 到家的最少跳跃次数(2023.8.30 C++)
目录 1654. 到家的最少跳跃次数 题目描述: 实现代码与解析: bfs 1654. 到家的最少跳跃次数 题目描述: 有一只跳蚤的家在数轴上的位置 x 处。请你帮助它从位置 0 出发,到达它的家。 跳蚤跳跃的规则如下: 它可以 …...

Linux应用开发之网络套接字编程(实例篇)
服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …...

网络六边形受到攻击
大家读完觉得有帮助记得关注和点赞!!! 抽象 现代智能交通系统 (ITS) 的一个关键要求是能够以安全、可靠和匿名的方式从互联车辆和移动设备收集地理参考数据。Nexagon 协议建立在 IETF 定位器/ID 分离协议 (…...

装饰模式(Decorator Pattern)重构java邮件发奖系统实战
前言 现在我们有个如下的需求,设计一个邮件发奖的小系统, 需求 1.数据验证 → 2. 敏感信息加密 → 3. 日志记录 → 4. 实际发送邮件 装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其…...

Prompt Tuning、P-Tuning、Prefix Tuning的区别
一、Prompt Tuning、P-Tuning、Prefix Tuning的区别 1. Prompt Tuning(提示调优) 核心思想:固定预训练模型参数,仅学习额外的连续提示向量(通常是嵌入层的一部分)。实现方式:在输入文本前添加可训练的连续向量(软提示),模型只更新这些提示参数。优势:参数量少(仅提…...
MySQL 隔离级别:脏读、幻读及不可重复读的原理与示例
一、MySQL 隔离级别 MySQL 提供了四种隔离级别,用于控制事务之间的并发访问以及数据的可见性,不同隔离级别对脏读、幻读、不可重复读这几种并发数据问题有着不同的处理方式,具体如下: 隔离级别脏读不可重复读幻读性能特点及锁机制读未提交(READ UNCOMMITTED)允许出现允许…...
java 实现excel文件转pdf | 无水印 | 无限制
文章目录 目录 文章目录 前言 1.项目远程仓库配置 2.pom文件引入相关依赖 3.代码破解 二、Excel转PDF 1.代码实现 2.Aspose.License.xml 授权文件 总结 前言 java处理excel转pdf一直没找到什么好用的免费jar包工具,自己手写的难度,恐怕高级程序员花费一年的事件,也…...

从深圳崛起的“机器之眼”:赴港乐动机器人的万亿赛道赶考路
进入2025年以来,尽管围绕人形机器人、具身智能等机器人赛道的质疑声不断,但全球市场热度依然高涨,入局者持续增加。 以国内市场为例,天眼查专业版数据显示,截至5月底,我国现存在业、存续状态的机器人相关企…...
【ROS】Nav2源码之nav2_behavior_tree-行为树节点列表
1、行为树节点分类 在 Nav2(Navigation2)的行为树框架中,行为树节点插件按照功能分为 Action(动作节点)、Condition(条件节点)、Control(控制节点) 和 Decorator(装饰节点) 四类。 1.1 动作节点 Action 执行具体的机器人操作或任务,直接与硬件、传感器或外部系统…...

多种风格导航菜单 HTML 实现(附源码)
下面我将为您展示 6 种不同风格的导航菜单实现,每种都包含完整 HTML、CSS 和 JavaScript 代码。 1. 简约水平导航栏 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport&qu…...

用docker来安装部署freeswitch记录
今天刚才测试一个callcenter的项目,所以尝试安装freeswitch 1、使用轩辕镜像 - 中国开发者首选的专业 Docker 镜像加速服务平台 编辑下面/etc/docker/daemon.json文件为 {"registry-mirrors": ["https://docker.xuanyuan.me"] }同时可以进入轩…...