如何构建 Flutter 应用程序的架构
How to build the architecture of a flutter app
我正在 Flutter 中实现一个基于聊天的应用程序。我正在考虑使用 Provider 包来创建两个主要通知程序: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 会抛出此错误:
Tried to use Provider with a subtype of Listenable/Stream (ChatService).
This is likely a mistake, as Provider will not automatically update dependents
when ChatService is updated. Instead, consider changing Provider for more specific
implementation that handles the update mechanism, such as:
- ListenableProvider
- ChangeNotifierProvider
- ValueListenableProvider
谢谢!
不清楚您要使用哪个 "architecture",Provider 只是一种以安全方式检索小部件树中对象的机制。
假设你的意思是 UserService
和 ChatService
,它们是 ChangeNotifiers
(可以是 BLoC 或其他任何东西)——这是一个如何将它们与 Provider 联系起来的例子:
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
);
}
}
我正在 Flutter 中实现一个基于聊天的应用程序。我正在考虑使用 Provider 包来创建两个主要通知程序: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 会抛出此错误:
Tried to use Provider with a subtype of Listenable/Stream (ChatService).
This is likely a mistake, as Provider will not automatically update dependents when ChatService is updated. Instead, consider changing Provider for more specific implementation that handles the update mechanism, such as:
- ListenableProvider
- ChangeNotifierProvider
- ValueListenableProvider
谢谢!
不清楚您要使用哪个 "architecture",Provider 只是一种以安全方式检索小部件树中对象的机制。
假设你的意思是 UserService
和 ChatService
,它们是 ChangeNotifiers
(可以是 BLoC 或其他任何东西)——这是一个如何将它们与 Provider 联系起来的例子:
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
);
}
}