Reputation: 153
I'm making an app that consists of two sections. One is a PageView section you can change pages with a Swipe motion. Another shows which page you are in now after you change pages. But there is time delay. When I change pages like page one to page two, the lower section's change with about 0.5-second delay.
To find any causes, I declared index as double(It's redeclared as int now). And I found when I change pages in my first section PageView, the lower section shows decimal change(i.g. not 1 -> 2, but 1.0 -> 1.xxx -> 2). I also tried the Switch-case statement. In this statement, default is returns Text('nothing'). And I found when being changed, the lower section shows nothing.
import 'package:flutter/material.dart';
class HomePage extends StatefulWidget {
@override
_HomePageState createState() => _HomePageState();
}
class _HomePageState extends State<HomePage> {
static final GlobalKey<ScaffoldState> _scaffoldKey = GlobalKey<ScaffoldState>();
final controller = PageController(initialPage: 0);
var scrollDirection = Axis.horizontal;
var actionIcon = Icons.swap_vert;
int index;
@override
void initState() {
super.initState();
index = 0;
controller.addListener(() {
setState(() {
index = controller.page.toInt();
});
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
key: _scaffoldKey,
appBar: AppBar(
centerTitle: true,
title: Text('it\'s a drill for page view'),
),
body: _buildBody(),
);
}
Widget _buildBody() {
return SafeArea(
child: Column(
children: <Widget>[
Expanded(
child: PageView.builder(
controller: controller,
itemCount: 5,
itemBuilder: (context, index) {
return Text('it is $index');
},
)
),
Expanded(
child: FittedBox(
fit: BoxFit.fitWidth,
child: Container(
color: Colors.blue,
child: _showContent()
),
),
)
],
),
);
}
Widget _showContent() {
switch (index) {
case 0: return Text('One');
break;
case 1: return Text('Two');
break;
case 2: return Text('Three');
break;
case 3: return Text('Four');
break;
case 4: return Text('Five');
break;
default: return Text('Nothing');
}
}
}
I want two-section not to have any delays. Is there any solution? Please help me. I'm a real beginner. So maybe I beg your pardon. But I never let this question left unattended. Thank you very much.
Upvotes: 3
Views: 1804
Reputation: 20118
Probably rounding the value of the current page in the PageController listener is more suitable for you.
Here is the modified listener code:
controller.addListener(() {
setState(() {
index = controller.page.round();
});
});
Upvotes: 2
Reputation: 2021
Timer(
Duration(seconds: 3),
(){ //return YOU CAN PUT YOUR STUFF HERE.});
Upvotes: 5