Flutter PageView 在 null 上调用了 jumpToPage 方法

标签 flutter dart

我是 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/

相关文章:

dart - Flutter-手机屏幕关闭时如何播放音频

flutter - Firebase 的过滤器不适用于日期字段

flutter - 不支持的操作 : Infinity or NaN toInt

angular - 路由到另一页时出现Angular + Dart JS错误

python - 是否可以使用Flutter中的remove.bg API开发应用程序?

flutter - 从 ListView 到总价格的每个项目的价格运行了不止一次,这是不正确的。如何运行一次

flutter - 如何在步骤进度中添加圆形边框

firebase - 如何解决异常错误:名称为[DEFAULT]的FirebaseApp不存在?

android - Flutter从GetStorage列表中获取数据值

json - 按字母顺序对 JSON 进行排序 - Flutter