Flutter 找不到提供程序-颤振
我想为我的DecksList小部件提供一个流,所以我在MyApp中初始化了一个提供者。它抛出ProviderNotFoundError。这种行为的原因是什么Flutter 找不到提供程序-颤振,flutter,stream,provider,Flutter,Stream,Provider,我想为我的DecksList小部件提供一个流,所以我在MyApp中初始化了一个提供者。它抛出ProviderNotFoundError。这种行为的原因是什么 I/flutter (27768): ══╡ EXCEPTION CAUGHT BY WIDGETS LIBRARY ╞═══════════════════════════════════════════════════════════ I/flutter (27768): The following ProviderNotFoundEr
I/flutter (27768): ══╡ EXCEPTION CAUGHT BY WIDGETS LIBRARY ╞═══════════════════════════════════════════════════════════
I/flutter (27768): The following ProviderNotFoundError was thrown building NotificationListener<KeepAliveNotification>:
I/flutter (27768): Error: Could not find the correct Provider<Stream<List<Deck>>> above this DecksList Widget
I/颤振(27768):══╡ WIDGETS库捕获到异常╞═══════════════════════════════════════════════════════════
I/flatter(27768):在构建NotificationListener时引发了以下ProviderNotFoundError:
I/Flatter(27768):错误:在此DecksList小部件上方找不到正确的提供程序
打开图像以查看MyApp小部件:
DecksList内部主页小部件:
class DecksList extends StatefulWidget {
@override
_DecksListState createState() => _DecksListState();
}
class _DecksListState extends State<DecksList> {
Stream<List<Deck>> decks;
@override
void didChangeDependencies() {
super.didChangeDependencies();
decks = Provider.of<Stream<List<Deck>>>(context);
}
@override
Widget build(BuildContext context) {
return StreamBuilder<List<Deck>>(
stream: decks,
builder: (context, snapshot) {
final decksList = snapshot.data ?? List();
return ListView.builder(
// to scroll lists together
physics: ClampingScrollPhysics(),
shrinkWrap: true,
itemCount: decksList.length,
itemBuilder: (BuildContext context, int index) {
final Deck itemDeck = decksList[index];
return DeckTile(
deckItem: itemDeck,
onPressed: () {
Navigator.push(context,
CupertinoPageRoute(builder: (BuildContext context) {
return FlashcardsDeck(
deckId: itemDeck.id,
);
}));
},
onLongPress: () {},
);
},
);
});
}
}
class DecksList扩展StatefulWidget{
@凌驾
_DecksListState createState()=>\u DecksListState();
}
类_DecksListState扩展状态{
溪流甲板;
@凌驾
void didChangeDependencies(){
super.didChangeDependencies();
decks=上下文的提供者;
}
@凌驾
小部件构建(构建上下文){
返回流生成器(
溪流:甲板,
生成器:(上下文,快照){
最终decksList=snapshot.data??List();
返回ListView.builder(
//将列表滚动到一起
物理:ClampingScrollPhysics(),
收缩膜:对,
itemCount:decksList.length,
itemBuilder:(构建上下文,int索引){
最终甲板项目甲板=甲板列表[索引];
返回地砖(
deckItem:itemDeck,
已按下:(){
Navigator.push(上下文,
CupertinoPageRoute(生成器:(BuildContext上下文){
回传抽认卡(
deckId:itemDeck.id,
);
}));
},
onLongPress:(){},
);
},
);
});
}
}
问题出在摩尔图书馆。
这里有一个问题您是否通过调用
ChangeNotifierWidget
或MultiChilChangeNotifier
初始化了此问题?通常,当您不使用子上下文时,会发生此错误。但奇怪的是,您正在从构建器内部调用Home()
(因此DecksList()
),它应该可以工作。您可以尝试将StreamBuilder
包装到消费者
中。有状态小部件缓存流值的目的是什么?@user8773560不,我没有t@frank06使有状态小部件在initState中初始化流的目的在于每次DecksList小部件重建时都会重新启动流。使用提供者提供流的目的是解决流的问题restarting@SergiyVergun您如何向提供商注册流?我写道:,也许你会在“更干净的方式”下发现一些有用的东西,而这可以从理论上回答这个问题,在这里包括答案的基本部分,并提供链接供参考。