如何将未来<int>传递到超级类

  • 本文关键字:int 未来 flutter dart bloc
  • 更新时间 :
  • 英文 :


我正在努力学习Flutter和BLoC模式。所以,我创建了一个简单的计数器应用程序。最初计数值为0,并且随着各个按钮的按下而增加/减少。初始值(零(被发送到初始状态,如下所示。

class CounterBloc extends Bloc<CounterEvent, CounterState> {
CounterBloc() : super(CounterInitialState(0));

Counter应用程序按预期工作,但每当我重新启动时,应用程序计数都从零开始。现在我想从我离开的地方开始计数。我读过SharedPreferences,可以成功保存当前值。但我无法加载值并将其发送到CounterInitialState()(参数类型"Future"不能分配给参数类型"int"(。我怎样才能做到这一点?

我的counter_loc.dart是这样的;

import 'dart:async';
import 'package:flutter/material.dart';
import 'package:bloc/bloc.dart';
import 'package:meta/meta.dart';
import 'package:sampleOne/config/config.dart';
import 'package:shared_preferences/shared_preferences.dart';
part 'counter_event.dart';
part 'counter_state.dart';
class CounterBloc extends Bloc<CounterEvent, CounterState> {
CounterBloc() : super(CounterInitialState(0));
@override
Stream<CounterState> mapEventToState(
CounterEvent event,
) async* {
if (event is CounterIncrementEvent) {
yield* _mapIncrementEvent(event.countVal); 
}
if (event is CounterDecrementEvent) {
yield* _mapDecrementEvent(event.countVal);
}
}
}
Stream<CounterState> _mapIncrementEvent(val) async* {
await saveData(val);
yield CounterIncrementState(val + 1);
}
Stream<CounterState> _mapDecrementEvent(val) async* {
await saveData(val);
yield CounterDecrementState(val + 1);
}

Future<bool> saveData(int val) async {
SharedPreferences pref = await SharedPreferences.getInstance();
return pref.setInt('key', val + 1);
}

Future<int> loadData() async {
SharedPreferences pref = await SharedPreferences.getInstance();
return pref.getInt('key') ?? 0;
}

请帮忙。

您需要用FutureBuilder小部件包装您的小部件。例如

FutureBuilder<int>(
future: _bloc.loadData(),
initalData: 0,
builder: (context, snapshot) {
return Text(snapshot.data.toString());
}
)

在哪里调用loadData((?

也许你需要像这样等待:

Future<int> data = loadData();
int data = await loadData();

您的函数是异步的,因此它返回Future,添加wait以获得整数

最新更新