E / flutter (8084): [ОШИБКА: flutter / lib / ui / ui_dart_state. cc (157)] Необработанное исключение: SocketException: ошибка ОС: соединение отказано - PullRequest
1 голос
/ 24 февраля 2020

У меня проблемы с запуском приложения в эмуляторе 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")),
        ]));
  }
}
...