【问题标题】:Getting NoSuchmethodError: Closure call with mismatched arguments: function '_HomeViewState.onTap'获取 NoSuchmethodError:参数不匹配的闭包调用:函数“_HomeViewState.onTap”
【发布时间】:2021-07-02 13:04:56
【问题描述】:

我在运行我的 Flutter 应用(在设备上)时遇到此错误

NoSuchmethodError:参数不匹配的闭包调用:函数 '_HomeViewState.onTap' 接收者:关闭:(int)=> 动态来自 功能'onTap':。尝试调用:_HomeViewState.onTap() 发现: _HomeViewState.onTap(int) => 动态

这里是 login_view_model.dart 文件,我认为我遇到了错误:

import 'package:flutter/material.dart';
import 'package:flutter/widgets.dart';
import 'package:page_transition/page_transition.dart';
import 'package:student_community/core/services/authentication.dart';
import 'package:student_community/meta/views/home_view/home_view.dart';
import 'package:student_community/meta/views/login_view/login_view.dart';

class LoginViewModel extends ChangeNotifier {
  int noOfUsers = 0;
  String userName, userImage;
  String get getUserName => userName;
  String get getUserImage => userImage;
  final AuthenticationService authenticationService = AuthenticationService();

  navigateToHomeView(BuildContext context) {
    logIn().whenComplete(() {
      Navigator.pushReplacement(
          context,
          PageTransition(
              child: HomeView(), type: PageTransitionType.bottomToTop));
    });
  }

  Future logIn() async {
    try {
      await authenticationService.signInWithGoogle().then((user) {
        if (user.uid != null) {
          userName = user.displayName;
          userImage = user.photoURL;
          print(userName);
        }
      });
    } catch (e) {
      if (e is FirebaseAuthException) {
        // Show Error Widget
        print(e.message);
      }
    }
  }

  Future logOut(BuildContext context) async {
    try {
      await authenticationService.signInWithGoogle().whenComplete(() {
        Navigator.pushReplacement(
            context,
            PageTransition(
                child: LoginView(), type: PageTransitionType.bottomToTop));
      });
    } catch (e) {
      if (e is FirebaseAuthException) {
        // Show Error Widget
        print(e.message);
      }
    }
  }
}

我认为上面的代码格式不正确。 请原谅我,因为我是 Stackoverflow 的新手。

这是我的“home_view.dart”文件:

import 'package:provider/provider.dart';
import 'package:student_community/app/constants/colors.dart';
import 'package:student_community/app/constants/dimensions.dart';
import 'package:student_community/core/viewmodels/login_view_model.dart';
import 'package:student_community/meta/views/blogs_view/blogs_view.dart';
import 'package:student_community/meta/views/home_view/home_view_widgets.dart';
import 'package:student_community/meta/views/podcasts_view/podcasts_view.dart';
import 'package:student_community/meta/views/video_view/video_view.dart';
import 'package:student_community/meta/widgets/app_bar.dart';

class HomeView extends StatefulWidget {
  @override
  _HomeViewState createState() => _HomeViewState();
}

class _HomeViewState extends State<HomeView> {
  int index = 0;
  PageController pageController = PageController();
  onTap(int i) {
    setState(() {
      index = i;
    });
    pageController.jumpToPage(index);
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      backgroundColor: bgColorFaint,
      drawer: Drawer(),
      resizeToAvoidBottomInset: false,
      appBar: appbar(titleText: 'Student Community', leadingWidget: null, actions: [
        IconButton(onPressed: () {}, icon: Icon(Icons.message)),
        IconButton(onPressed: () {}, icon: Icon(Icons.notifications)),
        hSizedBox1,
        GestureDetector(
          onTap: () {
            Provider.of<LoginViewModel>(context, listen: false).logOut(context);
          },
          child: CircleAvatar(
            backgroundImage: NetworkImage(
                Provider.of<LoginViewModel>(context, listen: false)
                    .getUserImage),
          ),
        )
      ]),
      body: PageView(
        controller: pageController,
        onPageChanged: (int pageIndex) {
          setState(() {
            index = pageIndex;
          });
        },
        children: [
          BlogsView(),
          VideoView(),
          PodcastsView(),
        ],
      ),
      bottomNavigationBar: bottomAppBar(index, onTap),
    );
  }
}

这是我的“home_view_widgets”,其中有我的“bottomAppBar”小部件:

import 'package:custom_navigation_bar/custom_navigation_bar.dart';
import 'package:eva_icons_flutter/eva_icons_flutter.dart';
import 'package:flutter/material.dart';
import 'package:flutter/cupertino.dart';
import 'package:student_community/app/constants/colors.dart';

Widget bottomAppBar(int index, Function onTap) {
  return CustomNavigationBar(
    
    strokeColor: yellowColor,
    scaleFactor: 0.2,
    scaleCurve: Curves.bounceIn,
    bubbleCurve: Curves.ease,
    currentIndex: index,
    onTap: onTap(),
    selectedColor: yellowColor,
    backgroundColor: darkColor,

    items: [

      CustomNavigationBarItem(icon: Icon(EvaIcons.menuOutline)),
      CustomNavigationBarItem(icon: Icon(EvaIcons.video)),
      CustomNavigationBarItem(icon: Icon(EvaIcons.speaker)),

    ]);
}

【问题讨论】:

  • 请在此处添加您的 UI。认为您在 UI 的 onTap() 方法中调用了 Issue
  • 请帮帮我。
  • 添加您的 bottomAppBar 小部件代码
  • 我已经添加了我的bottomAppBar 小部件代码。

标签: flutter


【解决方案1】:

bottomAppBar 函数的签名更改为

Widget bottomAppBar(int index, dynamic Function(int) onTap) {

并删除对CustomNavigationBar 参数的onTap 调用:

return CustomNavigationBar(
  // ...
  onTap: onTap(),
  // ...
);

【讨论】:

  • 我收到此错误1 positional argument(s) expected, but 0 found. Try adding the missing arguments. onTap 方法出现错误
  • 请帮帮我!
  • @AnoopMasterCoder 我已经更新了我的代码,看看现在有没有错误。如果还有,请发布完整的回溯。
  • 如何获取堆栈跟踪。我是一个完整的初学者。我知道这很愚蠢。请帮帮我。
  • @AnoopMasterCoder 看看this questionThe Error部分,看起来是这样的。
猜你喜欢
  • 2022-12-21
  • 2013-12-01
  • 1970-01-01
  • 2022-08-13
  • 2021-12-09
  • 2021-12-10
  • 2021-09-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多