Skip to content

Commit

Permalink
feat: added support for MacOS
Browse files Browse the repository at this point in the history
  • Loading branch information
jhomlala committed Nov 12, 2023
1 parent 0887954 commit 08d4881
Show file tree
Hide file tree
Showing 12 changed files with 104 additions and 22 deletions.
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
* [BREAKING_CHANGE] Removed `darkTheme` parameter. Alice will now automatically detect the color scheme.
* [BREAKING_CHANGE] Alice will now return chopper interceptor instance instead of list with that interceptor.
* Added `isInspectorOpened` method to check inspector state.
* Added support for macOS.
* Fixed issue with the same http call not properly handled with chopper. Alice will add "alice_token" to the headers of the request to identify given http call.
* Fixed lints.
* Updated dependencies.
Expand Down
24 changes: 22 additions & 2 deletions example/.metadata
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,27 @@
# This file should be version controlled and should not be manually edited.

version:
revision: 8661d8aecd626f7f57ccbcb735553edc05a2e713
channel: stable
revision: "d211f42860350d914a5ad8102f9ec32764dc6d06"
channel: "stable"

project_type: app

# Tracks metadata for the flutter migrate command
migration:
platforms:
- platform: root
create_revision: d211f42860350d914a5ad8102f9ec32764dc6d06
base_revision: d211f42860350d914a5ad8102f9ec32764dc6d06
- platform: macos
create_revision: d211f42860350d914a5ad8102f9ec32764dc6d06
base_revision: d211f42860350d914a5ad8102f9ec32764dc6d06

# User provided section

# List of Local paths (relative to this file) that should be
# ignored by the migrate tool.
#
# Files that are not part of the templates will be ignored by default.
unmanaged_files:
- 'lib/main.dart'
- 'ios/Runner.xcodeproj/project.pbxproj'
4 changes: 4 additions & 0 deletions example/lib/main.dart
Original file line number Diff line number Diff line change
Expand Up @@ -75,21 +75,25 @@ class _MyAppState extends State<MyApp> {
onPressed: _runDioRequests,
style: _buttonStyle,
),
const SizedBox(height: 8),
ElevatedButton(
child: Text('Run http/http HTTP Requests'),
onPressed: _runHttpHttpRequests,
style: _buttonStyle,
),
const SizedBox(height: 8),
ElevatedButton(
child: Text('Run HttpClient Requests'),
onPressed: _runHttpHttpClientRequests,
style: _buttonStyle,
),
const SizedBox(height: 8),
ElevatedButton(
child: Text('Run Chopper HTTP Requests'),
onPressed: _runChopperHttpRequests,
style: _buttonStyle,
),
const SizedBox(height: 8),
ElevatedButton(
child: Text('Log example data'),
onPressed: _logExampleData,
Expand Down
2 changes: 2 additions & 0 deletions lib/core/alice_core.dart
Original file line number Diff line number Diff line change
Expand Up @@ -87,9 +87,11 @@ class AliceCore {
final initializationSettingsAndroid =
AndroidInitializationSettings(notificationIcon);
const initializationSettingsIOS = DarwinInitializationSettings();
const initializationSettingsMacOS = DarwinInitializationSettings();
final initializationSettings = InitializationSettings(
android: initializationSettingsAndroid,
iOS: initializationSettingsIOS,
macOS: initializationSettingsMacOS,
);
_flutterLocalNotificationsPlugin.initialize(
initializationSettings,
Expand Down
28 changes: 23 additions & 5 deletions lib/helper/alice_save_helper.dart
Original file line number Diff line number Diff line change
Expand Up @@ -24,17 +24,32 @@ class AliceSaveHelper {
_checkPermissions(context, calls);
}

static Future<bool> _getPermissionStatus() async {
if (Platform.isAndroid || Platform.isIOS) {
return Permission.storage.status.isGranted;
} else {
return true;
}
}

static Future<bool> _requestPermission() async {
if (Platform.isAndroid || Platform.isIOS) {
return Permission.storage.request().isGranted;
} else {
return true;
}
}

static Future<void> _checkPermissions(
BuildContext context,
List<AliceHttpCall> calls,
) async {
final status = await Permission.storage.status;
if (status.isGranted) {
if (await _getPermissionStatus()) {
await _saveToFile(context, calls);
} else {
final status = await Permission.storage.request();
final status = await _requestPermission();

if (status.isGranted) {
if (status) {
await _saveToFile(context, calls);
} else {
AliceAlertHelper.showAlert(
Expand All @@ -60,12 +75,15 @@ class AliceSaveHelper {
return '';
}
final isAndroid = Platform.isAndroid;
final isIOS = Platform.isIOS;

Directory? externalDir;
if (isAndroid) {
externalDir = await getExternalStorageDirectory();
} else {
} else if (isIOS) {
externalDir = await getApplicationDocumentsDirectory();
} else {
externalDir = await getApplicationCacheDirectory();
}
if (externalDir != null) {
final fileName =
Expand Down
15 changes: 10 additions & 5 deletions lib/ui/page/alice_calls_list_screen.dart
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import 'package:alice/ui/widget/alice_call_list_item_widget.dart';
import 'package:alice/ui/widget/alice_log_list_widget.dart';
import 'package:alice/ui/widget/alice_raw_log_list_widger.dart';
import 'package:alice/utils/alice_constants.dart';
import 'package:alice/utils/alice_scroll_behavior.dart';
import 'package:alice/utils/alice_theme.dart';
import 'package:flutter/material.dart';

Expand Down Expand Up @@ -407,11 +408,15 @@ class _AliceCallsListScreenState extends State<AliceCallsListScreen>
case null:
}

return ListView.builder(
itemCount: callsSorted.length,
itemBuilder: (context, index) {
return AliceCallListItemWidget(callsSorted[index], _onListItemClicked);
},
return ScrollConfiguration(
behavior: AliceScrollBehavior(),
child: ListView.builder(
itemCount: callsSorted.length,
itemBuilder: (context, index) {
return AliceCallListItemWidget(
callsSorted[index], _onListItemClicked);
},
),
);
}

Expand Down
6 changes: 5 additions & 1 deletion lib/ui/widget/alice_call_error_widget.dart
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import 'package:alice/model/alice_http_call.dart';
import 'package:alice/ui/widget/alice_base_call_details_widget.dart';
import 'package:alice/utils/alice_scroll_behavior.dart';
import 'package:flutter/material.dart';

class AliceCallErrorWidget extends StatefulWidget {
Expand Down Expand Up @@ -30,7 +31,10 @@ class _AliceCallErrorWidgetState

return Container(
padding: const EdgeInsets.all(6),
child: ListView(children: rows),
child: ScrollConfiguration(
behavior: AliceScrollBehavior(),
child: ListView(children: rows),
),
);
} else {
return const Center(child: Text('Nothing to display here'));
Expand Down
6 changes: 5 additions & 1 deletion lib/ui/widget/alice_call_overview_widget.dart
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import 'package:alice/model/alice_http_call.dart';
import 'package:alice/ui/widget/alice_base_call_details_widget.dart';
import 'package:alice/utils/alice_scroll_behavior.dart';
import 'package:flutter/material.dart';

class AliceCallOverviewWidget extends StatefulWidget {
Expand Down Expand Up @@ -34,7 +35,10 @@ class _AliceCallOverviewWidget

return Container(
padding: const EdgeInsets.all(6),
child: ListView(children: rows),
child: ScrollConfiguration(
behavior: AliceScrollBehavior(),
child: ListView(children: rows),
),
);
}
}
6 changes: 5 additions & 1 deletion lib/ui/widget/alice_call_request_widget.dart
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import 'package:alice/model/alice_http_call.dart';
import 'package:alice/ui/widget/alice_base_call_details_widget.dart';
import 'package:alice/utils/alice_scroll_behavior.dart';
import 'package:flutter/material.dart';

class AliceCallRequestWidget extends StatefulWidget {
Expand Down Expand Up @@ -76,7 +77,10 @@ class _AliceCallRequestWidget

return Container(
padding: const EdgeInsets.all(6),
child: ListView(children: rows),
child: ScrollConfiguration(
behavior: AliceScrollBehavior(),
child: ListView(children: rows),
),
);
}
}
6 changes: 5 additions & 1 deletion lib/ui/widget/alice_call_response_widget.dart
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import 'package:alice/model/alice_http_call.dart';
import 'package:alice/ui/widget/alice_base_call_details_widget.dart';
import 'package:alice/utils/alice_constants.dart';
import 'package:alice/utils/alice_scroll_behavior.dart';
import 'package:flutter/material.dart';
import 'package:url_launcher/url_launcher.dart';

Expand Down Expand Up @@ -40,7 +41,10 @@ class _AliceCallResponseWidgetState

return Container(
padding: const EdgeInsets.all(6),
child: ListView(children: rows),
child: ScrollConfiguration(
behavior: AliceScrollBehavior(),
child: ListView(children: rows),
),
);
} else {
return const Center(
Expand Down
16 changes: 10 additions & 6 deletions lib/ui/widget/alice_log_list_widget.dart
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ import 'dart:convert';
import 'dart:ui';

import 'package:alice/model/alice_log.dart';
import 'package:alice/utils/alice_scroll_behavior.dart';
import 'package:alice/utils/alice_theme.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
Expand Down Expand Up @@ -36,12 +37,15 @@ class _AliceLogListWidgetState extends State<AliceLogListWidget> {
}
final filteredLogs =
logs.where((it) => it.level.index >= _minLevel.index).toList();
return ListView.builder(
controller: widget.scrollController,
shrinkWrap: true,
padding: const EdgeInsets.symmetric(vertical: 8),
itemCount: filteredLogs.length,
itemBuilder: (context, i) => AliceLogEntryWidget(filteredLogs[i]),
return ScrollConfiguration(
behavior: AliceScrollBehavior(),
child: ListView.builder(
controller: widget.scrollController,
shrinkWrap: true,
padding: const EdgeInsets.symmetric(vertical: 8),
itemCount: filteredLogs.length,
itemBuilder: (context, i) => AliceLogEntryWidget(filteredLogs[i]),
),
);
},
);
Expand Down
12 changes: 12 additions & 0 deletions lib/utils/alice_scroll_behavior.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
import 'dart:ui';

import 'package:flutter/material.dart';

class AliceScrollBehavior extends MaterialScrollBehavior {
@override
Set<PointerDeviceKind> get dragDevices => {
PointerDeviceKind.touch,
PointerDeviceKind.mouse,
// etc.
};
}

0 comments on commit 08d4881

Please sign in to comment.