我是 Flutter hooks 和 riverpod 的新手
基本上我有一个提供者将书籍列表存储在书架中。
class BookList extends StateNotifier<List<BookModel>> {
BookList() : super([]);
void setBookList(List<BookModel> bookList) =>
{state = bookList};
}
final bookListProvider = StateNotifierProvider<BookList>((_) => BookList());
然后我有一个显示书籍的页面和一个显示创建新书对话框的创建按钮:
class BookShelfPage extends HookWidget {
@override
Widget build(BuildContext context) {
final bookList = useProvider(bookListProvider.state);
useEffect(() {
//API to get list of books
context.read(bookListProvider).setBookList(//data from API);
},[]);
final Function() onCreateBookButtonClicked = () {
showDialog(
context: context,
builder: (context) => ProviderScope(
child: (new BookCreateDialog())));
};
//Data is available for this
print("book list length 1: " + bookList.length.toString());
}
但是,我无法访问对话框中的提供程序值:
class BookCreateDialog extends HookWidget {
@override
Widget build(BuildContext context) {
final bookList = useProvider(bookListProvider.state);
//Data is not available for this
print("book list length 2: " + bookList.length.toString());
}
}
注意事项:
- 我有一个 ProviderScope 包装我的应用程序。
- 我没有问题持续存在或访问不同页面上的提供者或驻留在页面上的任何子小部件,但我无法从对话框中访问提供者值。
- 当然,我可以将提供者的值作为参数传递给对话框,但我想知道是否有任何方法可以避免这种情况,因为我从提供者那里获得了很多值。
我可以知道如何解决这个问题吗?非常感谢!