Different handling of Future values

Why is this not equal and the second approach even results in an exception ?

 static Future<int> _getFileLength() async{
   return  await _exampleQuestionsFuture.then((value) {
    return value.length;

// first approach
int lengthOfFile;
_getFileLength().then((value) {
   lengthOfFile = value;

// second approach results in Error: A value of type 'Future<int>' can't be assigned to a variable of type 'int'.
    int k = _getFileLength().then((value) {
    return value;