У меня проблемы с запуском приложения в эмуляторе android и на устройстве Google chrome. Мое приложение хорошо работает только в IOS с iPhone. Проблема в моем раскрывающемся списке и вызове моего API, я полагаю. В устройстве iPhone я могу видеть в dropDownButton данные в виде списка API, но не в других устройствах.
Это часть кода, который я использую для связи с моим API:
// Creation of deviceGet object with device data
var deviceGet = new List<Device>();
Future<void> GetDevice() async {
// CHANGED
await GET.url(url1).then((response) {
//END CHANGED
setState(() {
Iterable list = json.decode(response.body);
deviceGet = list.map((model) => Device.fromJson(model)).toList();
});
});
}
Future<String> getCommands(String deviceName1, String commandName1) async {
String deviceName = deviceName1;
String commandName = commandName1;
var url = "http://localhost:48082/api/v1/device/name/" +
deviceName +
"/command/" +
commandName1;
//we have to wait to get the data so we use 'await'
http.Response response = await http.get(
//Uri.encodeFull removes all the dashes or extra characters present in our Uri
Uri.encodeFull(url),
);
//print(response.body);
final body = json.decode(response.body);
//print(body['readings'][0]['value']);
value = body['readings'][0]['value'];
}
Это моя ошибка консоли отладки:
/flutter ( 8084): [ERROR:flutter/lib/ui/ui_dart_state.cc(157)] Unhandled Exception: SocketException: OS Error: Connection refused, errno = 111, address = localhost, port = 43992
E/flutter ( 8084): #0 IOClient.send
package:http/src/io_client.dart:33
E/flutter ( 8084): <asynchronous suspension>
E/flutter ( 8084): #1 BaseClient._sendUnstreamed
package:http/src/base_client.dart:176
E/flutter ( 8084): #2 BaseClient.get
package:http/src/base_client.dart:35
E/flutter ( 8084): #3 get.<anonymous closure>
package:http/http.dart:46
E/flutter ( 8084): #4 _withClient
package:http/http.dart:166
E/flutter ( 8084): #5 get
package:http/http.dart:46
E/flutter ( 8084): #6 GET.url
package:interface_edge/Get.dart:9
E/flutter ( 8084): #7 Chart1State.GetDevice
package:interface_edge/Chart1.dart:47
E/flutter ( 8084): #8 Chart1State.wait
package:interface_edge/Chart1.dart:85
E/flutter ( 8084): #9 Chart1State.initState
package:interface_edge/Chart1.dart:91
E/flutter ( 8084): #10 StatefulElement._firstBuild
package:flutter/…/widgets/framework.dart:4428
E/flutter ( 8084): #11 ComponentElement.mount
package:flutter/…/widgets/framework.dart:4274
E/flutter ( 8084): #12 Element.inflateWidget
package:flutter/…/widgets/framework.dart:3269
E/flutter ( 8084): #13 Element.updateChild
package:flutter/…/widgets/framework.dart:3063
E/flutter ( 8084): #14 ComponentElement.performRebuild
package:flutter/…/widgets/framework.dart:4316
E/flutter ( 8084): #15 Element.rebuild
E/flutter ( 8084): #21 Element.inflateWidget
package:flutter/…/widgets/framework.dart:3269
E/flutter ( 8084): #22 Element.updateChild
package:flutter/…/widgets/framework.dart:3063
E/flutter ( 8084): #23 SingleChildRenderObjectElement.mount
package:flutter/…/widgets/framework.dart:5518
E/flutter ( 8084): #24 Element.inflateWidget
package:flutter/…/widgets/framework.dart:3269
E/flutter ( 8084): #25 Element.updateChild
package:flutter/…/widgets/framework.dart:3063
E/flutter ( 8084): #26 ComponentElement.performRebuild
package:flutter/…/widgets/framework.dart:4316
E/flutter ( 8084): #27 Element.rebuild
package:flutter/…/widgets/framework.dart:4020
E/flutter ( 8084): #28 ComponentElement._firstBuild
package:flutter/…/widgets/framework.dart:4279
E/flutter ( 8084): #29 ComponentElement.mount
package:flutter/…/widgets/framework.dart:4274
E/flutter ( 8084): #30 Element.inflateWidget
package:flutter/…/widgets/framework.dart:3269
E/flutter ( 8084): #31 Element.updateChild
package:flutter/…/widgets/framework.dart:3063
E/flutter ( 8084): #32 ComponentElement.performRebuild
package:flutter/…/widgets/framework.dart:4316
E/flutter ( 8084): #33 Element.rebuild
package:flutter/…/widgets/framework.dart:4020
E/flutter ( 8084): #34 ComponentElement._firstBuild
package:flutter/…/widgets/framework.dart:4279
E/flutter ( 8084): #35 ComponentElement.mount
E/flutter ( 8084): #36 ParentDataElement.mount
package:flutter/…/widgets/framework.dart:4690
E/flutter ( 8084): #37 Element.inflateWidget
package:flutter/…/widgets/framework.dart:3269
E/flutter ( 8084): #38 Element.updateChild
package:flutter/…/widgets/framework.dart:3063
E/flutter ( 8084): #39 ComponentElement.performRebuild
package:flutter/…/widgets/framework.dart:4316
E/flutter ( 8084): #40 Element.rebuild
package:flutter/…/widgets/framework.dart:4020
E/flutter ( 8084): #41 ComponentElement._firstBuild
package:flutter/…/widgets/framework.dart:4279
E/flutter ( 8084): #42 StatefulElement._firstBuild
package:flutter/…/widgets/framework.dart:4454
E/flutter ( 8084): #43 ComponentElement.mount
package:flutter/…/widgets/framework.dart:4274
E/flutter ( 8084): #44 Element.inflateWidget
package:flutter/…/widgets/framework.dart:3269
E/flutter ( 8084): #45 Element.updateChild
package:flutter/…/widgets/framework.dart:3063
E/flutter ( 8084): #46 ComponentElement.performRebuild
package:flutter/…/widgets/framework.dart:4316
E/flutter ( 8084): #47 Element.rebuild
package:flutter/…/widgets/framework.dart:4020
E/flutter ( 8084): #48 ComponentEle
Это мой анализ трепетания:
Analyzing chat...
info • Name types using UpperCamelCase • lib/commandsData.dart:1:7 • camel_case_types
info • Name types using UpperCamelCase • lib/deviceData.dart:1:7 • camel_case_types
info • This function has a return type of 'Future<String>', but doesn't end with a return statement •
lib/getterMarche.dart:25:18 • missing_return
info • Name non-constant identifiers using lowerCamelCase • lib/main.dart:62:16 •
non_constant_identifier_names
info • This function has a return type of 'Future<String>', but doesn't end with a return statement •
lib/main.dart:73:18 • missing_return
info • The value of the local variable 'commandName' isn't used • lib/main.dart:75:12 •
unused_local_variable
info • This function has a return type of 'List<String>', but doesn't end with a return statement •
lib/main.dart:94:16 • missing_return
7 issues found. (ran in 6.5s)
This is the flutter doctor -v
[✓] Flutter (Channel dev, v1.13.5, on Mac OS X 10.15.1 19B88, locale fr-FR)
• Flutter version 1.13.5 at /Users/wassimbenjabria/flutter
• Framework revision 41a911099b (9 weeks ago), 2019-12-19 13:48:02 -0800
• Engine revision 0f90e6546b
• Dart version 2.8.0 (build 2.8.0-dev.0.0 aa6709974d)
[✓] Android toolchain - develop for Android devices (Android SDK version 29.0.2)
• Android SDK at /Users/wassimbenjabria/Library/Android/sdk
• Android NDK location not configured (optional; useful for native profiling support)
• Platform android-29, build-tools 29.0.2
• Java binary at: /Applications/Android Studio.app/Contents/jre/jdk/Contents/Home/bin/java
• Java version OpenJDK Runtime Environment (build 1.8.0_202-release-1483-b49-5587405)
• All Android licenses accepted.
[✓] Xcode - develop for iOS and macOS (Xcode 11.3)
• Xcode at /Applications/Xcode.app/Contents/Developer
• Xcode 11.3, Build version 11C29
• CocoaPods version 1.8.4
[✓] Chrome - develop for the web
• Chrome at /Applications/Google Chrome.app/Contents/MacOS/Google Chrome
[✓] Android Studio (version 3.5)
• Android Studio at /Applications/Android Studio.app/Contents
• Flutter plugin installed
• Dart plugin version 191.8593
• Java version OpenJDK Runtime Environment (build 1.8.0_202-release-1483-b49-5587405)
[✓] VS Code (version 1.42.1)
• VS Code at /Applications/Visual Studio Code.app/Contents
• Flutter extension version 3.8.1
[✓] Connected device (3 available)
• AOSP on IA Emulator • emulator-5554 • android-x86 • Android 9 (API 28) (emulator)
• Chrome • chrome • web-javascript • Google Chrome 79.0.3945.130
• Web Server • web-server • web-javascript • Flutter Tools
• No issues found!
Спасибо за вашу помощь.
Вот часть кода с одним dropDownButton, если вы хотите воспроизвести эту ошибку.
import 'dart:convert';
import 'package:flutter/material.dart';
import 'Get.dart';
import 'Device.dart';
import 'deviceData.dart';
var url1 = "http://localhost:48082/api/v1/device";
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
build(context) {
return MaterialApp(
debugShowCheckedModeBanner: false,
title: 'My App',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: MyListScreen(),
);
}
}
class MyListScreen extends StatefulWidget {
@override
createState() => _MyListScreenState();
}
class _MyListScreenState extends State {
List<deviceData> dataDevice = deviceData.getDevicesData();
List<DropdownMenuItem<deviceData>> listDropDevice;
deviceData deviceSelection;
// Creation of deviceGet object with device data
var deviceGet = new List<Device>();
Future<void> GetDevice() async {
// CHANGED
await GET.url(url1).then((response) {
//END CHANGED
setState(() {
Iterable list = json.decode(response.body);
deviceGet = list.map((model) => Device.fromJson(model)).toList();
});
});
}
Future<void> wait() async {
await GetDevice();
}
initState() {
super.initState();
wait().then((result) {
var nbrDevice = deviceGet.length;
for (int i = 0; i < nbrDevice;) {
dataDevice.add(deviceData(deviceGet[i].name, i));
i = i + 1;
}
listDropDevice = buildDropdownMenuItems(dataDevice);
});
}
List<DropdownMenuItem<deviceData>> buildDropdownMenuItems(List devices) {
List<DropdownMenuItem<deviceData>> items = List();
for (deviceData device1 in devices) {
items.add(
DropdownMenuItem(
value: device1,
child: Text(device1.name),
),
);
}
return items;
}
onChange(deviceData selectionUtilisateur) {
setState(() {
deviceSelection = selectionUtilisateur;
});
}
@override
build(context) {
return Scaffold(
appBar: AppBar(
title: Text("Device List"),
),
body: Column(children: <Widget>[
Center(child: Text("")),
DropdownButton(
value: deviceSelection,
items: listDropDevice,
onChanged: onChange,
hint: Text("Select the device")),
]));
}
}