From 8f9ed5469d60806828d7e9daa0d60230cc6216e3 Mon Sep 17 00:00:00 2001
From: Rongjian Zhang <pd4d10@gmail.com>
Date: Sun, 2 Feb 2020 23:06:54 +0800
Subject: [PATCH] fix(bb): utf8 decode text

---
 lib/models/auth.dart       | 6 ------
 lib/screens/bb_object.dart | 5 +++--
 lib/screens/bb_repo.dart   | 5 ++++-
 3 files changed, 7 insertions(+), 9 deletions(-)

diff --git a/lib/models/auth.dart b/lib/models/auth.dart
index 182c7e7..402ec7a 100644
--- a/lib/models/auth.dart
+++ b/lib/models/auth.dart
@@ -287,12 +287,6 @@ class AuthModel with ChangeNotifier {
     );
   }
 
-  Future<String> fetchBbReadme(String p) async {
-    final res = await fetchBb(p);
-    if (res.statusCode >= 400) return null;
-    return res.body;
-  }
-
   Future<void> init() async {
     // Listen scheme
     _sub = getUriLinksStream().listen(_onSchemeDetected, onError: (err) {
diff --git a/lib/screens/bb_object.dart b/lib/screens/bb_object.dart
index 8363e5f..04e5e4a 100644
--- a/lib/screens/bb_object.dart
+++ b/lib/screens/bb_object.dart
@@ -28,9 +28,10 @@ class BbObjectScreen extends StatelessWidget {
         final res = await auth
             .fetchBb('/repositories/$owner/$name/src/$ref/${path ?? ''}');
         if (res.headers[HttpHeaders.contentTypeHeader] == 'text/plain') {
-          return res.body;
+          return utf8.decode(res.bodyBytes);
         } else {
-          return BbPagination.fromJson(json.decode(res.body)).values;
+          return BbPagination.fromJson(json.decode(utf8.decode(res.bodyBytes)))
+              .values;
         }
       },
       actionBuilder: (p, _) {
diff --git a/lib/screens/bb_repo.dart b/lib/screens/bb_repo.dart
index 0b72938..62abe27 100644
--- a/lib/screens/bb_repo.dart
+++ b/lib/screens/bb_repo.dart
@@ -1,3 +1,5 @@
+import 'dart:convert';
+
 import 'package:filesize/filesize.dart';
 import 'package:flutter/material.dart';
 import 'package:git_touch/models/auth.dart';
@@ -27,7 +29,8 @@ class BbRepoScreen extends StatelessWidget {
         final repo = BbRepo.fromJson(r);
         final res = await auth.fetchBb(
             '/repositories/$owner/$name/src/${repo.mainbranch.name}/README.md');
-        final readme = res.statusCode >= 400 ? null : res.body;
+        final readme =
+            res.statusCode >= 400 ? null : utf8.decode(res.bodyBytes);
         return Tuple2(repo, readme);
       },
       bodyBuilder: (t, setState) {