我是 dart 的新手,我尝试实现一个 BottomNaviagtor
。我想在点击 BottomNavigatorItem
时跳转到特定页面。
下面是我得到的错误:
I/flutter(2447):══╡手势异常╞═══════════════════════════════ ═══════════════════════════════════
I/flutter ( 2447): 处理手势时抛出以下 NoSuchMethodError :
I/flutter ( 2447): 方法 'jumpToPage' 被调用为 null。
I/flutter ( 2447): 接收器:null
I/flutter ( 2447): 尝试调用:jumpToPage(2)
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:skypeclone/utils/universal_variables.dart';
class HomeScreen extends StatefulWidget {
@override
_HomeScreenState createState() => _HomeScreenState();
}
class _HomeScreenState extends State<HomeScreen> {
PageController pageController;
int _page = 0;
@override
void initState() {
super.initState();
pageController = PageController();
}
void onPageChanged(int page) {
setState(() {
_page = page;
});
}
void navigationTapped(int page) {
pageController.jumpToPage(page);
}
@override
Widget build(BuildContext context) {
double _labelFontSize = 10;
return Scaffold(
backgroundColor: UniversalVariables.blackColor,
body: PageView(
children: <Widget>[
Center(
child: Text(
"Chat List Screen",
style: TextStyle(color: Colors.white),
)),
Center(
child: Text(
"Call Logs",
style: TextStyle(color: Colors.white),
)),
Center(
child: Text(
"Contact Screen",
style: TextStyle(color: Colors.white),
)),
],
controller: pageController,
onPageChanged: onPageChanged,
),
bottomNavigationBar: Container(
child: Padding(
padding: EdgeInsets.symmetric(vertical: 10),
child: CupertinoTabBar(
backgroundColor: UniversalVariables.blackColor,
items: <BottomNavigationBarItem>[
BottomNavigationBarItem(
icon: Icon(Icons.chat,
color: (_page == 0)
? UniversalVariables.lightBlueColor
: UniversalVariables.greyColor),
title: Text(
"Chats",
style: TextStyle(
fontSize: _labelFontSize,
color: (_page == 0)
? UniversalVariables.lightBlueColor
: Colors.grey),
),
),
BottomNavigationBarItem(
icon: Icon(Icons.call,
color: (_page == 1)
? UniversalVariables.lightBlueColor
: UniversalVariables.greyColor),
title: Text(
"Calls",
style: TextStyle(
fontSize: _labelFontSize,
color: (_page == 1)
? UniversalVariables.lightBlueColor
: Colors.grey),
),
),
BottomNavigationBarItem(
icon: Icon(Icons.contact_phone,
color: (_page == 2)
? UniversalVariables.lightBlueColor
: UniversalVariables.greyColor),
title: Text(
"Contacts",
style: TextStyle(
fontSize: _labelFontSize,
color: (_page == 2)
? UniversalVariables.lightBlueColor
: Colors.grey),
),
),
],
onTap: navigationTapped,
currentIndex: _page,
),
),
),
);
}
}
最佳答案
PageController _controller = PageController(
initialPage: 0,
);
不应该在 Controller 中声明 initialPage 吗? 而且你还需要处理 Controller ,比如
@override
void dispose() {
_controller.dispose();
super.dispose();
}
关于Flutter PageView 在 null 上调用了 jumpToPage 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61223181/