我在 SliverList 中有一些小部件,我不想在滚动屏幕外时丢失状态。根据文档,“...懒惰列表中的孩子被包裹在 AutomaticKeepAlive 小部件中,以便孩子们可以使用 KeepAliveNotifications 来保存他们的状态,否则他们会在屏幕外被垃圾收集。”,我的问题是,我如何发送保持活动通知?我未能理解文档,也无法找到任何使用示例。
我从哪里获取或创建 Listenable?在我的应用程序中,当用户点击部分标题时,它会展开并将对齐方式从水平更改为垂直。当用户向下滚动页面时,状态将丢失。下面的代码示例(删除了一些与问题无关的代码以减少混乱)。
class Page extends StatelessWidget {
@override
Widget build(BuildContext context) {
return new MaterialApp(
home: new DefaultTabController(
length: choices.length,
child: new Scaffold(
body: new CustomScrollView(slivers: <Widget>[
new SliverAppBar(
title: new Container(
child: new TabBar(
tabs: choices.map((Choice choice) {
return new Tab(
text: choice.title,
icon: new Image.asset(choice.icon, height:22.0),
);
}).toList(),
)),
),
new SliverList(delegate:new SliverChildListDelegate([
// Widget that I want to KeepAlive
new TrendingArticles(),
//Other widgets
])),
]),
),
),
);
}
} …Run Code Online (Sandbox Code Playgroud) 我正在尝试捕获相机输入并在视频元素中播放它。此代码始终适用于桌面 Chrome 和 Safari。在 iOS 上,它始终在使用 Safari 的浏览器模式下工作。
我面临的问题是,它仅有时无法在 iOS 的独立 PWA 模式(保存到主屏幕)下工作。我没有收到任何错误,而且它似乎是随机发生的。我想我修好了它只是为了几个小时后它再次发生。有时关闭应用程序并重新打开可以正常工作,有时需要尝试 10 次以上。我尝试过很多不同版本的代码,异步的、基于承诺的、等待加载的、可以播放的等等。
流加载并处于活动状态(授予权限时),srcObject 显示为正确设置,但 video.play() 不起作用。我尝试等待戏剧承诺,但有时它永远不会解决。视频 ReadyState 保持在 0。有时代码会正常工作,视频会像平常一样播放相机流。
任何帮助将不胜感激。
navigator.mediaDevices
.getUserMedia({
video: {
width: { min: 640, ideal: 1280, max: 1920 },
height: { min: 480, ideal: 720, max: 1080 },
facingMode: 'environment'
},
audio: true
})
.then((stream) => {
let video = document.createElement('video');
video.controls = true;
video.muted = true;
video.playsInline = true;
video.onerror = function (e) {
console.log(e);
};
video.onabort = function (e) {
console.log(e); …Run Code Online (Sandbox Code Playgroud)