Skip to content
This repository has been archived by the owner on Oct 17, 2024. It is now read-only.

check for http client before calling report methods; #5

Merged
merged 1 commit into from
May 6, 2019
Merged

check for http client before calling report methods; #5

merged 1 commit into from
May 6, 2019

Conversation

gadfly361
Copy link
Contributor

This PR adds a way to handle when _flipperNetworkPlugin is null.


Context: When running my application's main method async, I was running in to an issue where reportRequest method was being called on null. Here is a snippet of the log:

[VERBOSE-2:ui_dart_state.cc(148)] Unhandled Exception: NoSuchMethodError: The method 'reportRequest' was called on null.
Receiver: null
Tried calling: reportRequest(Instance of 'RequestInfo')
#0      Object.noSuchMethod (dart:core/runtime/libobject_patch.dart:50:5)
#1      FlipperHttpClientRequest._reportRequest (package:flutter_flipperkit/plugins/network/flipper_http_client_request.dart:137:27)
<asynchronous suspension>
#2      FlipperHttpClientRequest.close (package:flutter_flipperkit/plugins/network/flipper_http_client_request.dart:56:16)
<asynchronous suspension>
#3      _WebSocketImpl.connect.<anonymous closure> (dart:_http/websocket_impl.dart:1042:22)
#4      _rootRunUnary (dart:async/zone.dart:1132:38)
#5      _CustomZone.runUnary (dart:async/zone.dart:1029:19)
#6      _FutureListener.handleValue (dart:async/future_impl.dart:126:18)
#7      Future._propagateToListeners.handleValueCallback (dart:async/future_impl.dart:639:45)
#8      Future._propagateToListeners (dart:async/future_impl.dart:668<…>
Syncing files to device iPhone Xʀ...

@lijy91
Copy link
Contributor

lijy91 commented May 6, 2019

Hi @gadfly361 , Can you provide the code for your main function?

@lijy91 lijy91 self-assigned this May 6, 2019
@lijy91 lijy91 merged commit 05433b2 into lijy91-archives-repos:master May 6, 2019
@gadfly361
Copy link
Contributor Author

@lijy91

I am observing the exception when using redux_remote_devtools in addition to flutter_flipperkit. I tried to make as minimal of an example as I could, but I left in some redux boilerplate.

The observed exception doesn't happen every time, but I am able to reproduce if I start and stop the application a few times.


add dependencies to pubspec.yaml

  flutter_redux: 0.5.2
  redux_dev_tools: 0.4.0
  redux_remote_devtools: 0.0.6
  flutter_flipperkit: 0.0.10

Download and start removedev-server on port 8000

npm install -g remotedev-server
remotedev --port 8000
import 'package:flutter/material.dart';
import 'package:redux_dev_tools/redux_dev_tools.dart' as rdt;
import 'package:redux_remote_devtools/redux_remote_devtools.dart' as rdtm;
import 'package:flutter_flipperkit/flutter_flipperkit.dart' as ffk;
import 'package:redux/redux.dart' show Store, Reducer;
import 'package:flutter_redux/flutter_redux.dart' show StoreProvider;

const REMOTE_HOST = '<YOUR IP ADDRESS HERE>:8000';

void main() async {
  ffk.FlipperClient flipperClient = ffk.FlipperClient.getDefault();
  flipperClient.addPlugin(ffk.FlipperNetworkPlugin());
  flipperClient.start();

  var remoteDevtools = rdtm.RemoteDevToolsMiddleware(REMOTE_HOST);
  await remoteDevtools.connect();

  final Store<AppState> store =
      createAppStoreWithRemoteDevtools(remoteDevtools);

  runApp(MyApp(
    store: store,
  ));
}

class MyApp extends StatelessWidget {
  final Store<AppState> store;

  MyApp({
    @required this.store,
  });

  @override
  Widget build(BuildContext context) {
    return StoreProvider<AppState>(
      store: store,
      child: MaterialApp(
        title: 'Flutter Demo',
        theme: ThemeData(
          primarySwatch: Colors.blue,
        ),
        home: Scaffold(
          body: Center(
            child: Text("hello world"),
          ),
        ),
      ),
    );
  }
}

class AppState {
  String foo;

  AppState({
    @required this.foo,
  });

  AppState.initialState() : foo = "hello world";
}

Store<AppState> createAppStoreWithRemoteDevtools(
    rdtm.RemoteDevToolsMiddleware remoteDevtools) {
  final Store<AppState> store = rdt.DevToolsStore<AppState>(
    appStateReducer,
    initialState: AppState.initialState(),
    middleware: [remoteDevtools],
  );
  return store;
}

Reducer<AppState> appStateReducer = (AppState state, dynamic action) {
  // not handling action
  return state;
};

Log:

Launching lib/main.dart on iPhone Xʀ in debug mode...
Running Xcode build...
Xcode build done.                                            7.1s
[VERBOSE-2:ui_dart_state.cc(148)] Unhandled Exception: NoSuchMethodError: The method 'reportRequest' was called on null.
Receiver: null
Tried calling: reportRequest(Instance of 'RequestInfo')
#0      Object.noSuchMethod (dart:core/runtime/libobject_patch.dart:50:5)
#1      FlipperHttpClientRequest._reportRequest (package:flutter_flipperkit/plugins/network/flipper_http_client_request.dart:137:27)
<asynchronous suspension>
#2      FlipperHttpClientRequest.close (package:flutter_flipperkit/plugins/network/flipper_http_client_request.dart:56:16)
<asynchronous suspension>
#3      _WebSocketImpl.connect.<anonymous closure> (dart:_http/websocket_impl.dart:1042:22)
#4      _rootRunUnary (dart:async/zone.dart:1132:38)
#5      _CustomZone.runUnary (dart:async/zone.dart:1029:19)
#6      _FutureListener.handleValue (dart:async/future_impl.dart:126:18)
#7      Future._propagateToListeners.handleValueCallback (dart:async/future_impl.dart:639:45)
#8      Future._propagateToListeners (dart:async/future_impl.dart:668<…>
Syncing files to device iPhone Xʀ...

@lijy91
Copy link
Contributor

lijy91 commented May 6, 2019

@gadfly361 Thanks, I will try to find out why the problem occurred.

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants