Как передать экземпляр Dio во все мои репозитории с помощью flutter_blo c и fluro - PullRequest
0 голосов
/ 19 июня 2020

Мне нужно поделиться своим экземпляром dio 'apiClient' с маршрутизатором и всеми репозиториями.
Мой вопрос заключается в том, как запустить маршрутизатор fluro с помощью apiClient для управления errorInterceptor, когда срок действия моего токена истек, и для выхода текущего пользователя с помощью flutter_blo c.
Ниже часть моего кода.

main() {
  WidgetsFlutterBinding.ensureInitialized();
  BlocSupervisor.delegate = SimpleBlocDelegate();
  AuthenticationBloc authBloc;
  final ApiClient apiClient =
  ApiClient(onRevoke: () => authBloc.add(LoggedOut()));
  final UserRepository userRepository = UserRepository(netUtil: apiClient);
  authBloc = AuthenticationBloc(userRepository: userRepository);

  runApp(
    BlocProvider.value(
      value: authBloc..add(AppStarted()),
      child: App(
        userRepository: userRepository,
        apiClient: apiClient,
      ),
    ),
  );
}

class App extends StatefulWidget {
  final UserRepository _userRepository;
  final ApiClient _apiClient;

  App({Key key, @required UserRepository userRepository, @required apiClient})
      : assert(
  userRepository != null,
  ),
        _userRepository = userRepository,
        assert(apiClient != null),
        _apiClient = apiClient,
        super(key: key);

  @override
  _AppState createState() => _AppState();
}

class _AppState extends State<App> with WidgetsBindingObserver {
  _AppState() {
    final router = Router();
    Routes.configureRoutes(router, _apiClient);
    Application.router = router;
  }
}

class Routes {
  static String root = "/";
  static String view1 = "/view1";
}

static void configureRoutes
(

Router router, ApiClient
apiClient ){
});
router.define(root, handler: rootHandler);
router.define(view1,handler: view1Handler,transitionType: TransitionType.material);
}

var view1Handler =
Handler(handlerFunc: (BuildContext context, Map<String, List> params) {
  return BlocProvider(
    create: (context) => View1FormBloc(),
    child: View1Form(
      user: null,
      isEditing: false,
      onSave: null,
    ),);
});
...