Flutter 如何使用提供程序在颤振中添加依赖项注入

Flutter 如何使用提供程序在颤振中添加依赖项注入,flutter,dart,dependency-injection,architecture,provider,Flutter,Dart,Dependency Injection,Architecture,Provider,主飞镖 void main() => runApp(MultiProvider(providers: [ ChangeNotifierProvider( create: (BuildContext context) => QuoteViewModel(), ), ChangeNotifierProvider( create: (BuildContext context) => AuthorViewModel()

主飞镖

void main() => runApp(MultiProvider(providers: [
      ChangeNotifierProvider(
        create: (BuildContext context) => QuoteViewModel(),
      ),
      ChangeNotifierProvider(
        create: (BuildContext context) => AuthorViewModel(),
      ),
    ], child: MyApp()));

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Poems',
      home: PoemsListPage(),
    );
  }
}
飞镖

class Quote {
  final String id;
  final String authorId;
  final String body;

  Quote(this.id, this.authorId, this.body);
}

class Author {
  final String id;
  final String name;

  Author(this.id, this.name);
}
类存储库{
最终Api _Api=Api();
最终数据库_Database=Api();
列出getQuotes()=>[];
列表,但它以错误“这可能是一个错误,因为提供程序不会自动更新依赖项”结束
List globalProviders=[
Provider.value(值:Api()),
Provider.value(值:Database()),
ProxyProvider2(
更新:(uuu,api,数据库,uuu)=>存储库(api,数据库),
),
代理提供者(
更新:(uu,回购,uuu)=>QuoteViewModel(回购),
),
代理提供者(
更新:(u,repo,uu)=>AuthorViewModel(repo),
)
];
void main()=>runApp(
多供应商(
供应商:全球供应商,
子项:MyApp(),
),
);
main.dart(已更新)

类存储库{
最终空气污染指数(空气污染指数);;
最终数据库(u数据库),;
存储库({@required-api,@required-database})
:_api=api,
_数据库=数据库;
列出getQuotes()=>[];
列出getAuthors()=>[];
}
repository.dart(已更新)

class QuoteViewModel与ChangeNotifier{
最终存储库(U存储库);
QuoteViewModel({@required repository}):\u repository=repository;
列出getQuotes()=>_repository.getQuotes();
}
使用ChangeNotifier类AuthorViewModel{
最终存储库(U存储库);
AuthorViewModel({@required repository}):\u repository=repository;
列出getAuthors()=>_repository.getAuthors();
}

通知程序.dart(已更新)

Flatter提供了一个使用提供商软件包的指南,可以帮助您解决问题。如果您能更具体地说明与提供商之间存在的问题,这将很有帮助。

如果您只提供有问题的代码,而不是项目中的所有代码,这将对其他人有所帮助。这样人们就可以专注于您的问题lem,无需滚动数百行就可以找到错误的codeFound解决方案?我还在寻找如何通过Multiprovider向更改通知程序提供其依赖性的方法。这可能会有帮助:
class Quote {
  final String id;
  final String authorId;
  final String body;

  Quote(this.id, this.authorId, this.body);
}

class Author {
  final String id;
  final String name;

  Author(this.id, this.name);
}
class Repository {
  final Api _api = Api();
  final Database _database = Api();

  List<Quote> getQuotes() => [];

  List<Author> getAuthors() => [];
}

class QuoteViewModel with ChangeNotifier {
  final Repository _repository = Repository();

  List<Quote> getQuotes() => _repository.getQuotes();
}

class AuthorViewModel with ChangeNotifier {
  final Repository _repository = Repository();

  List<Author> getAuthors() => _repository.getAuthors();
}
List<SingleChildWidget> globalProviders = [
  Provider.value(value: Api()),
  Provider.value(value: Database()),
  ProxyProvider2<Api, Database, Repository>(
    update: (_, api, database, __) => Repository(api, database),
  ),
  ProxyProvider<Repository, QuoteViewModel>(
    update: (_, repo, __) => QuoteViewModel(repo),
  ),
  ProxyProvider<Repository, AuthorViewModel>(
    update: (_, repo, __) => AuthorViewModel(repo),
  )
];

void main() => runApp(
      MultiProvider(
        providers: globalProviders,
        child: MyApp(),
      ),
    );
class Repository {
  final Api _api;
  final Database _database;

  Repository({@required api, @required database})
      : _api = api,
        _database = database;

  List<Quote> getQuotes() => [];

  List<Author> getAuthors() => [];
}
class QuoteViewModel with ChangeNotifier {
  final Repository _repository;

  QuoteViewModel({@required repository}) : _repository = repository;

  List<Quote> getQuotes() => _repository.getQuotes();
}

class AuthorViewModel with ChangeNotifier {
  final Repository _repository;

  AuthorViewModel({@required repository}) : _repository = repository;

  List<Author> getAuthors() => _repository.getAuthors();
}