flutter getter调用了null异步内存



我正在尝试使用异步内存器对后端进行url调用,并将值返回到屏幕。这是我的代码:

我的数据存储库

import 'package:new_app/data/trainer_repository.dart';
import 'package:new_app/models/trainer.dart';
import 'package:rxdart/rxdart.dart';
import 'dart:async';
import 'package:async/async.dart';
class TrainerBLoc {
final trainerSource = BehaviorSubject<Trainer>();
final AsyncMemoizer _memoizer = AsyncMemoizer();
Stream<Trainer> get trainerStream => trainerSource.stream;
Future<Trainer> fetchTrainer() async {
return _memoizer.runOnce(() async {
final trainer = await trainerRepository.getTrainer();
return trainer;
});
}
void dispose() {
trainerSource?.close();
}
}
final TrainerBLoc trainerBLoc = TrainerBLoc();

培训师型号

import 'package:equatable/equatable.dart';
import 'package:meta/meta.dart';
class Trainer extends Equatable {
final String name;
final String phoneNumber;
final String email;
final String image;
final String state;
final String lg;
Trainer({
@required this.name,
@required this.phoneNumber,
@required this.email,
@required this.image,
@required this.state,
@required this.lg,
});

@override
List<Object> get props => [phoneNumber, name, email, image];
}  

我的主要小工具

class _TrainerScreenState extends State<TrainerScreen> {
Future<Trainer> _trainer;
@override
void initState() {
_trainer = trainerBLoc.fetchTrainer();
super.initState();
}
.....

但我得到了在null上调用的错误获取程序"name"。没有内存器,代码运行良好。如有任何帮助,将不胜感激

await添加到_memoizer.runOnce((中,因为它是一个异步函数。

Future<Trainer> fetchTrainer() async {
return await _memoizer.runOnce(() async {
final trainer = await trainerRepository.getTrainer();
return trainer;
});

trainerBLoc.fetchTrainer((也是一个异步函数,您需要等待结果,然后再将其设置为变量。

@override
void initState() {
trainerBLoc.fetchTrainer().then((value){_trainer=value});
super.initState();
}

最新更新