有没有办法可以检查运行该应用程序的设备是否需要 SafeArea。我需要根据这个 true 或 false 值运行代码。我不需要使用 SafeArea 小部件。如果设备需要填充,我只需要正确或错误的答案。
例如。像 iPhone 8 这样的设备不需要填充,即使 Widget 包裹在 SafeArea 小部件中也不会有填充。
例如。像 iPhone X 这样的设备确实需要填充,如果 Widget 被包裹在 SafeArea 中就会有填充。
SafeArea 小部件如何判断设备是否需要填充?我查看了 SafeArea 小部件代码,但无法理解会发生什么来告诉它设备是否需要填充。
我正在使用 Flutter 构建一个音乐播放应用程序。它可以帮助我作为一个开发人员为两个平台构建一次应用程序。但是,我在两个平台上都遇到了一些小问题。虽然我已经克服了其中的一些障碍,但我还是无法找出一个主要的错误/问题,这只是为了制作音乐应用程序的目的。如果应用程序不在前台,音乐不会改变。
我正在使用包:audioplayers(https://pub.dartlang.org/packages/audioplayers)。我的应用程序正在播放歌曲,mp3 文件在线托管并具有单独的链接。
当第一首歌曲完成播放时,AudioPlayerState.COMPLETED。我打电话玩,新的歌曲网址。如果应用程序在前台,这可以正常工作,但如果应用程序在后台,则它不起作用。这种情况发生在最新版本的 iOS 上,我在 Android 5.0(而不是 Android 8.0+)上发现了这一点。在 Android Studio 的 RUN 选项卡中,当我对此进行测试时,它确实向我显示已拨打电话,但歌曲没有播放,但是当我打开应用程序时,它确实显示了更新的专辑封面,该专辑封面也位于 url 上(不在歌曲元数据)。如果我调用简历,从后台打开应用程序备份后,歌曲开始播放。
我不知道这是包的问题还是 iOS 的问题,我在包 Github 上打开了一个问题。但是,我相信 iOS 和以前一样,如果在我检查 Xcode 中的背景音频之前将应用程序最小化,它就不会播放歌曲。
import 'package:flutter/material.dart';
import 'package:audioplayers/audioplayers.dart';
import 'dart:math';
AudioPlayer audioPlayer = new AudioPlayer();
class MusicPlay {
MusicPlay() {
_initAudioPlayer();
}
play(String audioURL) async {
int result = await audioPlayer.play(audioURL);
if (result == 1) {
// success
}
}
nextSong() async {
play(String nextAudioURL)
}
void _initAudioPlayer() {
audioPlayer.audioPlayerStateChangeHandler = (AudioPlayerState state) { …Run Code Online (Sandbox Code Playgroud) 我想问一下我应该如何处理 Flutter 中的大列表。当我位于我正在搜索的列表中非常深的数据项时,我的应用程序变得非常慢。我的清单是一个大数据结构的 70,000 多个对象。
以下是我“搜索”列表的方式。
Future<Iterable<SomeDataStruct>> _getAllData() async {
return allData.where((a) => (a.dataTitle.toLowerCase().contains(querySearch.toLowerCase().trim())));
}
Run Code Online (Sandbox Code Playgroud)
使用 FutureBuilder 中的 ListView.builder 构建列表。
当我搜索并填充列表深处的一个或多个结果时,应用程序非常慢,以至于我单击列表项时,它需要几秒钟才能执行 onTap。如果我需要更改搜索查询,则在单击 TextField 后软键盘需要时间才能恢复。
我在哪里犯了错误或处理这个错误,我应该怎么做才能让我的庞大列表可搜索而不使应用程序无法忍受。
编辑: 更改代码后,我如何使它不减慢应用程序的速度。这样对吗?
String tempQuery;
List<SomeDataStruct> searchResults = [];
Future<List<SomeDataStruct>> _getAllData() async {
if(querySearch!=tempQuery) {
tempQuery = querySearch;
searchResults = allData.where((a) => (a.dataTitle.toLowerCase().contains(querySearch.toLowerCase().trim()))).toList();
}
return searchResults;
}
Run Code Online (Sandbox Code Playgroud) Android 10 中引入的 MediaStyle 通知可以工作,但呈黑色且不显示持续时间。
参考另一个问题:android 10 see bar on notification
这种情况似乎只发生在某些设备上,而在其他设备上,搜索栏将显示得非常好。
此外,在同一设备上,其他媒体播放器也具有完美的显示搜索栏,例如 Youtube、Youtube Red、Google Play Music 等。