应用异步取得Future<T>

在flutter我的项目中应用async await异步获取数据时,会返回一个Future<T>类型的数据,然而将其应用在widget中,会有一个问题:在statefulWidget中应用变量接管值,会呈现无奈赋值的状况

///index.dart  class Index extends StatefulWidget {  Index({Key key}) : super(key: key);  @override  _IndexState createState() => _IndexState();} class _IndexState extends State<Index> {  List<Widget> _temps;  String _studentId = "abcd";  String _token =      "lkjncasfmalknfadwSadwawf1dawd";  @override  void initState() {    super.initState();    _temps = _getClassItems(getOneDaylessons(_dates, _studentId, _token));  }  var _dates = initDate();  void _getDates(value) {    _dates = DateFormat('EEE', "en_US").format(value).toString();    setState(() {      _temps = _getClassItems(getOneDaylessons(_dates, _studentId, _token));    });  }  List<Widget> _getClassItems(List<Widget> classItems) {    if (classItems.isEmpty) {      return [        Container(          height: 60,          child: Center(            child: Text("今日暂无课程"),          ),        )      ];    } else {      return classItems;    }  }     @override  Widget build(BuildContext context) {    return Scaffold(      body: Container(        child:                  Column(                    children: _temps,//报错处                  ),                 )            )   }  ///getOneDaylessons.dart  List<Widget> getOneDaylessons(String date, String studentId, String token) {  ClassResponseData _data;  getTimeTableFromStudentID(studentId, token)      .then((v) => {_data=v});  List<ClassItemViewModel> datas =      getADayClasses(data);  List temp = datas      .map((e) {        if (e.date == date) {          return ClassItem(data: e);        }      })      .toList()      .where((element) => element != null)      .toList();  return temp;}//运行我的项目报错_temps是null

解决方案

将getOneDaylessons同样应用async包装,返回Future<T>到index.dart.在index.dart中,应用FutureBuilder,取值

///getOneDaylessons.dartFuture<List<Widget>> getOneDaylessons(    String date, String studentId, String token) async {  ClassResponseData response =      await getTimeTableFromStudentID(studentId, token);  List<ClassItemViewModel> datas = getADayClasses(response);  List temp = datas      .map((e) {        if (e.date == date) {          return ClassItem(data: e);        }      })      .toList()      .where((element) => element != null)      .toList();  return temp;}///index.dart..._temps = _getClassItems();...Future<List<Widget>> _getClassItems() async {    List<Widget> classItems =        await getOneDaylessons(this._dates, this._studentId, this._token);    if (classItems.isEmpty) {      return [        Container(          height: 60,          child: Center(            child: Text("今日暂无课程"),          ),        )      ];    } else {      return classItems;    }  } @override  Widget build(BuildContext context) {    return Scaffold(      body: Container(        child:                  Container(                    child: FutureBuilder(                        future: _temps,                        builder:                            // ignore: missing_return                            (BuildContext context, AsyncSnapshot snapshot) {                          if (snapshot.connectionState ==                              ConnectionState.done) {                            if (snapshot.hasError) {                              return Text(snapshot.error.toString());                            }                            return Column(children: snapshot.data);                          }                          return CircularProgressIndicator();                        }),                  ),                 )   }