Flutter-提取.BSON文件转录内容

76 阅读1分钟

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 {
      // 下载 BSON 文件
      Dio dio = Dio();
      Response response = await dio.get(bsonUrl,
          options: Options(responseType: ResponseType.bytes));
      Uint8List bsonBytes = Uint8List.fromList(response.data);
​
      // 将 Uint8List 转换为 BsonBinary
      BsonBinary bsonBinary = BsonBinary.from(bsonBytes);
​
      // 解析 BSON 文件
      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;
      });
    }
  }
 // 提取 formattedString 并返回字符串列表
  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(),
                    ),
                  ),
      ),
    );
  }

微信截图_20240514185602.png