我正在Flutter中实现一个基于聊天的应用程序。我当时正在考虑使用提供程序包创建两个主要的通知程序:UserService和ChatService。第一个处理签到(以及所有其他与用户相关的功能),而第二个处理聊天特定功能。但是,chatService 需要访问UserService的某些功能。我尝试使用ProxyProvider,这是代码:
class _MyAppState extends State<MyApp> {
@override
Widget build(BuildContext context) {
return MultiProvider(
providers: [
ChangeNotifierProvider<UserService>(builder: (_) => UserService.instance()),
ChangeNotifierProxyProvider<UserService, ChatService>(builder: (_, user, chatService) => ChatService.init(user))
],
child: MaterialApp(
...
),
);
}
}
但是,当我运行应用程序时,Flutter会抛出此错误:
试图将Provider与可监听/流(ChatService)的子类型一起使用。
这可能是一个错误,因为提供程序不会自动更新依赖项 当ChatService更新时。相反,请考虑更改提供者以获取更具体的信息 处理更新机制的实现,例如:
- ListenableProvider
- ChangeNotifierProvider
- ValueListenableProvider
谢谢!
答案 0 :(得分:1)
不清楚要使用哪种“体系结构”,提供程序只是一种以安全方式在小部件树中检索对象的机制。
假设您的意思是UserService
和ChatService
,而它们是ChangeNotifiers
(可以是BLoC或其他任何东西)-以下是您如何与Provider挂钩的示例:< / p>
main() {
runApp(MultiProvider(
providers: [
ChangeNotifierProvider<UserService>(create: (_) => UserService()),
ChangeNotifierProxyProvider<UserService, ChatService>(
create: (_) => ChatService(),
update: (_, userService, chatService) => chatService..userService= userService
),
],
child: MyApp(),
));
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Consumer<ChatService>(
builder: (context, chatService, _) => Text(chatService.currentUser.lastMessage) // or whatever you need to do
);
}
}