Merge branch 'null-safety-ready' into null-safety

* null-safety-ready:
  add logger tool
  update error page
  update readme file & update example
  update changelog and pubspec
  auto_size_text dep update
  full migrate to sound null safety.
master
小赖 4 years ago
commit e0341c9fb9

@ -1,3 +1,3 @@
{
"dart.flutterSdkPath": "/Users/akufe/fvm/versions/2.0.0"
"dart.flutterSdkPath": "/Users/akufe/fvm/versions/stable"
}

@ -1,5 +1,18 @@
# CHANGELOG
## [1.0.1-nullsafety.1]
* add logger.
## [1.0.0-nullsafety.0]
* migrate to sound null safety.
## [0.1.4]
* add logger.
* update example app.
## [0.1.3]
* listenable value.

@ -20,7 +20,7 @@ LoggerData.addData(data);
## WARNING
*only tested on flutter `1.22.5`,`1.22.6`
* flutter SDK >= 2.0.0
## author

@ -17,7 +17,7 @@ class MyApp extends StatelessWidget {
}
class MyHomePage extends StatefulWidget {
MyHomePage({Key key, this.title}) : super(key: key);
MyHomePage({Key? key, required this.title}) : super(key: key);
final String title;
@override
@ -49,6 +49,11 @@ class _MyHomePageState extends State<MyHomePage> {
appBar: AppBar(
title: Text(widget.title),
),
floatingActionButton: FloatingActionButton(
onPressed: () {
NetTool.dio.get("https://www.baidu.com");
},
),
);
}
}
@ -58,15 +63,15 @@ class NetTool {
static init() {
dio.interceptors.add(InterceptorsWrapper(
onRequest: (options, handler) async {
return options;
return handler.next(options);
},
onResponse: (response, handler) async {
LoggerData.addData(response);
return response;
return handler.next(response);
},
onError: (DioError e, handler) async {
LoggerData.addData(e);
return e;
return handler.next(e);
},
));
}

@ -5,84 +5,84 @@ packages:
dependency: transitive
description:
name: async
url: "https://pub.flutter-io.cn"
url: "https://pub.dartlang.org"
source: hosted
version: "2.5.0"
auto_size_text:
dependency: transitive
description:
name: auto_size_text
url: "https://pub.flutter-io.cn"
url: "https://pub.dartlang.org"
source: hosted
version: "3.0.0-nullsafety.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"
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.0"
version: "1.0.2"
device_info:
dependency: transitive
description:
name: device_info
url: "https://pub.flutter-io.cn"
url: "https://pub.dartlang.org"
source: hosted
version: "2.0.0"
device_info_platform_interface:
dependency: transitive
description:
name: device_info_platform_interface
url: "https://pub.flutter-io.cn"
url: "https://pub.dartlang.org"
source: hosted
version: "2.0.1"
dio:
dependency: "direct main"
description:
name: dio
url: "https://pub.flutter-io.cn"
url: "https://pub.dartlang.org"
source: hosted
version: "4.0.0-prev3"
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"
flutter:
@ -94,7 +94,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:
@ -106,56 +106,63 @@ packages:
dependency: "direct main"
description:
name: get
url: "https://pub.flutter-io.cn"
url: "https://pub.dartlang.org"
source: hosted
version: "3.24.0"
version: "3.26.0"
highlight:
dependency: transitive
description:
name: highlight
url: "https://pub.flutter-io.cn"
url: "https://pub.dartlang.org"
source: hosted
version: "0.7.0"
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"
logger:
dependency: transitive
description:
name: logger
url: "https://pub.dartlang.org"
source: hosted
version: "1.0.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"
package_info:
dependency: transitive
description:
name: package_info
url: "https://pub.flutter-io.cn"
url: "https://pub.dartlang.org"
source: hosted
version: "2.0.0"
path:
dependency: transitive
description:
name: path
url: "https://pub.flutter-io.cn"
url: "https://pub.dartlang.org"
source: hosted
version: "1.8.0"
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"
power_logger:
@ -164,7 +171,7 @@ packages:
path: ".."
relative: true
source: path
version: "0.1.3"
version: "1.0.1-nullsafety.1"
sky_engine:
dependency: transitive
description: flutter
@ -174,56 +181,56 @@ packages:
dependency: transitive
description:
name: source_span
url: "https://pub.flutter-io.cn"
url: "https://pub.dartlang.org"
source: hosted
version: "1.8.0"
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.2.19"
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"
sdks:

@ -18,7 +18,7 @@ publish_to: "none" # Remove this line if you wish to publish to pub.dev
version: 1.0.0+1
environment:
sdk: ">=2.7.0 <3.0.0"
sdk: '>=2.12.0 <3.0.0'
dependencies:
flutter:

@ -5,42 +5,34 @@ import 'package:power_logger/src/view/dio_error_view.dart';
///Dio Error builder
class DioErrorBuilder extends StatefulWidget {
final DioError data;
DioErrorBuilder({Key key, @required this.data}) : super(key: key);
DioErrorBuilder({Key? key, required this.data}) : super(key: key);
@override
_DioErrorBuilderState createState() => _DioErrorBuilderState();
}
class _DioErrorBuilderState extends State<DioErrorBuilder> {
RequestOptions get _request => widget?.data?.requestOptions;
RequestOptions get _request => widget.data.requestOptions;
String renderErrText(DioErrorType type) {
switch (type) {
case DioErrorType.connectTimeout:
return '连接超时';
break;
case DioErrorType.sendTimeout:
return '发送超时';
break;
case DioErrorType.receiveTimeout:
return '接收超时';
break;
case DioErrorType.response:
return 'Serve Side Error';
break;
case DioErrorType.cancel:
return '取消连接';
break;
case DioErrorType.other:
return '未知错误';
break;
}
return '';
}
@override
Widget build(BuildContext context) {
if (widget.data == null) return ListTile(title: Text('NULL Dio Error'));
return Material(
color: Colors.red[100],
child: Column(

@ -5,14 +5,14 @@ import 'package:power_logger/src/view/dio_response_view.dart';
/// Dio Response Builder
class DioResponseBuilder extends StatefulWidget {
final Response data;
DioResponseBuilder({Key key, this.data}) : super(key: key);
DioResponseBuilder({Key? key,required this.data}) : super(key: key);
@override
_DioResponseBuilderState createState() => _DioResponseBuilderState();
}
class _DioResponseBuilderState extends State<DioResponseBuilder> {
RequestOptions get _request => widget?.data?.requestOptions;
RequestOptions? get _request => widget.data.requestOptions;
@override
Widget build(BuildContext context) {
@ -27,7 +27,7 @@ class _DioResponseBuilderState extends State<DioResponseBuilder> {
),
),
title: Text(
_request.path,
_request!.path,
style: TextStyle(
color: Colors.black87,
),
@ -37,7 +37,7 @@ class _DioResponseBuilderState extends State<DioResponseBuilder> {
children: [
Chip(
backgroundColor: Colors.green.withOpacity(0.8),
label: Text(_request.method),
label: Text(_request!.method),
),
],
),

@ -1,10 +1,19 @@
import 'package:flutter/foundation.dart';
import 'package:logger/logger.dart';
import 'package:power_logger/power_logger.dart';
/// logger data storage
class LoggerData {
static int _maxLength = 100;
static bool _markLogger = false;
static bool get markLogger => _markLogger;
static setLogger(bool state) {
_markLogger = state;
}
static Logger _logger = Logger();
/// the real logger data.
static List<dynamic> get data => _listenableData.value;
@ -13,7 +22,7 @@ class LoggerData {
/// set the logger max number.
static setMax(int max) {
_maxLength = max ?? 100;
_maxLength = max;
}
/// add data to logger
@ -28,6 +37,8 @@ class LoggerData {
_listenableData.notify();
}
}
if (_markLogger) _logger.i(data);
}
/// clear all logger
@ -35,12 +46,12 @@ class LoggerData {
/// add data listener
static addListener(Function listener) {
_listenableData.addListener(listener);
_listenableData.addListener(listener as void Function());
}
/// remove data listener
static removeListener(Function listener) {
_listenableData.removeListener(listener);
_listenableData.removeListener(listener as void Function());
}
}

@ -15,20 +15,20 @@ enum ContentType {
/// Dio parse
class DioParser {
Response _response;
DioParser(Response response) {
Response? _response;
DioParser(Response? response) {
_response = response;
}
/// get dio request
RequestOptions get request => _response.requestOptions;
RequestOptions get request => _response!.requestOptions;
/// get dio response
Response get response => _response;
Response? get response => _response;
/// get dio contentType
ContentType get type {
String _ctype = response.headers.map['content-type'].first;
String _ctype = response!.headers.map['content-type']!.first;
switch (_ctype) {
case 'text/plain':
return ContentType.TEXT_PLAIN;

@ -3,7 +3,7 @@ import 'package:flutter/material.dart';
/// UnfocusParser
class UnfocusParser extends StatelessWidget {
final dynamic data;
const UnfocusParser({Key key, @required this.data}) : super(key: key);
const UnfocusParser({Key? key, required this.data}) : super(key: key);
@override
Widget build(BuildContext context) {

@ -26,14 +26,14 @@ class PowerLogger {
///PowerLogger.start(context,debug:true);
///```
static start(BuildContext context, {bool debug = true}) {
WidgetsBinding.instance.addPostFrameCallback((_) {
WidgetsBinding.instance!.addPostFrameCallback((_) {
PowerLogger.debug = debug;
if (debug) _insertToOverlay(context);
});
}
static _insertToOverlay(BuildContext context) {
Overlay.of(context).insert(OverlayEntry(
Overlay.of(context)!.insert(OverlayEntry(
builder: (context) {
return LoggerFab();
},

@ -6,7 +6,7 @@ import 'package:power_logger/src/views/settings_view.dart';
///Logger view
class PowerLoggerView extends StatefulWidget {
PowerLoggerView({Key key}) : super(key: key);
PowerLoggerView({Key? key}) : super(key: key);
@override
_PowerLoggerViewState createState() => _PowerLoggerViewState();
@ -15,7 +15,7 @@ class PowerLoggerView extends StatefulWidget {
class _PowerLoggerViewState extends State<PowerLoggerView> {
PageController _pageController = PageController();
int _currentIndex = 0;
void Function(void Function()) _setState;
void Function(void Function())? _setState;
@override
Widget build(BuildContext context) {
return Theme(
@ -37,7 +37,7 @@ class _PowerLoggerViewState extends State<PowerLoggerView> {
controller: _pageController,
onPageChanged: (index) {
_currentIndex = index;
if (_setState != null) _setState(() {});
if (_setState != null) _setState!(() {});
},
children: [
LoggerView(),

@ -3,12 +3,12 @@ import 'package:flutter/material.dart';
///BoxView
class BoxView extends StatelessWidget {
final Widget title;
final Widget child;
final List<Widget> children;
final Widget? child;
final List<Widget>? children;
const BoxView({
Key key,
Key? key,
this.child,
@required this.title,
required this.title,
this.children,
}) : assert(child != null || children != null),
super(key: key);
@ -17,37 +17,29 @@ class BoxView extends StatelessWidget {
Widget build(BuildContext context) {
return Padding(
padding: EdgeInsets.all(5),
child: Material(
color: Colors.white,
borderRadius: BorderRadius.circular(5),
elevation: 4,
child: Padding(
padding: EdgeInsets.all(5),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
DefaultTextStyle(
style: TextStyle(
fontSize: 20,
color: Colors.black87,
fontWeight: FontWeight.w600,
),
child: title,
),
child == null ? SizedBox() : SizedBox(height: 10),
DefaultTextStyle(
style: TextStyle(
fontSize: 16,
color: Colors.black87,
fontWeight: FontWeight.w400,
),
child: child ?? SizedBox(),
),
children == null ? SizedBox() : SizedBox(height: 10),
...children ?? [],
],
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
DefaultTextStyle(
style: TextStyle(
fontSize: 20,
color: Colors.black87,
fontWeight: FontWeight.w600,
),
child: title,
),
),
child == null ? SizedBox() : SizedBox(height: 10),
DefaultTextStyle(
style: TextStyle(
fontSize: 16,
color: Colors.black87,
fontWeight: FontWeight.w400,
),
child: child ?? SizedBox(),
),
children == null ? SizedBox() : SizedBox(height: 10),
...children ?? [],
],
),
);
}

@ -6,7 +6,7 @@ import 'package:power_logger/src/view/title_view.dart';
class DioErrorView extends StatefulWidget {
final DioError data;
DioErrorView({Key key, @required this.data}) : super(key: key);
DioErrorView({Key? key, required this.data}) : super(key: key);
@override
_DioErrorViewState createState() => _DioErrorViewState();
@ -15,7 +15,7 @@ class DioErrorView extends StatefulWidget {
class _DioErrorViewState extends State<DioErrorView> {
RequestOptions get _request => widget.data.requestOptions;
_buildBaseURL() {
return _request.baseUrl == null || _request.baseUrl.length == 0
return _request.baseUrl.length == 0
? const SizedBox()
: BoxView(
title: Text('BaseURL'),
@ -26,7 +26,7 @@ class _DioErrorViewState extends State<DioErrorView> {
_buildPath() {
return BoxView(
title: const Text('Path'),
child: Text(_request.path),
child: SelectableText(_request.path),
);
}
@ -39,6 +39,13 @@ class _DioErrorViewState extends State<DioErrorView> {
);
}
_buildMessage() {
return BoxView(
title: const Text('Message'),
child: Text(widget.data.message),
);
}
_buildMap(dynamic params) {
if (params is FormData) {
Map<String, dynamic> formData = {};
@ -76,6 +83,7 @@ class _DioErrorViewState extends State<DioErrorView> {
TitleView(title: Text('Request')),
_buildBaseURL(),
_buildPath(),
_buildMessage(),
_buildMap(_request.headers),
_buildMap(_request.queryParameters),
_buildMap(_request.data),

@ -14,8 +14,8 @@ import 'package:power_logger/src/view/title_view.dart';
// enum
class DioResponseView extends StatefulWidget {
final Response data;
DioResponseView({Key key, @required this.data}) : super(key: key);
final Response? data;
DioResponseView({Key? key, required this.data}) : super(key: key);
@override
_DioResponseViewState createState() => _DioResponseViewState();
@ -24,9 +24,9 @@ class DioResponseView extends StatefulWidget {
class _DioResponseViewState extends State<DioResponseView> {
bool _showRawData = false;
RequestOptions get _request => _dioParser.request;
DioParser _dioParser;
late DioParser _dioParser;
_buildBaseURL() {
return _request.baseUrl == null || _request.baseUrl.length == 0
return _request.baseUrl.length == 0
? const SizedBox()
: BoxView(
title: Text('BaseURL'),
@ -46,9 +46,9 @@ class _DioResponseViewState extends State<DioResponseView> {
title: const Text('Status'),
children: [
Chip(
label: Text(widget.data.statusCode.toString()),
label: Text(widget.data!.statusCode.toString()),
),
Text(widget.data.statusMessage),
Text(widget.data!.statusMessage!),
],
);
}
@ -77,7 +77,7 @@ class _DioResponseViewState extends State<DioResponseView> {
return BoxView(
title: Text('Data'),
child: HighlightView(
widget.data.data,
widget.data!.data,
language: _dioParser.highlight,
theme: atomOneLightTheme,
),
@ -85,9 +85,9 @@ class _DioResponseViewState extends State<DioResponseView> {
case ContentType.JSON:
//JSON.
//parse json of String type.
if (widget.data.data is String) {
if (widget.data!.data is String) {
String json = '';
json = prettyJson(jsonDecode(widget.data.data));
json = prettyJson(jsonDecode(widget.data!.data));
return BoxView(
title: Text('Data'),
child: HighlightView(
@ -100,14 +100,13 @@ class _DioResponseViewState extends State<DioResponseView> {
return BoxView(
title: Text('Data'),
child: HighlightView(
prettyJson(widget.data.data),
prettyJson(widget.data!.data),
language: 'json',
theme: atomOneLightTheme,
),
);
break;
case ContentType.IMAGE:
return Text("IMAGE");
return Image.network(_request.baseUrl + _request.path);
case ContentType.AUDIO:
return Text("AUDIO");
case ContentType.VIDEO:
@ -118,7 +117,7 @@ class _DioResponseViewState extends State<DioResponseView> {
return BoxView(
title: Text('Data'),
child: HighlightView(
prettyJson(widget.data.data),
prettyJson(widget.data!.data),
language: 'json',
theme: atomOneLightTheme,
),
@ -128,7 +127,7 @@ class _DioResponseViewState extends State<DioResponseView> {
_buildRawData() {
return BoxView(
title: Text('Raw Data'),
child: SelectableText(widget.data.data.toString()),
child: SelectableText(widget.data!.data.toString()),
);
}
@ -152,10 +151,10 @@ class _DioResponseViewState extends State<DioResponseView> {
return Scaffold(
appBar: AppBar(
backgroundColor: Colors.green[600],
title: Text(widget.data.requestOptions.path),
title: Text(widget.data!.requestOptions.path),
actions: [
Chip(
label: Text(widget.data.requestOptions.method),
label: Text(widget.data!.requestOptions.method),
backgroundColor: Colors.lightGreen,
),
SizedBox(width: 8),
@ -171,7 +170,7 @@ class _DioResponseViewState extends State<DioResponseView> {
_buildMap(_request.queryParameters),
_buildMap(_request.data),
TitleView(title: Text('Response')),
_buildMap(widget.data.headers.map),
_buildMap(widget.data!.headers.map),
_buildStatus(),
SwitchListTile(
value: _showRawData,

@ -1,8 +1,8 @@
import 'package:flutter/material.dart';
class TableView extends StatelessWidget {
final Map map;
const TableView({Key key, @required this.map}) : super(key: key);
final Map? map;
const TableView({Key? key, required this.map}) : super(key: key);
Widget _buildTableTitle(String title) {
return Padding(
padding: EdgeInsets.all(5),

@ -2,7 +2,7 @@ import 'package:flutter/material.dart';
class TitleView extends StatelessWidget {
final Widget title;
const TitleView({Key key, @required this.title}) : super(key: key);
const TitleView({Key? key, required this.title}) : super(key: key);
@override
Widget build(BuildContext context) {

@ -8,7 +8,7 @@ import 'package:flutter/services.dart';
import 'package:package_info/package_info.dart';
class InfoView extends StatefulWidget {
InfoView({Key key}) : super(key: key);
InfoView({Key? key}) : super(key: key);
@override
_InfoViewState createState() => _InfoViewState();
@ -16,9 +16,9 @@ class InfoView extends StatefulWidget {
class _InfoViewState extends State<InfoView>
with AutomaticKeepAliveClientMixin {
PackageInfo packageInfo;
AndroidDeviceInfo androidInfo;
IosDeviceInfo iosInfo;
PackageInfo? packageInfo;
AndroidDeviceInfo? androidInfo;
IosDeviceInfo? iosInfo;
Future getAllInfo() async {
DeviceInfoPlugin deviceInfo = DeviceInfoPlugin();
@ -58,7 +58,7 @@ class _InfoViewState extends State<InfoView>
children: [
Text(title),
AutoSizeText(
subTitle ?? '',
subTitle,
style: TextStyle(fontSize: 26),
maxLines: 2,
),
@ -68,7 +68,7 @@ class _InfoViewState extends State<InfoView>
);
}
_buildTile(String title, String subTitle) {
_buildTile(String title, String? subTitle) {
return DefaultTextStyle(
style: TextStyle(color: Colors.black),
child: ListTile(
@ -93,53 +93,53 @@ class _InfoViewState extends State<InfoView>
_buildAndroidList() {
return SliverList(
delegate: SliverChildListDelegate([
_buildTile('androidId', androidInfo.androidId),
_buildTile('board', androidInfo.board),
_buildTile('bootloader', androidInfo.bootloader),
_buildTile('brand', androidInfo.brand),
_buildTile('device', androidInfo.device),
_buildTile('display', androidInfo.display),
_buildTile('fingerprint', androidInfo.fingerprint),
_buildTile('hardware', androidInfo.hardware),
_buildTile('host', androidInfo.host),
_buildTile('id', androidInfo.id),
_buildTile('manufacturer', androidInfo.manufacturer),
_buildTile('model', androidInfo.model),
_buildTile('product', androidInfo.product),
_buildTile('tags', androidInfo.tags),
_buildTile('type', androidInfo.type),
_buildTile('isPhysicalDevice', androidInfo.isPhysicalDevice.toString()),
_buildTile('androidId', androidInfo!.androidId),
_buildTile('board', androidInfo!.board),
_buildTile('bootloader', androidInfo!.bootloader),
_buildTile('brand', androidInfo!.brand),
_buildTile('device', androidInfo!.device),
_buildTile('display', androidInfo!.display),
_buildTile('fingerprint', androidInfo!.fingerprint),
_buildTile('hardware', androidInfo!.hardware),
_buildTile('host', androidInfo!.host),
_buildTile('id', androidInfo!.id),
_buildTile('manufacturer', androidInfo!.manufacturer),
_buildTile('model', androidInfo!.model),
_buildTile('product', androidInfo!.product),
_buildTile('tags', androidInfo!.tags),
_buildTile('type', androidInfo!.type),
_buildTile('isPhysicalDevice', androidInfo!.isPhysicalDevice.toString()),
_buildTile(
'supported32BitAbis', androidInfo.supported32BitAbis.join(',')),
'supported32BitAbis', androidInfo!.supported32BitAbis.join(',')),
_buildTile(
'supported64BitAbis', androidInfo.supported64BitAbis.join(',')),
_buildTile('supportedAbis', androidInfo.supportedAbis.join(',')),
_buildTile('baseOS', androidInfo.version.baseOS),
_buildTile('codename', androidInfo.version.codename),
_buildTile('incremental', androidInfo.version.incremental),
_buildTile('release', androidInfo.version.release),
_buildTile('securityPatch', androidInfo.version.securityPatch),
_buildTile('previewSdkInt', androidInfo.version.previewSdkInt.toString()),
_buildTile('sdkInt', androidInfo.version.sdkInt.toString()),
_buildTile('systemFeatures', androidInfo.systemFeatures.join('\n')),
'supported64BitAbis', androidInfo!.supported64BitAbis.join(',')),
_buildTile('supportedAbis', androidInfo!.supportedAbis.join(',')),
_buildTile('baseOS', androidInfo!.version.baseOS),
_buildTile('codename', androidInfo!.version.codename),
_buildTile('incremental', androidInfo!.version.incremental),
_buildTile('release', androidInfo!.version.release),
_buildTile('securityPatch', androidInfo!.version.securityPatch),
_buildTile('previewSdkInt', androidInfo!.version.previewSdkInt.toString()),
_buildTile('sdkInt', androidInfo!.version.sdkInt.toString()),
_buildTile('systemFeatures', androidInfo!.systemFeatures.join('\n')),
]));
}
_buildIOSList() {
return SliverList(
delegate: SliverChildListDelegate([
_buildTile('identifierForVendor', iosInfo.identifierForVendor),
_buildTile('localizedModel', iosInfo.localizedModel),
_buildTile('model', iosInfo.model),
_buildTile('name', iosInfo.name),
_buildTile('systemName', iosInfo.systemName),
_buildTile('systemVersion', iosInfo.systemVersion),
_buildTile('isPhysicalDevice', iosInfo.isPhysicalDevice.toString()),
_buildTile('machine', iosInfo.utsname.machine),
_buildTile('nodename', iosInfo.utsname.nodename),
_buildTile('release', iosInfo.utsname.release),
_buildTile('sysname', iosInfo.utsname.sysname),
_buildTile('version', iosInfo.utsname.version),
_buildTile('identifierForVendor', iosInfo!.identifierForVendor),
_buildTile('localizedModel', iosInfo!.localizedModel),
_buildTile('model', iosInfo!.model),
_buildTile('name', iosInfo!.name),
_buildTile('systemName', iosInfo!.systemName),
_buildTile('systemVersion', iosInfo!.systemVersion),
_buildTile('isPhysicalDevice', iosInfo!.isPhysicalDevice.toString()),
_buildTile('machine', iosInfo!.utsname.machine),
_buildTile('nodename', iosInfo!.utsname.nodename),
_buildTile('release', iosInfo!.utsname.release),
_buildTile('sysname', iosInfo!.utsname.sysname),
_buildTile('version', iosInfo!.utsname.version),
]));
}
@ -171,10 +171,10 @@ class _InfoViewState extends State<InfoView>
mainAxisSpacing: 10,
crossAxisSpacing: 10,
children: [
_buildGridItem('appName', packageInfo.appName),
_buildGridItem('buildNumber', packageInfo.buildNumber),
_buildGridItem('packageName', packageInfo.packageName),
_buildGridItem('version', packageInfo.version),
_buildGridItem('appName', packageInfo!.appName),
_buildGridItem('buildNumber', packageInfo!.buildNumber),
_buildGridItem('packageName', packageInfo!.packageName),
_buildGridItem('version', packageInfo!.version),
],
),
),

@ -3,7 +3,7 @@ import 'package:power_logger/src/data/logger_data.dart';
import 'package:power_logger/src/parser/data_parser.dart';
class LoggerView extends StatefulWidget {
LoggerView({Key key}) : super(key: key);
LoggerView({Key? key}) : super(key: key);
@override
_LoggerViewState createState() => _LoggerViewState();

@ -1,7 +1,8 @@
import 'package:flutter/material.dart';
import 'package:power_logger/power_logger.dart';
class SettingsView extends StatefulWidget {
SettingsView({Key key}) : super(key: key);
SettingsView({Key? key}) : super(key: key);
@override
_SettingsViewState createState() => _SettingsViewState();
@ -15,8 +16,11 @@ class _SettingsViewState extends State<SettingsView> {
SwitchListTile(
title: Text('终端日志'),
subtitle: Text(''),
value: false,
onChanged: (state) {},
value: LoggerData.markLogger,
onChanged: (state) {
LoggerData.setLogger(state);
setState(() {});
},
),
],
);

@ -3,7 +3,7 @@ import 'package:flutter/physics.dart';
import 'package:power_logger/src/power_logger_view.dart';
class LoggerFab extends StatefulWidget {
LoggerFab({Key key}) : super(key: key);
LoggerFab({Key? key}) : super(key: key);
@override
_LoggerFabState createState() => _LoggerFabState();
@ -12,9 +12,9 @@ class LoggerFab extends StatefulWidget {
class _LoggerFabState extends State<LoggerFab>
with SingleTickerProviderStateMixin {
bool showSubPage = false;
AnimationController _animationController;
AnimationController? _animationController;
var _dragAlignment = Alignment.center;
Animation<Alignment> _animation;
late Animation<Alignment> _animation;
final _spring =
const SpringDescription(mass: 15, stiffness: 1000, damping: 0.7);
@ -34,7 +34,7 @@ class _LoggerFabState extends State<LoggerFab>
calcAlignment = Alignment(calcAlignment.x, 0.9);
if (_dragAlignment.y <= -0.9)
calcAlignment = Alignment(calcAlignment.x, -0.9);
_animation = _animationController.drive(
_animation = _animationController!.drive(
AlignmentTween(
begin: _dragAlignment,
end: calcAlignment,
@ -44,7 +44,7 @@ class _LoggerFabState extends State<LoggerFab>
final simulation =
SpringSimulation(_spring, 0, 1, _normalizeVelocity(velocity, size));
_animationController.animateWith(simulation);
_animationController!.animateWith(simulation);
}
@override
@ -69,7 +69,7 @@ class _LoggerFabState extends State<LoggerFab>
duration: Duration(milliseconds: 300),
opacity: showSubPage ? 0 : 1,
child: GestureDetector(
onPanStart: (details) => _animationController.stop(canceled: true),
onPanStart: (details) => _animationController!.stop(canceled: true),
onPanUpdate: (details) => setState(() => _dragAlignment += Alignment(
details.delta.dx / (size.width / 2),
details.delta.dy / (size.height / 2),
@ -94,7 +94,7 @@ class _LoggerFabState extends State<LoggerFab>
}
class _FabButton extends StatelessWidget {
const _FabButton({Key key}) : super(key: key);
const _FabButton({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {

@ -5,77 +5,77 @@ packages:
dependency: transitive
description:
name: async
url: "https://pub.flutter-io.cn"
url: "https://pub.dartlang.org"
source: hosted
version: "2.5.0"
auto_size_text:
dependency: "direct main"
description:
name: auto_size_text
url: "https://pub.flutter-io.cn"
url: "https://pub.dartlang.org"
source: hosted
version: "3.0.0-nullsafety.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"
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"
device_info:
dependency: "direct main"
description:
name: device_info
url: "https://pub.flutter-io.cn"
url: "https://pub.dartlang.org"
source: hosted
version: "2.0.0"
device_info_platform_interface:
dependency: transitive
description:
name: device_info_platform_interface
url: "https://pub.flutter-io.cn"
url: "https://pub.dartlang.org"
source: hosted
version: "2.0.1"
dio:
dependency: "direct main"
description:
name: dio
url: "https://pub.flutter-io.cn"
url: "https://pub.dartlang.org"
source: hosted
version: "4.0.0-prev3"
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"
flutter:
@ -87,7 +87,7 @@ packages:
dependency: "direct main"
description:
name: flutter_highlight
url: "https://pub.flutter-io.cn"
url: "https://pub.dartlang.org"
source: hosted
version: "0.7.0"
flutter_test:
@ -99,49 +99,56 @@ packages:
dependency: transitive
description:
name: highlight
url: "https://pub.flutter-io.cn"
url: "https://pub.dartlang.org"
source: hosted
version: "0.7.0"
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"
logger:
dependency: "direct main"
description:
name: logger
url: "https://pub.dartlang.org"
source: hosted
version: "1.0.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"
package_info:
dependency: "direct main"
description:
name: package_info
url: "https://pub.flutter-io.cn"
url: "https://pub.dartlang.org"
source: hosted
version: "2.0.0"
path:
dependency: transitive
description:
name: path
url: "https://pub.flutter-io.cn"
url: "https://pub.dartlang.org"
source: hosted
version: "1.8.0"
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"
sky_engine:
@ -153,56 +160,56 @@ packages:
dependency: transitive
description:
name: source_span
url: "https://pub.flutter-io.cn"
url: "https://pub.dartlang.org"
source: hosted
version: "1.8.0"
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.2.19"
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"
sdks:

@ -1,10 +1,10 @@
name: power_logger
description: A well log tool on flutter, support Dio and custom type data.
version: 0.1.3
version: 1.0.1-nullsafety.1
homepage: https://github.com/laiiihz/power_logger
environment:
sdk: ">=2.7.0 <3.0.0"
sdk: '>=2.12.0 <3.0.0'
flutter: ">=1.17.0"
dependencies:
@ -14,7 +14,8 @@ dependencies:
flutter_highlight: ^0.7.0
device_info: ^2.0.0
package_info: ^2.0.0
auto_size_text: 3.0.0-nullsafety.0
auto_size_text: ^3.0.0-nullsafety.0
logger: ^1.0.0
dev_dependencies:
flutter_test:

Loading…
Cancel
Save