Flutter-如何在不同班级之间发送/接收数据?

时间:2019-04-11 18:10:19

标签: dart flutter

我想获取当前用户位置,以根据网址内的纬度/经度更新附近的商店。

但是我不知道如何在两个不同的类之间交互数据。 我想让它像“ AppConfig.latitude = _position.latitude;”一样工作。我尝试了几种方法,包括在stackoverflow和youtube上发现的继承的小部件,但仍然无法使用。肯定是我缺少了什么。

当我使用bloc时,我不知道如何使用bloc更新'AppConfig类'中的数据。可以简单地使用SetState来完成吗?昨天我整天都在搜寻这个问题。请引导我采取正确的方法

class _CurrentLocationState extends State<CurrentLocation> {
  Position _position;

Future<void> _initPlatformState() async {
    Position position;
    try {
      final Geolocator geolocator = Geolocator()
    ...

    setState(() {
      _position = position;

      // print(${_position.latitude})
      // 35.9341...
      // print(${_position.longitude})
      // -117.0912...

      <*I want to make it work something like this*>
      AppConfig.latitude = _position.latitude;
      AppConfig.longitude = _position.longitude;

      <*this is how I tried with bloc*>
      latLongBloc.getUserLocation(LatLng(position.latitude, position.longitude));

    });
<* latitude/longitude need to be updated with a current user location *>
abstract class AppConfig {
  static const double latitude = 0;
  static const double longitude = 0;
  static const List<String> storeName = ['starbucks'];
}

<* I need to use AppConfig.latitude for url in Repository class*>
class Repository {
  ...
  Future<List<Business>> getBusinesses() async {

    String webAddress =
      "https://api.yelp.com/v3/businesses/search?latitude=${AppConfig.latitude}&longitude=${AppConfig.longitude}&term=${AppConfig.storeName}";

  ...
}

这是我的bloc.dart文件

class LatLongBloc {

  StreamController _getUserLocationStreamController = StreamController<LatLng>();

  Stream get getUserLocationStream => _getUserLocationStreamController.stream;


  dispose(){
    _getUserLocationStreamController.close();
  }

  getUserLocation(LatLng userLatLong) {
    _getUserLocationStreamController.sink.add(userLatLong);
  }
}

final latLongBloc = LatLongBloc();

1 个答案:

答案 0 :(得分:0)

您想在课程/小部件之间共享状态,对吗?还有其他状态管理模式,例如ScopedModelRedux。每种模式都有其优缺点,但是如果您不了解,则不必使用BLoC。

我建议使用ScopedModel,因为我认为它很容易理解。您的数据/状态位于中心位置,可以使用ScopedModel进行访问。如果您不喜欢使用这种方法,请尝试使用Redux或其他模式:)

希望它对您有帮助:D

您的Glup3