Flutter---提取BSON文件内容
@override
void initState() {
super.initState();
_fetchBsonText(widget.vodioInfo['entity']['transcriptionURL']);
}
Future<void> _fetchBsonText(String? bsonUrl) async {
if (bsonUrl == null || bsonUrl.isEmpty) {
setState(() {
_isLoading = false;
_hasError = true;
});
return;
}
try {
Dio dio = Dio();
Response response = await dio.get(bsonUrl,
options: Options(responseType: ResponseType.bytes));
Uint8List bsonBytes = Uint8List.fromList(response.data);
BsonBinary bsonBinary = BsonBinary.from(bsonBytes);
BSON bson = BSON();
var bsonDoc = bson.deserialize(bsonBinary) as Map<String, dynamic>;
setState(() {
_transcriptionSegments = _extractFormattedStrings(bsonDoc);
_isLoading = false;
});
} catch (e) {
print('Error fetching BSON text: $e');
setState(() {
_isLoading = false;
_hasError = true;
});
}
}
List<String> _extractFormattedStrings(Map<String, dynamic> bsonDoc) {
List<dynamic> items = bsonDoc['items'];
return items.map((item) => item['formattedString'].toString()).toList();
}
Widget _buildBody() {
return Scaffold(
appBar: AppBar(
title: Text(
'Transcription details',
style: TextStyle(fontSize: 18, fontWeight: FontWeight.bold),
),
leading: IconButton(
color: Colors.black,
iconSize: 35,
icon: Icon(Icons.navigate_before),
onPressed: () {
Navigator.pop(context);
},
),
actions: _buildActions(context),
),
body: Container(
alignment: Alignment.topCenter,
child: _isLoading
? Center(child: CircularProgressIndicator())
: _hasError
? Center(child: Text('没有内容'))
: SingleChildScrollView(
padding: EdgeInsets.all(16.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: _transcriptionSegments.map((segment) {
return Padding(
padding: const EdgeInsets.only(bottom: 20),
child: Text(
segment,
style: TextStyle(fontSize: 16.0),
),
);
}).toList(),
),
),
),
);
}
