debt_dao.dart
Future totalAmount() async {
final db = await dbProvider.database;
var result = await db.rawQuery("SELECT SUM(amount) as Total FROM $debtDetailsTable");
var total = result[0]['Total'];
print(total); // It prints expected value ex. 1400
return total;
}
debt_repository.dart
Future getTotalAmt() => debtDao.totalAmount();
debt_bloc.dart
getTotalAmount() async {
await _debtRepository.getTotalAmt();
}
我想在这里显示输出,尽管像下面这样,它仅显示 null 。
debt_details.dart
Widget build(BuildContext context) {
int _total;
void calculateTotal() {
_total = debtBloc.getTotalAmount();
}
return Scaffold(
appBar: AppBar(
title: Text(_total.toString()), // Total should show/updated here
),
还有一件事,每当我在表单中添加数据时,我都有一个表单,总计应该更新。
debt_form.dart
saveDetails() async {
await debtBloc.getTotalAmount(); // Even this prints null only
}
因为我是长笛苦苦挣扎的新手。请以正确的方式指导我。预先感谢。
答案 0 :(得分:0)
好吧,我不知道您使用了哪种BLOC模式,但是根据我的情况,我使用rxdart来使用BLOC模式。 假设您的数据库是这样的
Future<double> totalAmount() async {
final db = await dbProvider.database;
var result = await db.rawQuery("SELECT SUM(amount) as Total FROM $debtDetailsTable");
double total = result[0]['Total'];
return total;
}
然后在您的bloc.dart中
final BehaviorSubject<Future<double>> _totalAmount = BehaviorSubject<Future<double>>();
Observable<Future<double>> get totalAmount => _totalAmount.stream;
Future<double> getTotalAmount(){
final totalAmount = totalAmount();
_totalAmount.sink.add(totalAmount);
}
然后在您的main.dart中
Widget build(BuildContext context) {
int _total;
bloc.getTotalAmount();
return Scaffold(
appBar: StreamBuilder(stream: bloc.totalAmount, builder:(Buildcontext context, Asyncsnapshot<Future<double>> snapshot){
if(!snapshot.hasdata){
// return no data
}
return FutureBuilder(future: snapshot.data, builder:(Buildcontext context, Asyncsnapshot<double> amountSnapshot){
if(!amountSnapshot.data){
// return no data
}
return AppBar(
title: Text(_total.toString()), // Total should show/updated here
})
}),
}
希望此示例代码可以帮助您解决此问题