我在颤振方面几乎没有开发任何应用程序,可以进行一些计算,
我正在使用sqflite
流从BehaviorSubject
数据库加载用于计算的默认值,
然后我在屏幕上显示数据,通过点击计算按钮,用户可以计算结果,结果显示在颤振表小部件中。
现在我需要将计算结果保存在数据库中以备将来参考,
问题是如何访问表中的计算结果。
这是我的代码。
我的BloC类
class ConcreteBLoC extends EstimationBlocBase {
final int typeId;
BLoCProvider provider;
BehaviorSubject<EstimationResult> _subjectCalcResult;
ConcreteBLoC(this.typeId) {
provider = BLoCProvider(typeId);
_subjectCalcResult = new BehaviorSubject<EstimationResult>();
provider.getInitialData().then((onValue)=>{
_subjectCalcResult.add(onValue)
});
}
Observable<EstimationResult> resultObservable() {
return _subjectCalcResult.stream;
}
void updateResult(String length, String width, String thick, int selectedRatio) {
provider.calculateResult(length, width, thick, selectedRatio);
_subjectCalcResult.add(provider.result);
}
void dispose() {
_subjectCalcResult.close();
}
}
在此组中,我加载默认数据并添加到接收器。
我的BlocProvider
class BLoCProvider {
// ...... More codes here
Future<EstimationResult> getInitialData() async{
List<Material> resultList = new List();
List<Material> materials = await materialRepository.getMaterialsForEsType(id);
var material;
materials.forEach((f)=>{
material = new Material(),
material.name = f.name,
material.id = f.id,
material.qty = 0.0,
material.unit = "kg",
resultList.add(material)
});
var estimation = new EstimationResult();
estimation.materials = resultList;
estimation.totalRootMaterialValue = 0.0;
estimation.rootMatrialText = "Total concrete area : ";
return estimation;
}
// ....... More codes here!
}
从数据库加载初始数据
我的Statefulwidget构建方法
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: ... APP BAR CODE
body: GestureDetector(
onTap: () {
FocusScope.of(context).requestFocus(new FocusNode());
},
child: CustomScrollView(
slivers: <Widget>[
SliverList(
delegate: SliverChildListDelegate([
Container(
padding: EdgeInsets.all(15.0),
child: StreamBuilder<EstimationResult>(
stream: _bloc.resultObservable(),
builder: (context,
AsyncSnapshot<EstimationResult> snapshot) {
if (snapshot.hasData) {
return _buildMainUI(snapshot.data);
}else{
return new Center(child: new CircularProgressIndicator());
}
}),
)
]),
)
],
),
));
}
使用流数据创建小部件UI
Widget _buildMainUI(EstimationResult data) {
return Column(
children: <Widget>[
Form(
key: _formKey,
autovalidate: _autoValidate,
child: _formUI(),
),
ButtonBar(
alignment: MainAxisAlignment.spaceEvenly,
children: <Widget>[
cw.getRaisedButton(Colors.white, Theme.of(context).buttonColor,
"CALCULATE", _calculate),
cw.getRaisedButton(
Colors.white, Theme.of(context).buttonColor, "SAVE", _save),
cw.getRaisedButton(
Colors.white, Theme.of(context).buttonColor, "RESET", _reset),
],
mainAxisSize: MainAxisSize.max,
),
cw.getDividerWidget(Theme.of(context).dividerColor),
_buildCalculationResultTable(data),
],
);
}
在这里,我有“计算”按钮,当用户单击“计算”按钮时,它将调用bloc的计算方法并返回一些计算结果,并将再次反映在_buildCalculationResultTable
现在我需要知道如何将结果保存到db吗?
我们不能使用Bloc的BehaviorSubject
保存数据吗?还是必须将带有数据的模型再次传递给bloc?
我很陌生,所以,请帮助我解决这个问题,
谢谢!