未使用SearchController时flutter_hooks为何抛出方法未找到错误?
问题解决指南
问题1:hooks_riverpod无法识别useEffect
useEffect 是 flutter_hooks 库专属API,并非hooks_riverpod内置方法,单独使用hooks_riverpod自然找不到该函数,需配合flutter_hooks一起引入。
问题2:flutter_hooks抛出"Method not found: 'SearchController'"
该错误源于版本不兼容:
- flutter_hooks 0.20.0版本新增了
SearchController相关hook,但SearchController是Flutter 3.10.0及以上版本才加入的Material组件类。 - 若你的Flutter SDK版本低于3.10.0,就会触发此方法找不到的错误。
解决方案二选一:
- 升级Flutter版本:
执行命令升级至最新稳定版:flutter upgrade - 降级flutter_hooks版本:
修改pubspec.yaml中的flutter_hooks依赖为0.19.4(该版本未引入SearchController相关代码):
然后执行:dependencies: flutter_hooks: ^0.19.4flutter pub get
代码逻辑修正
你的SplashPage代码中,startController的异步延迟逻辑未生效——当前代码会立刻执行页面跳转,而非等待1秒后操作。修正后的代码如下:
import 'package:flutter/material.dart'; import 'package:flutter_hooks/flutter_hooks.dart'; import 'package:riverpod_firebase_register_crud_app/ui/utils/lables.dart'; import '../root.dart'; class SplashPage extends HookWidget { const SplashPage({super.key}); static const String route = '/splash'; @override Widget build(BuildContext context) { useEffect(() { // 将异步逻辑包裹在立即执行的async函数中 Future<void> initSplash() async { await Future.delayed(const Duration(seconds: 1)); // pushNamedAndRemoveUntil会清空路由栈,无需判断canPop Navigator.pushNamedAndRemoveUntil( context, Root.route, (route) => false, ); } initSplash(); return null; }, const []); return Scaffold( backgroundColor: Theme.of(context).colorScheme.primaryContainer, body: Center( child: Column( mainAxisAlignment: MainAxisAlignment.center, children: [ const Icon( Icons.favorite, size: 80, ), const SizedBox(height: 24), Text( Labels.appName, style: Theme.of(context).textTheme.headlineLarge!.copyWith( color: Theme.of(context).colorScheme.onPrimaryContainer, ), ), ], ), ), ); } }
内容的提问来源于stack exchange,提问作者Nasimi Gun
相关产品推荐
相关产品推荐

