Ошибка трепетания при отображении аватара Google Play игры - PullRequest
0 голосов
/ 06 февраля 2020

При использовании расширения play_games у меня возникают проблемы с возвратом изображения профиля пользователя.

Используйте метод ниже для входа в систему и установки состояния с возвратом данных пользователя.

Изображение провайдер: NetworkImage ("content: //com.google.android.gms.games.background/images/f56551ac/42", масштаб: 1,0)

// Google Play Games stance
final GameServices gameservices = GameServices();
Account profile;
ui.Image profileimage;

void _login() async {
    final res = await gameservices.login();
    final resimage = await res.hiResImage;

    setState(() {
        profile = res;
        profileimage = resimage;
    });

    print(profileimage);
}

В виджете я нахожусь в в форме NetworkImage, но он по-прежнему не отображается на экране.

эта ошибка: тип аргумента «Изображение» нельзя присвоить типу параметра «Строка».

Container(
    width: 128,
    height: 128,
    padding: EdgeInsets.all(8),
    child: CircleAvatar(
        backgroundImage: NetworkImage(this.profileimage != null ? this.profileimage : 'https://api.adorable.io/avatars/128/')
    ),
    decoration: BoxDecoration(
        color: Colors.white,
        shape: BoxShape.circle
    ),

),

image not rendering

[РЕШЕНО !!! ]

Измените мой код, и play_games возвращает тип vars. Позволяет go:

Future<Uint8List> get hiResImage async =>
  await _fetchToMemory(await _channel.invokeMethod('getHiResImage'));

Future<Uint8List> get iconImage async =>
  await _fetchToMemory(await _channel.invokeMethod('getIconImage'));
}


Future<Uint8List> _fetchToMemory(Map<dynamic, dynamic> result) {
    Uint8List bytes = result['bytes'];
    if (bytes == null) {
        print('was null, mate');
        return Future.value(null);
    }
    // Completer<Image> completer = new Completer();
    // decodeImageFromList(bytes, (image) => completer.complete(image));
    return Future.value(bytes);
}

И мой код, только это изменение:

Uint8List profileimage;

enter image description here

Ответы [ 2 ]

0 голосов
/ 06 февраля 2020

Это происходит потому, что Google предоставляет закодированное изображение. В android мы можем использовать ImageManager для этого, как предлагает Google.

В флаттере есть механизм получения Future<Image> из hiresImageUri. Отметьте здесь .

Используйте что-то вроде ниже,

profile.hiResImage.then((Image result){
        //here you can get image in result
});
0 голосов
/ 06 февраля 2020

Flutter кричит на вас, потому что вы дали ему URL с протоколом content://, когда он ожидает http:// или https:// для виджета NetworkImage. См. Документацию по адресу: https://flutter.dev/docs/cookbook/images/network-image

...