【问题标题】:Caching data while using the bloc pattern在使用 bloc 模式时缓存数据
【发布时间】:2019-09-03 22:56:14
【问题描述】:

我想在我的应用程序中实现缓存,这样数据只加载一次,然后每次重新加载页面时,都不必再次获取数据

下面的代码是一个pages bloc。

import 'dart:async';
import 'dart:collection';

import 'package:eightoeight/eightoeight.dart';
import 'package:rxdart/rxdart.dart';

class AlbumBloc {
  DatabaseClient db;

  Stream<List<AudioTrack>> get albums => _albumSubject.stream;

  final _albumSubject = BehaviorSubject<UnmodifiableListView<AudioTrack>>();

  final modeController = StreamController<int>();

  Sink<int> get mode => modeController.sink;

  var _albums = <AudioTrack>[];

  AlbumBloc() {
    create();
  }

  void create() async {
    if (db == null) {
      this.db = new DatabaseClient();
      await this.db.create();
    }

    modeController.add(0);
    modeController.stream.listen(onData);
  }

  void onData(int num) {
    if (num == null) {
      _updateSongs(0).then((_) {
        _albumSubject.add(UnmodifiableListView(_albums));
      });
    } else if (num == 1) {
      _updateSongs(1).then((_) {
        _albumSubject.add(UnmodifiableListView(_albums));
      });
    } else if (num == 2) {
      _updateSongs(2).then((_) {
        _albumSubject.add(UnmodifiableListView(_albums));
      });
    } else {
      _updateSongs(0).then((_) {
        _albumSubject.add(UnmodifiableListView(_albums));
      });
    }
  }

  Future<Null> _updateSongs(int num) async {
    var tracks;
    if (num == 1) {
      tracks = await db.fetchAlbumOrderArtist();
    } else {
      tracks = await db.fetchAlbum();
    }

    _albums = tracks;
  }
}

上面的代码只是从数据库中获取一个列表。我希望它仅在应用程序启动时从数据库中获取,然后在后续请求中从缓存中加载数据。谢谢。

【问题讨论】:

    标签: dart flutter bloc


    【解决方案1】:
    1. 创建一个类似AlbumDataRepository 的存储库类。
    2. 里面有fetchData这样的方法。
    3. 从您的 BLoC 调用该方法。
    4. 在该存储库类的fetchData() 中,首先检查缓存中的数据是否可用 一种。如果数据在缓存中,则获取并返回。 湾。如果数据不在缓存中,则从数据库中提取数据并将其存储在缓存中并返回该数据。

    注意:在您的存储库类中,您还应该有一个类似clearCache 的方法。当数据过期时调用该方法并从缓存中删除所有数据,以便下次获得更新的数据。

    【讨论】:

      猜你喜欢
      • 2013-04-21
      • 2019-11-20
      • 2010-09-11
      • 2019-06-13
      • 2020-11-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-14
      相关资源
      最近更新 更多