新闻应用

使用 BLOC 模式的 Flutter 新闻应用

此示例使用了CustomScrollView、JSON Rest API、BottonNavigationBar、SliverList、ClipRRect、Card、Progress Indicator、NetworkImage、Card、Column、Row、Container、InkWell、BoxDecoration。

Bloc 模式

我使用了这种模式来设计这个应用程序。

class NewsBloc {
  final _repository = Repository();
  final _newsFetcher = PublishSubject<NewsModel>();
  final _newsSearchFetcher = PublishSubject<NewsModel>();
  final _newsLikeFetcher = PublishSubject<NewsModel>();

  Observable<NewsModel> get allNews => _newsFetcher.stream;
  Observable<NewsModel> get searchNews => _newsSearchFetcher.stream;
  Observable<NewsModel> get likeNews => _newsLikeFetcher.stream;

  fetchLikedNews() async {
    NewsModel newsModel = await _repository.fetchLikedNews();
    _newsLikeFetcher.sink.add(newsModel);
  }

  fetchAllNews() async {
    NewsModel newsModel = await _repository.fetchAllNews();
    _newsFetcher.sink.add(newsModel);
  }

  fetchSearchNews() async {
    NewsModel newsModel = await _repository.fetchSearchNews();
    _newsSearchFetcher.sink.add(newsModel);
  }

  // Set and delete from Firestore liked
  addFavorit(val) async => _repository.addFavorit(val);
  deliteFavorit(val) async => _repository.deliteFavorit(val);

  dispose() {
    _newsLikeFetcher.close();
    _newsFetcher.close();
    _newsSearchFetcher.close();
  }
}

final bloc = NewsBloc();

截图

内置

  • Flutter – 跨平台应用开发框架

许可证

根据 MIT协议 发布

作者

Adeshchenko Kirill (Cyrill) (@kaparray)

GitHub

查看 Github