在 google IO 18 中,Flutter 演示者展示了一个功能,但没有展示如何实现它。 视频(准确时间)是:https://youtu.be/RS36gBEp8OI?t=1776
如何实现这样的事情?如何根据接收器正确地使流正确格式化?
(对不起,我对 Rx 不太熟悉)
最佳答案
使用 rxdart 包中的 combineLatest
函数。它采用输入流的最新值,因此只要语言环境或购物车项目发生变化,它就会计算并格式化总成本。
import 'dart:async'; // Sink, Stream
import 'dart:ui'; // Locale
import 'package:rxdart/rxdart.dart'; // Observable, *Subject
class Bloc {
var _locale = BehaviorSubject<Locale>(seedValue: Locale('en', 'US'));
var _items = BehaviorSubject<List<CartItem>>(seedValue: []);
Stream<String> _totalCost;
Sink<Locale> get locale => _locale.sink;
Stream<List<CartItem>> get items => _items.stream;
Stream<String> get totalCost => _totalCost;
Bloc() {
_totalCost = Observable.combineLatest2<Locale, List<CartItem>, String>(
_locale, _items, (locale, items) {
// TODO calculate total price of items and format based on locale
return 'USD 10.00';
}).asBroadcastStream();
}
void dispose() {
_locale.close();
_items.close();
}
}
免责声明:我没有尝试运行此代码,因此可能会出现错误,但基本思想应该是可靠的。
关于dart - 如何使 Sink<Locale> 格式化 Stream<String> 的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52340948/
相关文章:
flutter - Flutter 中的约束布局等价物是什么?
android - Flutter - 多个手势,无需抬起手指
firebase - flutter |如何将数据添加到 Firestore 中的现有文档
dart - 如何使用现有的应用程序 keystore 获取签名的 apk?
dart - 如何删除 RadioListTile 上的内部填充,以便可以连续使用 3 个 Radi
firebase - Flutter ListView 跳转到顶部
firebase - 如何在 Flutter 中设置不同的 firebase 环境