#string #flutter #dart
#строка #flutter #dart
Вопрос:
Я пытаюсь использовать приведенный ниже sharedPreferenceBuilder Саймона Лайтфута.
class SharedPreferencesBuilder<T> extends StatelessWidget {
final String pref;
final AsyncWidgetBuilder<T> builder;
const SharedPreferencesBuilder({
Key key,
@required this.pref,
@required this.builder,
}) : super(key: key);
@override
Widget build(BuildContext context) {
return FutureBuilder<T>(
future: _future(),
builder: (BuildContext context, AsyncSnapshot<T> snapshot) {
return builder(context, snapshot);
});
}
Future<T> _future() async {
return (await SharedPreferences.getInstance()).get(pref); <-------- Here is the issue
}
}
К сожалению, функция _future() возвращает динамический тип вместо Future . Я попытался поместить as Future<T>
в конец возврата, но это все равно не сработало.
Есть ли какой-либо способ преобразовать динамический тип в Future?
Я также был явным и поменял <T>
местами for <String>
, но это тоже не сработало.
Спасибо за любую помощь, которую вы можете предоставить.
Комментарии:
1. Попробуйте вернуть
(Future.value(SharedPreferences.getInstance()).get(pref) as dynamic));
также с помощью await, и Future будет избыточным. Если вы хотите, чтобы это было future, вы должны вызвать метод with_future().then((value) => {value here will be the value of your sharedPref.get()})
. В принципе, я бы удалил Future .2. Спасибо, что вернулись. К сожалению, я все еще получаю ту же ошибку «Возвращаемый тип ‘dynamic’ не является ‘FutureOr<T>’, как того требует контекст закрытия».
3. Я протестировал ваш код, и он работает, ошибок нет.
4. хорошо, спасибо. тогда, должно быть, что-то не так с моим концом.