升级到最新版本的 flutter 后,我的所有列表都收到了弃用警告。
List<MyClass> _files = List<MyClass>();
=>'List' is deprecated and shouldn't be used.
Run Code Online (Sandbox Code Playgroud)
不幸的是,它没有暗示用什么来替换它。那么我们现在应该用什么来代替呢?
我最近从 Ionic 4 更新到了 Ionic 5。在 Ionic 5 中,图标也收到了更新。然而,显然加载图标的机制也发生了变化。
在 Ionic 4 中,可以添加这样的自定义图标:https : //medium.com/@JordanBenge/how-to-create-custom-ionic-4-icons-af80cc6cc148
在assets 的图标文件夹中添加例如 ios-my-custom-icon.svg和md-my-custom-icon.svg。然后有必要在angular.json 中引用它们,例如:
...
"assets": [
...
{
"glob": "**/*.svg",
"input": "src/assets/icon",
"output": "./svg"
},
...
]
...
Run Code Online (Sandbox Code Playgroud)
人们终于可以像 html 中的其他离子图标一样调用它们:
<ion-icon name="my-custom-icon"></ion-icon>
Run Code Online (Sandbox Code Playgroud)
然而,这不再适用于 ionic 5。有人知道,我们现在如何在 ionic 5 中实现自定义图标?
编辑:我意识到仍然可以通过 src 属性调用它们,例如
<ion-icon src="assets/icon/md-my-custom-icon.svg"></ion-icon>
Run Code Online (Sandbox Code Playgroud)
然而,这并不像使用 name 属性那样方便。有没有机会我们有一些与上述相同的东西?
尝试使用flutter run --release
它运行我的应用程序时会引发错误:
FAILURE: Build failed with an exception.
* Where:
Build file 'C:\Users\Chris\AppData\Local\Pub\Cache\hosted\pub.dartlang.org\device_info-0.4.2+1\android\build.gradle' line: 22
* What went wrong:
A problem occurred evaluating root project 'device_info'.
> Failed to apply plugin [id 'com.android.internal.version-check']
> Minimum supported Gradle version is 5.6.4. Current version is 5.6.2. If using the gradle wrapper, try editing the distributionUrl in C:\Users\Chris\AppData\Local\Pub\Cache\hosted\pub.dartlang.org\device_info-0.4.2+1\android\gradle\wrapper\gradle-wrapper.properties to gradle-5.6.4-all.zip
Run Code Online (Sandbox Code Playgroud)
如果我删除这个 device_info 插件,我会得到同样的错误,因为另一个插件 flutter_plugin_android_lifecycle 指向 Gradle 当前版本为 4.10.2。
我不明白。我尝试将我的 gradle-wrapper.properties 更新为
distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.4-all.zip
Run Code Online (Sandbox Code Playgroud)
以前它被设置为 5.6.2,但这没有任何改变。也尝试过 4.10.2,但它同样被忽略了。我将 build.gradle 中的 gradle 版本更新为
buildscript …
Run Code Online (Sandbox Code Playgroud) 我注意到在 Android 上接收到的低功耗蓝牙的信号强度是周期性变化的。下图表示一个 BLE 信标在两分钟内的 RSSI 值。接收 Android 和信标都是静止的,距离为 1 米。我确保有尽可能低的干扰。Android 是 Nexus 5,但我在其他 Android 设备上也有同样的现象,都在 API 21 上运行。我还无法在 iOS 上对其进行测试。
您可以看到每 15 秒重复一次的 RSSI 有 3 个主要级别,例如低 -> 中 -> 高 -> 低 -> 中 -> 高等。
我的猜测是android方面的原因,不确定是硬件原因还是软件原因。
为什么 RSSI 会随时间循环?有人可以解释一下吗?
来自基于 js/cordova 的跨平台领域,我最近正在研究 flutter。所以我想知道在 flutter 中直接使用各种 js 库的选项。更具体地说,我有兴趣使用 flutter 中的 openlayers 库来创建具有各种绘图和编辑功能的多功能地图视图。所以我想知道有哪些选项可以包含它。
到目前为止,我看到两种主要方式:
使用 webview:即使在 flutter 中还没有原生 webview 小部件,也有一个插件(https://github.com/dart-flitter/flutter_webview_plugin)。我在这里看到的主要优点是“按原样”使用 openlayers 库,但是该插件还处于早期状态,我还看不到在 webview 中建立 flutter 和 js 函数之间通信的方法。此外(这只是我的假设)使用 webview 可能比使用 dart 代码创建适当的小部件慢。
创建自定义小部件:我已经看到有一些方法可以使用包 js ( https://pub.dartlang.org/packages/js ) 和打字 js_facade_gen ( https://github.com/ dart-lang/js_facade_gen ) 就像使用 chartjs 库 ( https://github.com/google/chartjs.dart/ ) 完成的一样。与此类似,应该可以将 openlayers 库自动转换为 dart。然而,主要问题是将其集成到颤振中,因为如果我是对的,openlayers 正在使用 html5 画布。此外,chartjs.dart 包没有给出任何提示如何将其包含在 flutter 应用程序中。我还看到有一个传单插件(https://github.com/apptreesoftware/flutter_map) 正在创建自己的小部件,但是他们似乎手动重写了代码 (?),这适用于具有 20.000 行代码的 openlyers,这并不是真正的选项 atm。
我知道这不是本网站的最佳问题格式,但我希望有人对从哪里开始或如何实施这一问题提出一些建议或提示,尤其是对于第二个选项 - 第一个更直接。或者,如果您能想到第三种选择,请继续,我很感激您提供任何线索。
我目前正在开发一个用于低功耗蓝牙扫描的 Android 应用程序。在 Android 5.0 中引入了 ScanFilters 选项。它总体工作正常,但过滤器的数量似乎有限(?)
\n\n如果我使用超过 13 个不同的过滤器,我将无法再找到任何 BLE 设备,并且我会收到应用程序已停止的通知,即使它继续在后台运行而没有找到任何内容。我没有收到警告或错误消息。如果我使用的过滤器少于 13 个,一切都会正常。用于过滤的地址也不会引起问题。它似乎已降至最大数量......
\n\n代码:\n扫描在自己的线程中运行:
\n\n[...]\nBluetoothLeScanner myScanner = myBluetoothAdapter.getBluetoothLeScanner();\nScanSettings settings = new ScanSettings.Builder().setScanMode(ScanSettings.SCAN_MODE_LOW_LATENCY).build();\n\n\n//The list for the filters\nfilters = new ArrayList<>(); \n\n//mac adresses of ble devices\nString[] filterlist = {\n "D4:B4:C8:7E:D1:35",\n "C8:86:3A:91:0C:0C",\n "FD:49:FD:36:04:B4",\n "E9:91:4A:42:AC:3B",\n //... some 20 more addresses\n};\n\n//adding the mac adresses to the filters list\nfor (int i=0; i< filterlist.length ; i++) {\n ScanFilter filter = new ScanFilter.Builder().setDeviceAddress(filterlist[i]).build();\n filters.add(filter);\n Log.v("Filter: "," "+ filters.get(i).getDeviceAddress());\n}\n\n\n\n[...]\nwhile (scanning) {\n final ScanCallback callback …
Run Code Online (Sandbox Code Playgroud) 我正在使用角度7创建一个PWA,但我正在努力推送通知.
我下面的教程为这个和这个使用SWPush,索然无味密钥对.我可以订阅和退订和我的服务器部分工作为好,但不幸的是教程不包括显示应用程序的实际通知.
据我所知,通知会自动弹出而不在代码中调用它,对吧?你只需订阅,其余的就是ngsw.不幸的是,他们并没有出现在我的案例中.我只能通过在代码中手动调用它们来显示它们,如下所示:
this.swPush.messages.subscribe(
(notification: any) => {
console.log("received push message", notification);
let options = {
body: notification.body,
icon: "assets/icon/favicon.png",
actions: <any>notification.actions,
data: notification.data,
vibrate: [100, 50, 10, 20, 20]
};
this.showNotification(notification.title, options)
},
err => {
console.error(err);
}
);
[...]
showNotification(title: string, options: NotificationOptions) {
navigator.serviceWorker.getRegistration().then(reg => {
reg.showNotification(title, options).then(res => {
console.log("showed notification", res)
}, err => {
console.error(err)
});
});
}
Run Code Online (Sandbox Code Playgroud)
但这似乎仅在app/page处于前台时才有效.否则,我会收到"网站已在后台更新"的通知.显然我在这里做错了什么.但是什么?
当应用程序在后台时,我该怎么做才能显示通知?
有没有办法处理通知上的点击事件?
ng文档在这里非常稀疏.
push-notification service-worker web-push progressive-web-apps angular
我们可以将 PWA 迁移到不同的域吗?
我尝试了明智的测试,只需将 PWA 设置的域指向不同的网页即可。在浏览器上,经过一番刷新后,正在加载新页面而不是 PWA。但在我安装了 PWA 的手机上,PWA 像以前一样加载。
我们希望避免用户继续使用已安装的 PWA,因为它的来源发生了变化,因此显然不会再获得任何更新。如果无法以某种方式自动迁移 PWA,那么让他们从新源手动安装 PWA 就可以了。但即便如此,也应该让他们意识到这一点。
有什么想法从哪里开始吗?
我正在尝试在扩展 SearchDelegate 的类中加载一个 json 文件以搜索其内容。
我有一个方法来加载这个文件:
Future<void> loadCountryData() async {
try {
String data = await DefaultAssetBundle
.of(context)
.loadString("assets/data/countries.json");
_countries = json.decode(data);
} catch (e) {
print(e);
}
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,这需要一个 Buildcontext(上下文),它似乎只在 SearchDelegate 构建方法(如 buildActions、buildLeadings 等)中可用,但在构造函数中没有外部可用。
https://docs.flutter.io/flutter/material/SearchDelegate-class.html
由于 SearchDelegate 中的 @override xy 构建方法在搜索字段中的每次更改时都会被调用,因此我会一遍又一遍地加载我的文件,这当然不理想。我只想在开始时加载我的文件一次。
有没有办法获得某种我可以在 SearchDelegate 的构造函数中使用的默认上下文。就像在 android 中一样(如果我记得正确的话)?
或者我可以加载一个没有.of(context)
?
我有一个要推送到 firebase 实时数据库的对象,如下所示:
userProfile = { name: "Jon", age: 25, gender: "male", ...plenty more attributes}
Run Code Online (Sandbox Code Playgroud)
如果我想在 firebase 中使用它,我可以这样写:
return firebase.database().ref('/userProfile').push({
name: userProfile.name,
age: userProfile.age,
gender: userProfile.gender,
....
}).
Run Code Online (Sandbox Code Playgroud)
但是因为我有很多具有许多属性的对象,所以我不想手工编写它。push() 中不允许出现循环。我可以像这样推动整个对象:
return firebase.database().ref('/userProfile').push({
userProfile: userProfile
}).
Run Code Online (Sandbox Code Playgroud)
但它会创建一个额外的子节点,如
ref/userProfile/123someId/userProfile/name
Run Code Online (Sandbox Code Playgroud)
这是不好的做法,因为它不允许使用过滤器等。
有没有更有效的方法来推送整个对象的属性而不写下每个键/值对?
javascript firebase typescript firebase-realtime-database angular
flutter ×4
android ×3
angular ×2
dart ×2
javascript ×2
bluetooth ×1
filter ×1
firebase ×1
gradle ×1
ionic4 ×1
ionic5 ×1
openlayers ×1
rssi ×1
typescript ×1
web-push ×1