我目前正在制作一个日历应用程序,我想向右或向左滑动以转到下个月或上个月。我通过最初设置一个包含 3 个项目的数组来使用 PageView,并且初始页面是第二个页面。我想向右滑动并在最后添加一个页面。我想向左滑动并在开头添加一个页面。目前,如果你向右走(在最后添加页面),效果很好。但是,如果您向左移动(在开头添加页面),则会出现一些奇怪的行为,并且根本不起作用。
我在下面粘贴了一个带有计数器的简单示例。我不确定我是否做得对,或者我的逻辑是否成立。任何人都可以让我知道这样做的正确方法吗?
import 'package:flutter/material.dart';
void main() => runApp(LimeApp());
class LimeApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Pageview Test',
home: MainPage(),
);
}
}
int _lowerCount = -1;
int _upperCount = 1;
class MainPage extends StatelessWidget {
final List<Widget> _pages = <Widget>[
new Center(child: new Text("-1", style: new TextStyle(fontSize: 60.0))),
new Center(child: new Text("0", style: new TextStyle(fontSize: 60.0))),
new Center(child: new Text("1", style: new TextStyle(fontSize: 60.0)))
];
@override
Widget build(BuildContext context) {
return Scaffold(
body: Container(
margin: EdgeInsets.symmetric(
vertical: 50.0,
),
child: PageView(
onPageChanged: (pageId){
if(pageId == _pages.length - 1){
print("Last page, add page to end");
_upperCount = _upperCount + 1;
_pages.add(new Center(child: new Text(_upperCount.toString(), style: new TextStyle(fontSize: 60.0))));
}
if(pageId == 0){
print("First page, add page to start");
_lowerCount = _lowerCount - 1;
_pages.insert(0, new Center(child: new Text(_lowerCount.toString(), style: new TextStyle(fontSize: 60.0))));
}
},
controller: PageController(
initialPage: 1,
),
children: _pages,
),
),
);
}
}
Run Code Online (Sandbox Code Playgroud)
我已经到了这一点,我已经接近了,但还不够接近......
import 'package:flutter/material.dart';
void main() => runApp(LimeApp());
class LimeApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Pageview Test',
home: MainPage(),
);
}
}
int _lowerCount = -1;
int _upperCount = 1;
class MainPage extends StatefulWidget {
MainPage({
Key key,
}) : super(key: key);
@override
_MainPageState createState() => _MainPageState();
}
class _MainPageState extends State<MainPage> {
final List<int> _pages = <int>[-1, 0, 1];
final PageController pageController = PageController(initialPage: 1);
Widget _buildPages(page) {
return Center(
child: Text(page.toString(), style: new TextStyle(fontSize: 60.0)),
);
}
@override
void initState() {
// TODO: implement initState
super.initState();
pageController.addListener(() {
print("inside listener");
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: Container(
margin: EdgeInsets.symmetric(
vertical: 50.0,
),
child: PageView(
onPageChanged: (pageId) {
if (pageId == _pages.length - 1) {
print("Last page, add page to end");
_upperCount = _upperCount + 1;
setState(() {
_pages.add(_upperCount);
});
}
if (pageId == 0) {
print("First page, add page to start");
_lowerCount = _lowerCount - 1;
setState(() {
_pages.insert(0, _lowerCount);
});
pageController.jumpToPage(1);
}
print(_pages);
},
controller: pageController,
children: List<Widget>.generate(_pages.length, (index) {
return _buildPages(_pages[index]);
}),
),
),
);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4935 次 |
| 最近记录: |