如何构建 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 只是一种以安全方式检索小部件树中对象的机制。

假设你的意思是 UserServiceChatService,它们是 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
    );
  }
}