如何构建 Flutter 应用的架构
Posted
技术标签:
【中文标题】如何构建 Flutter 应用的架构【英文标题】:How to build the architecture of a flutter app 【发布时间】:2020-04-12 10:33:04 【问题描述】:我正在 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 会抛出此错误:
尝试使用带有 Listenable/Stream (ChatService) 子类型的 Provider。
这很可能是一个错误,因为提供者不会自动更新家属 当 ChatService 更新时。相反,请考虑将 Provider 更改为更具体的 处理更新机制的实现,例如:
ListenableProvider ChangeNotifierProvider ValueListenableProvider
谢谢!
【问题讨论】:
我再次运行模拟器,现在,奇怪的是,它可以工作了。 【参考方案1】:不清楚你将使用哪种“架构”,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
);
【讨论】:
与架构我的意思是要创建哪些组件(在您的情况下是通知程序)以及其中有多少(一个通知程序可以避免我的问题,而您的情况下是两个通知程序)。感谢您的回复! 我遇到了同样的错误,但现在我看到了我的错误,我使用的是 ProxyProvider 而不是 ChangeNotifierProxyProvider。谢谢!!!以上是关于如何构建 Flutter 应用的架构的主要内容,如果未能解决你的问题,请参考以下文章