如何构建Flutter应用程序的架构

时间:2019-12-19 20:08:50

标签: flutter state-management flutter-provider

我正在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
  •   

谢谢!

1 个答案:

答案 0 :(得分:1)

不清楚要使用哪种“体系结构”,提供程序只是一种以安全方式在小部件树中检索对象的机制。

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