这是我的自定义可重用Widget代码。
import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
class MyFloatingActionButton extends ConsumerWidget {
final Function(ProviderRef ref) onPressed;
MyFloatingActionButton(this.onPressed);
@override
Widget build(BuildContext context, WidgetRef ref) {
return FloatingActionButton(
onPressed: () => onPressed,
tooltip: 'Increment',
child: Icon(Icons.add),
);
}
}
父控件如下:
floatingActionButton: MyFloatingActionButton((ref) => ref.read(myProvider)._increase())
这里是myProvider
class CountNotifier extends ChangeNotifier {
int num = 0;
void _increase() {
num ++;
notifyListeners();
}
}
final myProvider = ChangeNotifierProvider((ref) {
return CountNotifier();
});
在将函数传递给它的子控件后,它就不再工作了。但是在父控件中,它工作得很好。
我希望将ref.read()函数传递给任何子部件。
2条答案
按热度按时间smtd7mpg1#
回调函数不会作为代码调用:
因为
() => onPressed
表示函数总是返回一个值,这个值就是你的回调函数。你从来没有调用过你的回调函数!你应该这样称呼它:
() => onPress(ref)
。我不知道你想实现什么,但我的建议是只使用父部件中的
ref
,不要手工传递ref
。6gpjuf902#
试试这样:
孩子: