增加 跟随系统主题选项

master
张萌 4 years ago
parent c3b172f0ef
commit 068d931471

@ -5,121 +5,121 @@ packages:
dependency: transitive
description:
name: async
url: "https://pub.flutter-io.cn"
url: "https://pub.dartlang.org"
source: hosted
version: "2.6.1"
version: "2.7.0"
boolean_selector:
dependency: transitive
description:
name: boolean_selector
url: "https://pub.flutter-io.cn"
url: "https://pub.dartlang.org"
source: hosted
version: "2.1.0"
characters:
dependency: transitive
description:
name: characters
url: "https://pub.flutter-io.cn"
url: "https://pub.dartlang.org"
source: hosted
version: "1.1.0"
charcode:
dependency: transitive
description:
name: charcode
url: "https://pub.flutter-io.cn"
url: "https://pub.dartlang.org"
source: hosted
version: "1.2.0"
version: "1.3.1"
clock:
dependency: transitive
description:
name: clock
url: "https://pub.flutter-io.cn"
url: "https://pub.dartlang.org"
source: hosted
version: "1.1.0"
collection:
dependency: transitive
description:
name: collection
url: "https://pub.flutter-io.cn"
url: "https://pub.dartlang.org"
source: hosted
version: "1.15.0"
cupertino_icons:
dependency: "direct main"
description:
name: cupertino_icons
url: "https://pub.flutter-io.cn"
url: "https://pub.dartlang.org"
source: hosted
version: "1.0.2"
version: "1.0.3"
device_info_plus:
dependency: transitive
description:
name: device_info_plus
url: "https://pub.flutter-io.cn"
url: "https://pub.dartlang.org"
source: hosted
version: "2.0.1"
version: "2.1.0"
device_info_plus_linux:
dependency: transitive
description:
name: device_info_plus_linux
url: "https://pub.flutter-io.cn"
url: "https://pub.dartlang.org"
source: hosted
version: "2.0.0"
version: "2.1.0"
device_info_plus_macos:
dependency: transitive
description:
name: device_info_plus_macos
url: "https://pub.flutter-io.cn"
url: "https://pub.dartlang.org"
source: hosted
version: "2.0.0"
version: "2.1.0"
device_info_plus_platform_interface:
dependency: transitive
description:
name: device_info_plus_platform_interface
url: "https://pub.flutter-io.cn"
url: "https://pub.dartlang.org"
source: hosted
version: "2.0.0"
version: "2.1.0"
device_info_plus_web:
dependency: transitive
description:
name: device_info_plus_web
url: "https://pub.flutter-io.cn"
url: "https://pub.dartlang.org"
source: hosted
version: "2.0.0"
version: "2.1.0"
device_info_plus_windows:
dependency: transitive
description:
name: device_info_plus_windows
url: "https://pub.flutter-io.cn"
url: "https://pub.dartlang.org"
source: hosted
version: "2.0.0"
version: "2.1.0"
dio:
dependency: "direct main"
description:
name: dio
url: "https://pub.flutter-io.cn"
url: "https://pub.dartlang.org"
source: hosted
version: "4.0.0"
fake_async:
dependency: transitive
description:
name: fake_async
url: "https://pub.flutter-io.cn"
url: "https://pub.dartlang.org"
source: hosted
version: "1.2.0"
ffi:
dependency: transitive
description:
name: ffi
url: "https://pub.flutter-io.cn"
url: "https://pub.dartlang.org"
source: hosted
version: "1.0.0"
version: "1.1.2"
file:
dependency: transitive
description:
name: file
url: "https://pub.flutter-io.cn"
url: "https://pub.dartlang.org"
source: hosted
version: "6.1.0"
version: "6.1.2"
flutter:
dependency: "direct main"
description: flutter
@ -129,7 +129,7 @@ packages:
dependency: transitive
description:
name: flutter_highlight
url: "https://pub.flutter-io.cn"
url: "https://pub.dartlang.org"
source: hosted
version: "0.7.0"
flutter_test:
@ -146,121 +146,121 @@ packages:
dependency: "direct main"
description:
name: get
url: "https://pub.flutter-io.cn"
url: "https://pub.dartlang.org"
source: hosted
version: "4.1.4"
version: "4.3.8"
highlight:
dependency: transitive
description:
name: highlight
url: "https://pub.flutter-io.cn"
url: "https://pub.dartlang.org"
source: hosted
version: "0.7.0"
http:
dependency: transitive
description:
name: http
url: "https://pub.flutter-io.cn"
url: "https://pub.dartlang.org"
source: hosted
version: "0.13.1"
version: "0.13.3"
http_parser:
dependency: transitive
description:
name: http_parser
url: "https://pub.flutter-io.cn"
url: "https://pub.dartlang.org"
source: hosted
version: "4.0.0"
js:
dependency: transitive
description:
name: js
url: "https://pub.flutter-io.cn"
url: "https://pub.dartlang.org"
source: hosted
version: "0.6.3"
logger:
dependency: transitive
description:
name: logger
url: "https://pub.flutter-io.cn"
url: "https://pub.dartlang.org"
source: hosted
version: "1.0.0"
version: "1.1.0"
matcher:
dependency: transitive
description:
name: matcher
url: "https://pub.flutter-io.cn"
url: "https://pub.dartlang.org"
source: hosted
version: "0.12.10"
meta:
dependency: transitive
description:
name: meta
url: "https://pub.flutter-io.cn"
url: "https://pub.dartlang.org"
source: hosted
version: "1.3.0"
version: "1.4.0"
package_info_plus:
dependency: transitive
description:
name: package_info_plus
url: "https://pub.flutter-io.cn"
url: "https://pub.dartlang.org"
source: hosted
version: "1.0.3"
version: "1.0.6"
package_info_plus_linux:
dependency: transitive
description:
name: package_info_plus_linux
url: "https://pub.flutter-io.cn"
url: "https://pub.dartlang.org"
source: hosted
version: "1.0.0"
version: "1.0.3"
package_info_plus_macos:
dependency: transitive
description:
name: package_info_plus_macos
url: "https://pub.flutter-io.cn"
url: "https://pub.dartlang.org"
source: hosted
version: "1.1.0"
version: "1.1.1"
package_info_plus_platform_interface:
dependency: transitive
description:
name: package_info_plus_platform_interface
url: "https://pub.flutter-io.cn"
url: "https://pub.dartlang.org"
source: hosted
version: "1.0.0"
version: "1.0.2"
package_info_plus_web:
dependency: transitive
description:
name: package_info_plus_web
url: "https://pub.flutter-io.cn"
url: "https://pub.dartlang.org"
source: hosted
version: "1.0.2"
version: "1.0.4"
package_info_plus_windows:
dependency: transitive
description:
name: package_info_plus_windows
url: "https://pub.flutter-io.cn"
url: "https://pub.dartlang.org"
source: hosted
version: "1.0.0"
version: "1.0.3"
path:
dependency: transitive
description:
name: path
url: "https://pub.flutter-io.cn"
url: "https://pub.dartlang.org"
source: hosted
version: "1.8.0"
pedantic:
dependency: transitive
description:
name: pedantic
url: "https://pub.flutter-io.cn"
url: "https://pub.dartlang.org"
source: hosted
version: "1.11.0"
version: "1.11.1"
plugin_platform_interface:
dependency: transitive
description:
name: plugin_platform_interface
url: "https://pub.flutter-io.cn"
url: "https://pub.dartlang.org"
source: hosted
version: "2.0.0"
version: "2.0.1"
power_logger:
dependency: "direct main"
description:
@ -277,65 +277,65 @@ packages:
dependency: transitive
description:
name: source_span
url: "https://pub.flutter-io.cn"
url: "https://pub.dartlang.org"
source: hosted
version: "1.8.1"
stack_trace:
dependency: transitive
description:
name: stack_trace
url: "https://pub.flutter-io.cn"
url: "https://pub.dartlang.org"
source: hosted
version: "1.10.0"
stream_channel:
dependency: transitive
description:
name: stream_channel
url: "https://pub.flutter-io.cn"
url: "https://pub.dartlang.org"
source: hosted
version: "2.1.0"
string_scanner:
dependency: transitive
description:
name: string_scanner
url: "https://pub.flutter-io.cn"
url: "https://pub.dartlang.org"
source: hosted
version: "1.1.0"
term_glyph:
dependency: transitive
description:
name: term_glyph
url: "https://pub.flutter-io.cn"
url: "https://pub.dartlang.org"
source: hosted
version: "1.2.0"
test_api:
dependency: transitive
description:
name: test_api
url: "https://pub.flutter-io.cn"
url: "https://pub.dartlang.org"
source: hosted
version: "0.3.0"
version: "0.4.1"
typed_data:
dependency: transitive
description:
name: typed_data
url: "https://pub.flutter-io.cn"
url: "https://pub.dartlang.org"
source: hosted
version: "1.3.0"
vector_math:
dependency: transitive
description:
name: vector_math
url: "https://pub.flutter-io.cn"
url: "https://pub.dartlang.org"
source: hosted
version: "2.1.0"
win32:
dependency: transitive
description:
name: win32
url: "https://pub.flutter-io.cn"
url: "https://pub.dartlang.org"
source: hosted
version: "2.0.5"
version: "2.2.9"
sdks:
dart: ">=2.12.0 <3.0.0"
dart: ">=2.13.0 <3.0.0"
flutter: ">=1.20.0"

@ -6,6 +6,7 @@ import 'package:power_logger/src/view/dio_error_view.dart';
class DioErrorBuilder extends StatelessWidget {
final DioError data;
final DateTime date;
DioErrorBuilder({Key? key, required this.data, required this.date})
: super(key: key);

@ -1,9 +1,11 @@
import 'package:flutter/material.dart';
import 'package:power_logger/src/theme/custom_theme.dart';
/// UnfocusParser
class UnfocusParser extends StatelessWidget {
final dynamic data;
final String? tag;
const UnfocusParser({Key? key, required this.data, this.tag})
: super(key: key);
@ -17,9 +19,12 @@ class UnfocusParser extends StatelessWidget {
onTap: () => Navigator.push(
context,
MaterialPageRoute(
builder: (context) => Scaffold(
appBar: AppBar(title: Text(data.runtimeType.toString())),
body: Text(data.toString()),
builder: (context) => Theme(
data: CustomTheme.instance.customTheme ?? Theme.of(context),
child: Scaffold(
appBar: AppBar(title: Text(data.runtimeType.toString())),
body: Text(data.toString()),
),
),
),
),

@ -1,5 +1,6 @@
import 'package:flutter/material.dart';
import 'package:power_logger/power_logger.dart';
import 'package:power_logger/src/theme/custom_theme.dart';
import 'package:power_logger/src/views/info_view.dart';
import 'package:power_logger/src/views/logger_view.dart';
import 'package:power_logger/src/views/settings_view.dart';
@ -16,61 +17,67 @@ class _PowerLoggerViewState extends State<PowerLoggerView> {
PageController _pageController = PageController();
int _currentIndex = 0;
void Function(void Function())? _setState;
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Logger View'),
actions: [
IconButton(
icon: Icon(Icons.clear_all_rounded),
onPressed: () {
LoggerData.clear();
setState(() {});
},
),
],
),
body: PageView(
controller: _pageController,
onPageChanged: (index) {
_currentIndex = index;
if (_setState != null) _setState!(() {});
},
children: [
LoggerView(),
InfoView(),
SettingsView(),
],
),
bottomNavigationBar: StatefulBuilder(
builder: (context, kSetState) {
_setState = kSetState;
return BottomNavigationBar(
currentIndex: _currentIndex,
onTap: (index) {
_currentIndex = index;
kSetState(() {});
_pageController.animateToPage(
index,
duration: Duration(milliseconds: 300),
curve: Curves.easeInOutCubic,
);
},
items: [
BottomNavigationBarItem(
icon: Icon(Icons.assessment), label: 'Log'),
BottomNavigationBarItem(
icon: Icon(Icons.perm_device_information),
label: 'Info',
),
BottomNavigationBarItem(
icon: Icon(Icons.settings),
label: 'Settings',
),
],
);
},
return Theme(
data: CustomTheme.instance.customTheme ?? Theme.of(context),
child: Scaffold(
appBar: AppBar(
title: Text('Logger View'),
actions: [
IconButton(
icon: Icon(Icons.clear_all_rounded),
onPressed: () {
LoggerData.clear();
setState(() {});
},
),
],
),
body: PageView(
controller: _pageController,
onPageChanged: (index) {
_currentIndex = index;
if (_setState != null) _setState!(() {});
},
children: [
LoggerView(),
InfoView(),
SettingsView(
stateRefresh: () => setState(() {}),
),
],
),
bottomNavigationBar: StatefulBuilder(
builder: (context, kSetState) {
_setState = kSetState;
return BottomNavigationBar(
currentIndex: _currentIndex,
onTap: (index) {
_currentIndex = index;
kSetState(() {});
_pageController.animateToPage(
index,
duration: Duration(milliseconds: 300),
curve: Curves.easeInOutCubic,
);
},
items: [
BottomNavigationBarItem(
icon: Icon(Icons.assessment), label: 'Log'),
BottomNavigationBarItem(
icon: Icon(Icons.perm_device_information),
label: 'Info',
),
BottomNavigationBarItem(
icon: Icon(Icons.settings),
label: 'Settings',
),
],
);
},
),
),
);
}

@ -0,0 +1,24 @@
import 'package:flutter/material.dart';
class CustomTheme {
factory CustomTheme() => _instance;
static CustomTheme get instance => _instance;
static late CustomTheme _instance = CustomTheme._();
CustomTheme._() {
follow = true;
}
ThemeData? customTheme;
late bool follow;
void setThemeData(bool state) {
follow = state;
if (follow) {
customTheme = null;
} else {
customTheme = ThemeData.light();
}
}
}

@ -1,6 +1,7 @@
import 'package:dio/dio.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:power_logger/src/theme/custom_theme.dart';
import 'package:power_logger/src/view/box_view.dart';
import 'package:power_logger/src/view/table_view.dart';
import 'package:power_logger/src/view/title_view.dart';
@ -66,33 +67,36 @@ class _DioErrorViewState extends State<DioErrorView> {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
backgroundColor: Theme.of(context).brightness == Brightness.light
? Colors.red[100]
: Colors.red[900],
title: Text(widget.data.requestOptions.path),
actions: [
Chip(
label: Text(widget.data.requestOptions.method),
backgroundColor: Colors.lightGreen.withOpacity(0.5),
),
SizedBox(width: 8),
],
),
body: ListView(
padding: EdgeInsets.symmetric(vertical: 20),
children: [
TitleView(title: Text('Request')),
_buildBaseURL(),
_buildPath(),
_buildMessage(),
_buildMap(_request.headers),
_buildMap(_request.queryParameters),
_buildMap(_request.data),
TitleView(title: Text('Response')),
_buildStatus(),
],
return Theme(
data: CustomTheme.instance.customTheme ?? Theme.of(context),
child: Scaffold(
appBar: AppBar(
backgroundColor: Theme.of(context).brightness == Brightness.light
? Colors.red[100]
: Colors.red[900],
title: Text(widget.data.requestOptions.path),
actions: [
Chip(
label: Text(widget.data.requestOptions.method),
backgroundColor: Colors.lightGreen.withOpacity(0.5),
),
SizedBox(width: 8),
],
),
body: ListView(
padding: EdgeInsets.symmetric(vertical: 20),
children: [
TitleView(title: Text('Request')),
_buildBaseURL(),
_buildPath(),
_buildMessage(),
_buildMap(_request.headers),
_buildMap(_request.queryParameters),
_buildMap(_request.data),
TitleView(title: Text('Response')),
_buildStatus(),
],
),
),
);
}

@ -7,6 +7,7 @@ import 'package:flutter_highlight/themes/atom-one-dark.dart';
import 'package:flutter_highlight/themes/atom-one-light.dart';
import 'package:power_logger/external_lib/pretty_json.dart';
import 'package:power_logger/src/parser/dio_parser/dio_parser.dart';
import 'package:power_logger/src/theme/custom_theme.dart';
import 'package:power_logger/src/view/box_view.dart';
import 'package:power_logger/src/view/table_view.dart';
import 'package:power_logger/src/view/title_view.dart';
@ -150,47 +151,50 @@ class _DioResponseViewState extends State<DioResponseView> {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
backgroundColor: Colors.green[600],
title: Text(widget.data!.requestOptions.path),
actions: [
Chip(
label: Text(widget.data!.requestOptions.method),
backgroundColor: Colors.lightGreen,
),
SizedBox(width: 8),
],
),
body: ListView(
padding: EdgeInsets.symmetric(vertical: 20),
children: [
TitleView(title: Text('Request')),
_buildBaseURL(),
_buildPath(),
_buildMap(_request.headers),
_buildMap(_request.queryParameters),
_buildMap(_request.data),
TitleView(title: Text('Response')),
_buildMap(widget.data!.headers.map),
_buildStatus(),
SwitchListTile(
value: _showRawData,
title: Text('RawData'),
onChanged: (state) => setState(() => _showRawData = state),
),
AnimatedCrossFade(
firstChild: _buildRawData(),
secondChild: _buildData(),
crossFadeState: _showRawData
? CrossFadeState.showFirst
: CrossFadeState.showSecond,
duration: Duration(milliseconds: 500),
firstCurve: Curves.easeInOutCubic,
secondCurve: Curves.easeInOutCubic,
sizeCurve: Curves.easeInOutCubic,
),
],
return Theme(
data: CustomTheme.instance.customTheme ?? Theme.of(context),
child: Scaffold(
appBar: AppBar(
backgroundColor: Colors.green[600],
title: Text(widget.data!.requestOptions.path),
actions: [
Chip(
label: Text(widget.data!.requestOptions.method),
backgroundColor: Colors.lightGreen,
),
SizedBox(width: 8),
],
),
body: ListView(
padding: EdgeInsets.symmetric(vertical: 20),
children: [
TitleView(title: Text('Request')),
_buildBaseURL(),
_buildPath(),
_buildMap(_request.headers),
_buildMap(_request.queryParameters),
_buildMap(_request.data),
TitleView(title: Text('Response')),
_buildMap(widget.data!.headers.map),
_buildStatus(),
SwitchListTile(
value: _showRawData,
title: Text('RawData'),
onChanged: (state) => setState(() => _showRawData = state),
),
AnimatedCrossFade(
firstChild: _buildRawData(),
secondChild: _buildData(),
crossFadeState: _showRawData
? CrossFadeState.showFirst
: CrossFadeState.showSecond,
duration: Duration(milliseconds: 500),
firstCurve: Curves.easeInOutCubic,
secondCurve: Curves.easeInOutCubic,
sizeCurve: Curves.easeInOutCubic,
),
],
),
),
);
}

@ -1,7 +1,9 @@
import 'package:flutter/material.dart';
import 'package:power_logger/src/theme/custom_theme.dart';
class FlutterErrorView extends StatefulWidget {
final FlutterErrorDetails details;
FlutterErrorView({Key? key, required this.details}) : super(key: key);
@override
@ -22,35 +24,38 @@ class _FlutterErrorViewState extends State<FlutterErrorView> {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Flutter Error'),
),
body: Column(
children: [
Card(
margin: EdgeInsets.all(10),
child: Padding(
padding: EdgeInsets.all(10),
child: SelectableText(
exceptionValue,
style: TextStyle(
fontSize: 22,
return Theme(
data: CustomTheme.instance.customTheme ?? Theme.of(context),
child: Scaffold(
appBar: AppBar(
title: Text('Flutter Error'),
),
body: Column(
children: [
Card(
margin: EdgeInsets.all(10),
child: Padding(
padding: EdgeInsets.all(10),
child: SelectableText(
exceptionValue,
style: TextStyle(
fontSize: 22,
),
),
),
),
),
Expanded(
child: ListView.separated(
padding: EdgeInsets.all(10),
itemBuilder: (context, index) {
return Text(_stringList[index]);
},
separatorBuilder: (context, index) => SizedBox(height: 5),
itemCount: _stringList.length,
Expanded(
child: ListView.separated(
padding: EdgeInsets.all(10),
itemBuilder: (context, index) {
return Text(_stringList[index]);
},
separatorBuilder: (context, index) => SizedBox(height: 5),
itemCount: _stringList.length,
),
),
),
],
],
),
),
);
}

@ -4,6 +4,7 @@ import 'package:power_logger/src/views/platform_specific/info_tile.dart';
class AndroidView extends StatelessWidget {
final AndroidDeviceInfo? androidInfo;
AndroidView({Key? key, required this.androidInfo}) : super(key: key);
@override

@ -1,8 +1,10 @@
import 'package:flutter/material.dart';
import 'package:power_logger/power_logger.dart';
import 'package:power_logger/src/theme/custom_theme.dart';
class SettingsView extends StatefulWidget {
SettingsView({Key? key}) : super(key: key);
final VoidCallback stateRefresh;
SettingsView({Key? key, required this.stateRefresh}) : super(key: key);
@override
_SettingsViewState createState() => _SettingsViewState();
@ -22,6 +24,15 @@ class _SettingsViewState extends State<SettingsView> {
setState(() {});
},
),
SwitchListTile(
title: Text(CustomTheme.instance.follow ? '跟随系统' : 'Light'),
subtitle: Text(''),
value: CustomTheme.instance.follow,
onChanged: (state) {
CustomTheme.instance.setThemeData(state);
widget.stateRefresh();
},
),
],
);
}

@ -105,7 +105,7 @@ class _FabButton extends StatelessWidget {
Widget build(BuildContext context) {
return Container(
decoration: BoxDecoration(
color: Theme.of(context).accentColor,
color: Theme.of(context).colorScheme.secondary,
borderRadius: BorderRadius.circular(25),
boxShadow: [
BoxShadow(

Loading…
Cancel
Save