前端

Flutter资源管理

资源管理 Flutter应用程序可以包含代码和 assets(有时称为资源)。assets是会打包到程序安装包中的,可在运行时访问。常见类型的assets包括静态数据(例如JSON文件)、配置文件、图标和图片(JPEG,WebP,GIF,动画WebP / GIF,PNG,BMP和WBMP)等。 指定 assets 和包管理一样,Flutter也使用pubspec.yaml文件来管理应用程序所需的资源。举一个例子: flutter: assets: - assets/my_icon.png - assets/background.png assets指定应包含在应用程序中的文件。 每个asset都通过相对于pubspec.yaml文件所在位置的显式路径进行标识。asset的声明顺序是无关紧要的。asset的实际目录可以是任意文件夹(在本示例中是assets)。 在构建期间,Flutter将asset放置到称为 asset bundle 的特殊存档中,应用程序可以在运行时读取它们(但不能修改)。 Asset 变体(variant) 构建过程支持asset变体的概念:不同版本的asset可能会显示在不同的上下文中。 在pubspec.yaml的assets部分中指定asset路径时,构建过程中,会在相邻子目录中查找具有相同名称的任何文件。这些文件随后会与指定的asset一起被包含在asset bundle中。 例如,如果应用程序目录中有以下文件: …/pubspec.yaml …/graphics/my_icon.png …/graphics/background.png …/graphics/dark/background.png …etc. 然后pubspec.yaml文件中只需包含: flutter: assets: - graphics/background.png 那么这两个graphics/background.png和graphics/dark/background.png 都将包含在您的asset bundle中。前者被认为是main asset (主资源),后者被认为是一种变体(variant)。 在选择匹配当前设备分辨率的图片时,Flutter会使用到asset变体(见下文),将来,Flutter可能会将这种机制扩展到本地化、阅读提示等方面。 加载 assets 您的应用可以通过AssetBundle对象访问其asset 。有两种主要方法允许从Asset bundle中加载字符串或图片(二进制)文件。 加载文本assets 通过rootBundle 对象加载:每个Flutter应用程序都有一个rootBundle对象, 通过它可以轻松访问主资源包,直接使用package:flutter/services.dart中全局静态的rootBundle对象来加载asset即可。 通过 DefaultAssetBundle 加载:建议使用 DefaultAssetBundle 来获取当前BuildContext的AssetBundle。 这种方法不是使用应用程序构建的默认asset bundle,而是使父级widget在运行时动态替换的不同的AssetBundle,这对于本地化或测试场景很有用。 通常,可以使用DefaultAssetBundle.of()在应用运行时来间接加载asset(例如JSON文件),而在widget上下文之外,或其它AssetBundle句柄不可用时,可以使用rootBundle直接加载这些asset,例如: import 'dart:async' show Future; import 'package:flutter/services.dart' show rootBundle; Future loadAsset() async { return await rootBundle.

echart相关操作xAxis,yAxis,series,grid,(包括x轴样式,y轴样式,折现样式,网格样式,折现阴影,折线上方显示数据,x轴文字倾斜)

样式截图大概如下: 1. x,y轴相关操作:xAxis,yAxis (1) x,y轴的颜色: axisLine: { lineStyle: { color: '#2898e5', }, }, (2) x,y轴文字颜色: axisLabel: { show: true, textStyle: { color: '#019bf8' } } (3)x,y轴刻度颜色: axisTick: { lineStyle: { color: '#2898e5' } } (4) x,y轴坐标文字太长显示不全:,倾斜rotate axisLabel: { show: true, interval: 0, rotate: 20 }, (5)x ,y 轴网格线的颜色: splitLine: { show: true, lineStyle: { color: ['rgb(1,155,246,0.3)'], //网格线 width: 1, } }, 2. 折现 的样式 (1) 折现的平滑度series: symbol: 'circle', //实心点 symbolSize: 6, //实心点的大小 smooth: true, //折现平滑 (2)折现的颜色:

小程序WebSocket心跳检测,断线重连

我把小程序WebSocket的一些功能封装成一个类,里面包括建立连接、监听消息、发送消息、心跳检测、断线重连等等常用的功能。 export default class websocket { constructor({ heartCheck, isReconnection }) { // 是否连接 this._isLogin = false; // 当前网络状态 this._netWork = true; // 是否人为退出 this._isClosed = false; // 心跳检测频率 this._timeout = 3000; this._timeoutObj = null; // 当前重连次数 this._connectNum = 0; // 心跳检测和断线重连开关,true为启用,false为关闭 this._heartCheck = heartCheck; this._isReconnection = isReconnection; this._onSocketOpened(); } // 心跳重置 _reset() { clearTimeout(this._timeoutObj); return this; } // 心跳开始 _start() { let _this = this; this._timeoutObj = setInterval(() => { wx.

Vue+Cesium从入门到放弃:拾贝

我知道你在找它,如果没有你打我 1.取消Cesium版权信息 $(".cesium-widget-credits").remove(); 或 const credits = document.getElementsByClassName("cesium-widget-credits"); credits[0].parentElement.removeChild(credits[0]); 2.禁止双击zoom到Entity viewer.cesiumWidget.screenSpaceEventHandler.removeInputAction(Cesium.ScreenSpaceEventType.LEFT_DOUBLE_CLICK); 效果:禁止双击放大地图 3.标记去掉地形遮挡 entity.billboard.disableDepthTestDistance = Number.POSITIVE_INFINITY 4.禁用默认相机控制事件 scene.screenSpaceCameraController.enableRotate = false; scene.screenSpaceCameraController.enableTranslate = false; scene.screenSpaceCameraController.enableZoom = false; scene.screenSpaceCameraController.enableTilt = false; scene.screenSpaceCameraController.enableLook = false; 5.地球移动事件 camera.moveStart.addEventListener(function() { }); camera.moveEnd.addEventListener(function() { }); 6.球缩放事件 viewer.camera.changed.addEventListener(function(percentage) { }); 7.修改鼠标操作习惯 利用Cesium.ScreenSpaceCameraController(scene)实现 例如: //设置操作习惯,更换中键和右键 viewer.scene.screenSpaceCameraController.tiltEventTypes = [ Cesium.CameraEventType.RIGHT_DRAG, Cesium.CameraEventType.PINCH, { eventType: Cesium.CameraEventType.LEFT_DRAG, modifier: Cesium.KeyboardEventModifier.CTRL }, { eventType: Cesium.CameraEventType.RIGHT_DRAG, modifier: Cesium.KeyboardEventModifier.CTRL } ]; viewer.scene.screenSpaceCameraController.zoomEventTypes = [Cesium.CameraEventType.MIDDLE_DRAG, Cesium.CameraEventType.WHEEL, Cesium.

ionic4自定义组件报错’ion-‘ is not a known element:

项目要把顶部返回按钮抽成单个组件,于是使用ionic g component xx/xx/back 生成了组件文件 back.component.html中使用了ion-buttons 然后在公共的sharedModule里引入了这个组件: @NgModule({ declarations: [BackComponent], imports: [CommonModule], exports: [BackComponent], }) export class SharedModule {} 结果一直报错: Uncaught Error: Template parse errors: 'ion-back-button' is not a known element: 1. If 'ion-back-button' is an Angular component, then verify that it is part of this module. 2. If 'ion-back-button' is a Web Component then add 'CUSTOM_ELEMENTS_SCHEMA' to the '@NgModule.schemas' of this component to suppress this message. (" [ERROR ->] .

Highcharts的一些操作

Highcharts的一些操作 去掉打印按钮 去掉右下角的网址信息 隐藏图例 导出数据设置 柱状图默认显示数字 3D饼图,显示对应的值和百分比 去掉打印按钮 Highcharts官网实例eg:https://jshare.com.cn/demos/NPVyQW exporting:{ enabled:true //用来设置是否显示‘打印’,'导出'等功能按钮,不设置时默认为显示 }, 去掉右下角的网址信息 Highcharts官网实例eg:https://jshare.com.cn/demos/NPVyQW credits: { enabled:false //去掉网址信息 }, 隐藏图例 Highcharts官网实例eg:https://jshare.com.cn/demos/NPVyQW 即:点击柱状图下边的 蓝色小圆和文字 会将数据隐藏 隐藏代码: legend: { //隐藏图例 enabled: false }, 导出数据设置 设置一个js即可 "http://cdn.hcharts.cn/libs/highcharts-export-csv/export-csv.js" //2018年版本成功 或者 http://cdn.hcharts.cn/highcharts/modules/export-data.js -- 这个在官网可以成功(2019年版本) 柱状图默认显示数字 plotOptions: { column:{ dataLabels:{ enabled:true, // dataLabels设为true style:{ color:'#000' } } } }, 3D饼图,显示对应的值和百分比 效果图: plotOptions: { pie: { allowPointSelect: true, cursor: 'pointer', depth: 35, dataLabels: { enabled: true, //format: '{point.

同一表格根据不同排序条件查询

1.template {{ scope.row.PRICE}} {{ scope.row.WEIGHT}} 2.method handleSortChange(val){ console.log(val) if(val.column==null){ this.Sort('','',this.pageNo) return } if(val.column.label=='产品价格(元/g)'&&val.order=='descending'){ this.Sort('PRICE',"desc",this.pageNo) this.productType='PRICE'; this.sortOrder="desc"; } if(val.column.label=='产品价格(元/g)'&&val.order=='ascending'){ this.Sort('PRICE',"asc",this.pageNo) this.productType='PRICE'; this.sortOrder="asc"; } if(val.column.label=='产品规格(g)'&&val.order=='descending'){ this.Sort('WEIGHT',"desc",this.pageNo) this.productType='WEIGHT'; this.sortOrder="desc"; } if(val.column.label=='产品规格(g)'&&val.order=="ascending"){ this.Sort('WEIGHT',"asc",this.pageNo) this.productType='WEIGHT'; this.sortOrder="asc"; } console.log(val,'val>>>>>>>>>>>>>>') }, Sort(x,y,pageNO,pageSize){ console.log(x,y,pageNO,pageSize) this.keepX=x this.keepY=y console.log(this.material) let parames = { "functionName": "preciousmetalbiz.service.PrdMetalService", "methodName": "selectPmList", "pageNo":pageNO, "pageSize":10, "data": { // 查询条件 prdCode: this.prdCode, // 产品代码 prdName: this.prdName, // 产品名称 weightStart: this.weightStart, // 规格(开始) weightEnd: this.weightEnd, // 规格(结束) priceStart: this.

H5+ Hbuilder 状态栏设置颜色

if (this.isJudge) {//如果是H5+ if (this.currentItem == 11) { //朋友 plus.navigator.setStatusBarStyle('dark'); } else { plus.navigator.setStatusBarStyle('light'); } } 设置了很长时间没效果 后来才知道 只支持两种颜色

浅析deep深度选择器

之前在开发中遇到一个问题,vue项目结合element ui使用。 但是element ui的样式不一定符合我们的需求,这时我们就需要改变它的样式。 比如博主使用到了element ui的表格,但是表格有默认的背景色,鼠标滑过还有默认的高亮颜色。 我想要改变这个鼠标滑过的样式,所以我需要在页面中审查元素找到对应的标签。 但是当我找到并且复制,然后试图去改变它的样式时,怎么都没办法改变。 我以为是权重的问题,所以我加 ! important,但是也毫无作用。 当我审查元素发现此样式就没有作用到,就相当于它没有找到这个元素,所以也就不存在改不改变样式的问题了。 这时我们就需要一个选择器能深度的帮助我们找到这个元素,比如 deep(划重点) 1、这是我起初试图改变的方法(亲测无效): .el-table--enable-row-hover .el-table__body tr:hover>td { background: lightblue !important; color: #000; } 2、这是使用deep后的方法(亲测有效): .el-table--enable-row-hover /deep/ .el-table__body tr:hover>td { background: lightblue ; color: #000; } 原理就是通过找到父元素深度的找到我们需要改变的子元素,然后改变它的样式即可。 感觉发现了什么不得了的东西。 是不是意味着我使用第三方ui 库,就可以随意改变它的样式了。 好了,以上就是deep的一些基本用法,如需深入了解,请参考官方介绍。 博主后期也会了解更新,尽情期待。 如有问题,请指出,接受批评。