4

I have some problems when i run my application in an android emulator and with the google chrome device. My application works well only in IOS with an iPhone. The problem is on my drop-down and the call to my api, I suppose. In iPhone device I can see in the dropDownButton the data as a list of the API but not in the others devices.

This is a part of the code that i use to communicate with my 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'];
  }

This is my debug console error:

/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

This is my flutter analyze :

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!

Thanks for your help.

Here is a part of a code with one dropDownButton if you want to reproduce this error.

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")),
        ]));
  }
}

2 Answers 2

1

This seems to be an issue with the Android emulator connecting to a remote server. You can check this Stack Overflow post for a workaround on this issue.

Sign up to request clarification or add additional context in comments.

Comments

0

Try adding

<uses-permission android:name="android.permission.INTERNET"/> 

to your manifest. This solved this issue for me.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.