Я пытаюсь создать кросс-платформу для Интернета и мобильных устройств с буферами протоколов. Итак, в моем коде у меня есть функция для входа в систему, и мне нужно импортировать grpc_web:
import 'package:flutter/foundation.dart';
import 'package:grpc/grpc.dart';
import 'package:dsu_site/models/user.pb.dart';
import 'package:dsu_site/models/user.pbgrpc.dart' as grpc;
import 'package:grpc/grpc_web.dart' as grpc_web;
import 'package:flutter/services.dart';
import 'dart:convert';
Future<Utilizador> login({String username, String password}) async {
Utilizador user;
if (kIsWeb) {
final channel =
grpc_web.GrpcWebClientChannel.xhr(Uri.parse('https://pl1772:8443'));
final service = grpc.UtilizadoresServiceClient(
channel,
);
var request = Auth();
request.username = username;
request.password = password;
try {
user = await service.login(request);
} catch (e) {
print('Error in login form: $e');
user = grpc.Utilizador();
}
return user;
}
final caCert = await rootBundle.loadString('certs/server.crt');
final ClientChannel channel = ClientChannel(
'localhost',
port: 9002,
options: ChannelOptions(
connectionTimeout: Duration(seconds: 5),
credentials: ChannelCredentials.secure(
authority: 'localhost',
certificates: utf8.encode(caCert),
),
),
);
final service = grpc.UtilizadoresServiceClient(channel);
var request = Auth();
request.username = username;
request.password = password;
try {
user = await service.login(request);
} catch (e) {
print('Error in login form: $e');
user = grpc.Utilizador();
}
return user;
}
Проблема в том, что когда я запускаю это для Интернета (используя Chrome), все в порядке, но для мобильных устройств я получаю следующие ошибки:
[38; 5; 244m [39; 49m [38; 5; 248m # 3
FrontendCompiler.compile (package: frontend_server / frontend_server.dart: 554: 15) [39; 49m
- BrowserClient находится из пакета: http / src / browser_client.dart ('../../.pub-cache/hosted/pub.dartlang.org/http-0.12.2/lib/src/browser_client.dart '). Попробуйте изменить имя на имя существующего метода или определить метод с именем HttpRequest. var xhr = HttpRequest (); ^^^^^^^^^^^ ../../.pub-cache/hosted/pub.dartlang.org/http-0.12.2/lib/src/browser_client.dart:58:42: Ошибка: Метод Blob не определен для класса BrowserClient.
- BrowserClient находится из пакета: http / src / browser_client.dart ('../../.pub-cache/hosted/pub.dartlang.org/http-0.12.2/lib/src/browser_client.dart '). Попробуйте изменить имя на имя существующего метода или определить метод с именем «Blob». var blob = xhr.response as Blob ?? Blob ([]); ^^^^ ../../.pub-cache/hosted/pub.dartlang.org/http-0.12.2/lib/src/browser_client.dart:59:20: Ошибка: метод FileReader isn t определен для класса BrowserClient.
- BrowserClient находится из пакета: http / src / browser_client.dart ('../../.pub-cache/hosted/pub.dartlang.org/http-0.12.2/lib/src/browser_client.dart '). Попробуйте изменить имя на имя существующего метода или определить метод с именем FileReader. var reader = FileReader (); ^^^^^^^^^^ Необработанное исключение: FileSystemException (uri = org-dartlang-untranslatable-uri: dart% 3Ahtml; message = StandardFileSystem поддерживает только URI file: * и data: *) [38; 5; 248m # 0 StandardFileSystem.entityForUri (пакет: front_end / src / api_prototype / standard_file_system.dart: 33: 7) [39; 49m [38; 5; 248m # 1 asFileUri (пакет: vm / kernel_front_end.dart: 599: 37) [39; 49m [38; 5; 248m # 2
writeDepfile (пакет: vm / kernel_front_end.dart: 739: 21) [39; 49m- пожалуйста, посмотрите этот ответ stackoverflow.com/a/58713064/6813907
[38; 5; 244m [39; 49m [38; 5; 248m # 4
_FlutterFrontendCompiler.compile (package: flutter_frontend_server / server.dart: 43: 22) [39; 49m[38; 5; 248m # 5 стартер (package: flutter_frontend_server / server.dart: 180: 27) [39; 49m [38; 5; 248m # 6 main (file: /// b / s / w / ir / cache /builder/src/flutter/flutter_frontend_server/bin/starter.dart:13:30)[39;49m
[38; 5; 244m # 7 _startIsolate. (dart: изолят-патч / изолят_патч.dart: 299: 32) [39; 49м [38; 5; 244м # 8
_RawReceivePortImpl._handleMessage (dart: изолят-патч / изолят_патч.dart: 168: 12) [ 39; 49мОШИБКА: сбой при сборке за исключением.
Где: строка сценария '/home/sfm1977/flutter/packages/flutter_tools/gradle/flutter.gradle': 900
Что пошло не так: не удалось выполнить задачу ': app: compileFlutterBuildDebug'.
Процесс 'command' / home / sfm1977 / flutter / bin / flutter 'завершен с ненулевым значением выхода 1
Попробуйте: запустить с параметром --stacktrace, чтобы получить трассировку стека. Запустите с параметром --info или --debug, чтобы получить больше результатов журнала. Запустите с --scan, чтобы получить полную информацию.
Получите дополнительную помощь на странице https://help.gradle.org
BUILD FAILED через 10 секунд Исключение: задача Gradle AssemblyDebug завершилась неудачно с кодом выхода 1 Выход (sigterm)
Можно ли запускать два выпуска одновременно, веб-версию и мобильную версию?
'XhrClientConnection' находится из 'package: grpc / src / client / transport / xhr_transport.dart' ('../../.pub-cache/hosted/pub.dartlang.org/grpc-2.7.0/lib/src /client/transport/xhr_transport.dart '). Попробуйте изменить имя на имя существующего метода или определить метод с именем HttpRequest. HttpRequest createHttpRequest () = ›HttpRequest (); ^^^^^^^^^^^ ../../.pub-cache/hosted/pub.dartlang.org/grpc-2.7.0/lib/src/client/transport/xhr_transport.dart:200: 11: Ошибка: «HttpRequest» не является типом. финальный запрос HttpRequest = createHttpRequest (); ^^^^^^^^^^^ ../../.pub-cache/hosted/pub.dartlang.org/http-0.12.2/lib/src/browser_client.dart:58:34: Ошибка: «Клякса» - это не тип. var blob = xhr.response as Blob ?? Blob ([]); ^^^^ ../../.pub-cache/hosted/pub.dartlang.org/http-0.12.2/lib/src/browser_client.dart:46:15: Ошибка: метод 'HttpRequest' isn ' t определен для класса BrowserClient.