В настоящее время я делаю приложение календаря, которое я хотел бы провести вправо или влево, чтобы перейти к следующему или предыдущему месяцу.Я использую PageView, изначально устанавливая массив с 3 элементами в нем, и начальная страница является второй.Я хотел бы провести пальцем вправо и добавить страницу в конец.Я хотел бы провести пальцем влево и добавить страницу в начало.В настоящее время, если вы идете направо (добавляя страницы в конец), это прекрасно работает.Но если вы идете налево (добавляете страницы в начало), возникает какое-то странное поведение, и оно вообще не работает.
Я вставил простой пример ниже со счетчиками.Я не уверен, правильно ли я это делаю или у меня отключена логика.Может кто-нибудь сообщить мне правильный способ сделать это?
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,
),
),
);
}
}