Comments (2)
@MilesAdamson so this is an interesting problem and it led me down a rabbit hole of dependencies. I'll summarize as best I can before getting to the solution:
- Dio uses HttpClient which is from
dart:io:HttpClient
. Brick usesHttpClient
frompackage:http/http.dart
- Really, all you need is a BaseClient to pass Dart's type checker. So I checked out
client.dart
which has a useful note about the IOClient. I wasn't aware that there were two different http client implementations or that the http package didn't make its own clients, so uncharted territory here. - According to the docs, composition should be used to take advantage of multiple http clients (commonly annotated as the "inner" client). The Offline Queue implements this pattern to intercept and store requests if you'd like to see a fleshed out example.
IOClient
in the http package allows a composed inner client.
So, the solution, all said and done, is this (I think; untested code):
import 'package:http/io_client.dart';
(dio.httpClientAdapter as DefaultHttpClientAdapter).onHttpClientCreate =
(client) {
final wrappedHttpClient = IOClient(client);
Cache.configure(dio.options.baseUrl, wrappedHttpClient, "database.db");
};
If this was useful, please comment back or submit a PR/Wiki documenting how you integrated Dio with Brick. I'm unfamiliar with dio but it seems to be a popular package and no doubt there's a large user base that would benefit from a brief tutorial.
from brick.
I tried it out yesterday and it does compile, but it doesn't use the Dio level features I was hoping for. For example dio has connect timeouts and the headers already configured in the app but they aren't getting added and the on request hook isn't getting fired.
Thanks for looking into it! But I'm not sure if it's there much point in getting Dio's client referenced in you package. For my purposes it seems easiest to just configure the headers again with brick's plugin and let brick handle the api client.
Examples of the Dio config which doesn't seem to effect requests made inside brick:
dio.options.baseUrl = 'https://${this.subDomain}.website.ca/api';
dio.options.connectTimeout = 10000;
dio.options.receiveTimeout = 30000;
dio.interceptors
.add(InterceptorsWrapper(onRequest: (RequestOptions options) async {
// Do something before request is sent
options.headers["Authorization"] = "Bearer $token";
from brick.
Related Issues (20)
- Need to run build_runner twice for correct schema.g.dart generation HOT 1
- Discussion: cache busting HOT 4
- **Migrating to Brick 3 from Brick 2**
- Casting issue with latest example code. HOT 2
- Migration not created for Sqlite Database when extending Model after upgrade to 3.0 HOT 4
- brick.g.dart is not generated HOT 7
- Example doesn't work and doesn't show server errors HOT 14
- how to prevent an attribute from being generated for the ToRest adapter HOT 1
- Build_runner runs with problems HOT 7
- How to send the child relation to the server? HOT 8
- Error when generating migration HOT 4
- Supabase HOT 15
- Converting object to an encodable object failed when adding a second item to an association HOT 7
- Add http ^1.0.0 support HOT 2
- Is this the same as realm db or couch db lite? HOT 4
- How to use with Firestore. HOT 1
- Subscribe is not listening to remote changes even when policy is set to OfflineFirstGetPolicy.awaitRemote HOT 6
- Feature: Synchronized app indicator HOT 1
- Deleting a document that has already been deleted from the server causes an error HOT 3
- Is this package still being maintain? HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from brick.