在Scaffold页面中,其结构如下所示
@override
Widget build(BuildContext context){
body: PageView(
controller: _controller;
children: <Widget>[Page1(), Page2(), Page3()];
);
bottomNavigationBar: BottomNavBar(
onItemSelected: (index) => _controller.animateToPage()
)
}从Page2()到Page1()有两种方法
_controller.animateToPage(0)
bottomNavigationBar上的Page1()图标,从而调用Page1()问题是,如何通过滑动手势或animateToPage()函数来判断页面是否被更改?
谢谢。
发布于 2021-01-13 03:27:38
如果animateToPage是否正在进行,也许您可以添加一个设置标志。
示例:
import 'package:flutter/material.dart';
void main() => runApp(Root());
class Root extends StatelessWidget {
@override
Widget build(BuildContext context) {
final PageController controller = PageController();
bool isAnimateToPage = false;
controller.addListener(() {
print('LISTENER isAnimateToPage = $isAnimateToPage');
});
return MaterialApp(
home: Scaffold(
body: Column(
children: <Widget>[
Expanded(
child: PageView(
controller: controller,
onPageChanged: (int page) {
print(
'ONPAGECHANGED isAnimateToPage = $isAnimateToPage ; page = $page');
},
children: <Widget>[
const Center(child: Text('page 1')),
const Center(child: Text('page 2')),
const Center(child: Text('page 3')),
],
),
),
FlatButton(
onPressed: () async {
isAnimateToPage = true;
await controller.animateToPage(
controller.page.toInt() + 1,
duration: const Duration(seconds: 1),
curve: Curves.easeIn,
);
isAnimateToPage = false;
},
child: const Text('Next'),
),
],
),
),
);
}
}https://stackoverflow.com/questions/65694963
复制相似问题