ChildPageLifecycleWrapper
viewpager 中第一个page嵌套了viewpager,如果在第一个viewpager未加载完切换到第二个page时,在切换到第一个page会导致子viewpager的生命周期active和visable不执行,辛苦看下,如有需要我后续补充一个简单的demo(。・_・。)ノI’m sorry~
尝试了最新的 0.10.0 还有这样的问题
可以给个简单的demo,单文件最好,我本地复现看看是什么情况
可以给个简单的demo,单文件最好,我本地复现看看是什么情况
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(
title: 'Flutter Demo',
navigatorObservers: [defaultLifecycleObserver],
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> {
PageController pageController = PageController();
PageController pageController1 = PageController();
bool isShow = false;
int index = 0;
@override
void initState() {
super.initState();
Future.delayed(const Duration(seconds: 3), () {
setState(() {
isShow = true;
});
});
}
@override
void dispose() {
pageController.dispose();
pageController1.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
backgroundColor: Theme.of(context).colorScheme.inversePrimary,
title: Text(widget.title),
),
body: PageViewLifecycleWrapper(
child: PageView(
physics: const NeverScrollableScrollPhysics(),
controller: pageController,
children: [
ChildPageLifecycleWrapper(
index: 0,
wantKeepAlive: true,
onLifecycleEvent: (event) {
debugPrint("======event parent=======:$event");
},
child: isShow
? PageViewLifecycleWrapper(
child: PageView.builder(
controller: pageController1,
itemCount: 3,
itemBuilder: (BuildContext context, int index) {
return ChildPageLifecycleWrapper(
index: index,
onLifecycleEvent: (event) {
debugPrint("======event child $index=======:$event");
},
child: Container(
color: [Colors.grey, Colors.yellow, Colors.green][index],
),
);
},
),
)
: const CircularProgressIndicator(),
),
ChildPageLifecycleWrapper(
index: 1,
wantKeepAlive: true,
child: Container(color: Colors.black),
),
],
),
),
bottomNavigationBar: BottomNavigationBar(
currentIndex: index,
onTap: (value) {
pageController.jumpToPage(value);
setState(() => index = value);
},
items: const <BottomNavigationBarItem>[
BottomNavigationBarItem(icon: Icon(Icons.home),label: "home"),
BottomNavigationBarItem(icon: Icon(Icons.refresh),label: "refresh"),
],
),
);
}
}
I/flutter (19157): ======event parent=======:LifecycleEvent.inactive I/flutter (19157): ======event parent=======:LifecycleEvent.invisible I/flutter (19157): ======event child 0=======:LifecycleEvent.push I/flutter (19157): ======event child 0=======:LifecycleEvent.visible I/flutter (19157): ======event child 0=======:LifecycleEvent.active I/flutter (19157): ======event parent=======:LifecycleEvent.visible I/flutter (19157): ======event parent=======:LifecycleEvent.active
可以给个简单的demo,单文件最好,我本地复现看看是什么情况
demo已提供,问题可能主要出现在延迟加载第一个页面的pageview这里,主要日志已打印
具体操作时在第一个界面未加载完成时切换到第二个界面,再切换会第一个页面会出现这个情况