A bit beside the point of your question, but I would recommend using sub collections (https://firebase.google.com/docs/firestore/data-model) for the person's data, as you are going to make your life harder by mixing the document "types" in the fl_content collection.
You'll also want to be careful not to use the reference as a foreign key
That being said, see below a potential solution to answer your question.
If your goal is only to get read data, you can just map trigger the call to Firestone from the reference:
List<DocumentSnapshot> persons = await FirebaseFirestore.instance
.collection('fl_content')
.where('_fl_meta_.schema', isEqualTo: 'talks')
.get();
persons = await Future.wait(persons.map((_) => _.data().person.get()));
(didn't test, but the idea is there). This one makes sense as it is only fetching the persons you need, BUT it is expensive in terms of http calls and Firestone roundtrips.
An other option, would be to fetch all talks, and all persons, and map them together. You might be fetching unused data which is a bit of a bad practice, but it will be less expensive than the first option (I assumed that your schema
would be persons
:
List<DocumentSnapshot> talks = await FirebaseFirestore.instance
.collection('fl_content')
.where('_fl_meta_.schema', isEqualTo: 'talks')
.get();
List<DocumentSnapshot> persons = await FirebaseFirestore.instance
.collection('fl_content')
.where('_fl_meta_.schema', isEqualTo: 'persons')
.get();
Map<String, dynamic> mappedTalks = talks.map((_) => ({..._.data(), person: persons.firstWhere((__) => __.id == _.person.id, orElse: () => null)}));
(also didn't test, but the idea is also here ;) )