Flutter Hooks不工作时导航到屏幕



使用HookConsumerWidget或HookWidget从按键导航到屏幕会出现错误:"钩子只能从混合在钩子中的小部件的构建方法中调用;。

但我认为导航到屏幕的按钮已经在调用屏幕的构建方法中了。我将调用屏幕转换为HookWidget,以防出现问题,但由于出现了相同的错误,因此没有lukc。我不理解这个错误。

包含导航按钮的无状态小部件中的片段:

_BackLayerButton(
icon: Icons.upload,
title: 'Upload Product',
onPressed: () {
Navigator.of(context)
.pushNamed(UploadProductScreen.routeName);
},
),

上传最终目的地的ProducScreen:

class UploadProductScreen extends HookConsumerWidget {
static const routeName = 'uploadProductScreen';
UploadProductScreen({Key? key}) : super(key: key);
final GlobalKey<FormState> _formKey = GlobalKey();
final _file = useState<File?>(null);
final _imageFile = useState<XFile?>(null);
final _imagePicker = ImagePicker();

@override
Widget build(BuildContext context, WidgetRef ref) {
final category = ref.watch(categoryControllerProvider).productCategory;
String _productTitle = '';

当我用一个简单的无状态小部件替换上面的代码时,一切都正常了。如何通过从另一个屏幕按下按钮导航到Hooks的屏幕?请帮忙,因为我已经尝试了我所知道的一切。同样的代码适用于无状态和有状态的导航小部件,但不适用于HookWidget。我需要为应用程序的其他功能使用钩子,所以放弃钩子不是我的选择。非常感谢。

逐行梳理代码并通过消除过程确定并解决的问题。该错误特别涉及被调用的HookWidget类(屏幕(,而不是与调用屏幕有关。我发现定义为使用useTextEditingController((的最后几个变量(例如emailTextEditingController(是在小部件的构建方法之外定义的。一旦我将这些变量适当地重新定位到小部件的构建方法中,错误就消失了,导航也按需进行。哇!!!这花了我3天的时间,但感谢上帝的洞察力。我仍然有其他悬而未决的问题需要帮助;例如,动画不使用HookWidget工作,但在Stateful类中工作。

最新更新