onVisible和onInvisible没有被调用
当网页随着浏览器退到后台时,插件的生命周期失效了
方便提供一下简化的widget测试代码吗?
import 'package:flutter/material.dart';
import 'package:lifecycle/lifecycle.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
@override
Widget build(BuildContext context) {
return MaterialApp(
navigatorObservers: [defaultLifecycleObserver],
title: 'Flutter Demo',
theme: ThemeData(
colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
useMaterial3: true,
),
home: const MyHomePage(title: 'Flutter Demo Home Page'),
);
}
}
class MyHomePage extends StatefulWidget {
const MyHomePage({super.key, required this.title});
final String title;
@override
State<MyHomePage> createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
backgroundColor: Theme.of(context).colorScheme.inversePrimary,
title: Text('生命周期测试(Web)'),
),
body: LifecycleWrapper(
onLifecycleEvent: (LifecycleEvent event) {
switch(event) {
case LifecycleEvent.visible:
debugPrint('页面可见');
break;
case LifecycleEvent.invisible:
debugPrint('页面不可见');
break;
default:
break;
}
},
child: Center(
child: Text('生命周期测试'),
),
),
);
}
}
运行时添加的参数: -d chrome --web-browser-flag "--disable-web-security" --web-renderer canvaskit --web-hostname=xyz.com
模拟器或真机上访问对应网址,当浏览器退到后台,相应的日志并没有被打印
好的,我看下,之前没怎么在web平台测试过。
Try 0.9.0
尝试
0.9.0
并没有得到解决,我这边是依靠如下方案获得切到后台和切到前台的事件
@override
void initState() {
super.initState();
listen = document.onVisibilityChange.listen((event) {
if (document.visibilityState == 'hidden') {
debugPrint('页面变为不可见');
} else if (document.visibilityState == 'visible') {
debugPrint('页面变为可见');
}
});
// 初始状态检查
if (document.visibilityState == 'hidden') {
debugPrint('页面初始状态为不可见');
} else if (document.visibilityState == 'visible') {
debugPrint('页面初始状态为可见');
}
}
@override
void dispose() {
listen?.cancel();
listen = null;
super.dispose();
}
import 'package:flutter/material.dart'; import 'package:lifecycle/lifecycle.dart'; void main() { runApp(const MyApp()); } class MyApp extends StatelessWidget { const MyApp({super.key}); @override Widget build(BuildContext context) { return MaterialApp( navigatorObservers: [defaultLifecycleObserver], title: 'Flutter Demo', theme: ThemeData( colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple), useMaterial3: true, ), home: const MyHomePage(title: 'Flutter Demo Home Page'), ); } }class MyHomePage extends StatefulWidget { const MyHomePage({super.key, required this.title}); final String title; @override State<MyHomePage> createState() => _MyHomePageState(); } class _MyHomePageState extends State<MyHomePage> { @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( backgroundColor: Theme.of(context).colorScheme.inversePrimary, title: Text('生命周期测试(Web)'), ), body: LifecycleWrapper( onLifecycleEvent: (LifecycleEvent event) { switch(event) { case LifecycleEvent.visible: debugPrint('页面可见'); break; case LifecycleEvent.invisible: debugPrint('页面不可见'); break; default: break; } }, child: Center( child: Text('生命周期测试'), ), ), ); } }运行时添加的参数: -d chrome --web-browser-flag "--disable-web-security" --web-renderer canvaskit --web-hostname=xyz.com
模拟器或真机上访问对应网址,当浏览器退到后台,相应的日志并没有被打印
我用你的demo测试是可以的,回调正常。
我用你的demo测试是可以的回调,正常
你那边的测试case也是将浏览器置于后台?
我这边就第一次加载页面打印了可见,后面网页随浏览器退到后台和切回前台就没有其他打印了
可以把所有Event的回调都打印看看