Jelajahi Sumber

[新增]1.新增logger;2.dio 测试case;

石头哥哥 5 tahun lalu
induk
melakukan
a8926ba560
5 mengubah file dengan 210 tambahan dan 12 penghapusan
  1. 5 3
      lib/Bicycle.dart
  2. 44 0
      lib/Spacecraft.dart
  3. 39 0
      lib/dio_test.dart
  4. 114 7
      lib/main.dart
  5. 8 2
      pubspec.yaml

+ 5 - 3
lib/Bicycle.dart

@@ -9,9 +9,11 @@ class Bicycle {
     );
   }
 
-  Map<String, dynamic> toJson() {
-    final Map<String, dynamic> data = new Map<String, dynamic>();
-    data['age'] = this.age;
+  Map toJson() {
+    var data = {
+      'key': 100,
+    };
+    data['age'] = age;
     return data;
   }
 }

+ 44 - 0
lib/Spacecraft.dart

@@ -0,0 +1,44 @@
+class Spacecraft {
+  String name;
+  DateTime launchDate;
+
+  // 构造函数,带有可以直接为成员变量赋值的语法糖。
+  Spacecraft(this.name, this.launchDate) {
+    // 这里可以实现初始化代码。
+  }
+
+  // 命名构造函数,转发到默认构造函数。
+  Spacecraft.unlaunched(String name) : this(name, null);
+
+  // 只读的非 final 的属性
+  // ? ; isnull
+  int get launchYear => launchDate?.year;
+
+  // 方法。
+  void describe() {
+    print('宇宙飞船:$name');
+    if (launchDate != null) {
+      // ignore: omit_local_variable_types
+      int years = DateTime.now().difference(launchDate).inDays ~/ 365;
+      print('发射时间:$launchYear ($years years ago)');
+    } else {
+      print('尚未发射');
+    }
+  }
+}
+
+class Orbiter extends Spacecraft {
+  //属性
+  num altitude;
+
+  Orbiter.Check(this.altitude) : super(null, null);
+
+  Orbiter(String name, DateTime launchDate, this.altitude)
+      : super(name, launchDate);
+
+  //
+  @override
+  String toString() {
+    return 'Orbiter{altitude: $altitude}';
+  }
+}

+ 39 - 0
lib/dio_test.dart

@@ -0,0 +1,39 @@
+//test
+import 'package:dio/dio.dart';
+import 'package:dio_retry/dio_retry.dart';
+import 'package:logging/logging.dart';
+import 'package:pretty_dio_logger/pretty_dio_logger.dart';
+
+//https://pub.flutter-io.cn/packages/retrofit
+void getHttp() async {
+  try {
+    final dio = Dio(); // new ?
+    dio.interceptors.addAll([
+      PrettyDioLogger(
+          requestHeader: true,
+          requestBody: true,
+          responseBody: true,
+          responseHeader: false,
+          error: true,
+          compact: true,
+          maxWidth: 90),
+      RetryInterceptor(
+        dio: dio,
+        logger: Logger('Retry'),
+        options: const RetryOptions(
+          retryInterval: Duration(seconds: 5),
+        ),
+      )
+    ]);
+    // ignore: omit_local_variable_types
+    //await dio.get('http://www.mocky.io/v2/5d7fc75c3300000476f0b557');
+    await dio.post('http://127.0.0.1:28389/s/v3/article/loading',
+        options:
+            RequestOptions(contentType: 'application/x-www-form-urlencoded'),
+        data:
+            'articleType=1&bannerType=1&token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE1ODM5MDYyNjcsImlkIjoiMTE3MTM0NjA3NzY4MTQ1NTEwNCIsIm9yaWdfaWF0IjoxNTgyNjEwMjY3fQ.AtPAvN9p7QMwTs7RwyUu2NDQI4p22AF4rgQtTxFbaNY&uid=1171346077681455104');
+  } on Exception catch (e) {
+    // catch io exception
+    print('$e');
+  } finally {}
+}

+ 114 - 7
lib/main.dart

@@ -1,16 +1,123 @@
+import 'dart:convert';
+
+import 'package:logger/logger.dart' as L;
+import 'package:simple_logger/simple_logger.dart';
 import 'package:xdart_test/Bicycle.dart';
+import 'package:xdart_test/dio_test.dart';
 import 'package:xdart_test/xdart_test.dart' as c_test;
 
-//
+import 'Spacecraft.dart';
+
+String fullName(String firstName, String lastName) => '$firstName$lastName';
+
+//函数命名参数
+//可指定默认值
+String fullNameAlisa({String firstName, String lastName = '磊'}) {
+  return '$firstName $lastName';
+}
+
+void show(int msg) {
+  print('list value:$msg');
+}
+
+//全局日志
+final simpleLogger = SimpleLogger();
+
 void main(List<String> arguments) {
-  for (var arg in arguments) {
-    print(arg);
-  }
+  var tmpArray = [1, 2, 3, 4];
+  tmpArray.forEach(show);
+
+  print('list data:$tmpArray');
+  tmpArray.add(1);
+  var asMap = tmpArray.asMap();
+  print('to map:$asMap');
+
+  print(fullName('chen', 'lei'));
+
+  //调用的时候,指定参数名
+  var tmpName = fullNameAlisa(firstName: '陈');
+
+  print('$tmpName');
+
+  //常量map
+  var mMap = const {
+    1: 'name',
+    'key': '不同类型',
+  };
+  mMap.forEach((k, v) => {print('key:$k,value:$v')});
+
   var bike = Bicycle(age: 100);
-  var info = bike.toString();
-  var json = bike.toJson();
-  print('bike info:$json');
+  var bikeDetail = bike.toJson();
+  print('bike info:$bikeDetail');
   var num = 100;
   print('this is num:$num');
   print('Hello world: ${c_test.calculate()}!');
+
+  /**
+   *
+   */
+  var name = '旅行者一号';
+  var year = 1977;
+  var antennaDiameter = 3.7;
+  var flybyObjects = ['木星', '土星', '天王星', '海王星'];
+  var image = {
+    'tags': ['土星'],
+    'url': '//path/to/saturn.jpg'
+  };
+  image['plants'] = flybyObjects;
+  //=> (胖箭头) 简写语法用于仅包含一条语句的函数,该语法在将匿名函数作为参数传递时非常有用
+  image.forEach((k, v) => {print('$k,$v')});
+
+  while (year <= 1977) {
+    year++;
+  }
+  print('current year:$year');
+
+  var imageJson = json.encode(image);
+  print('image json :$imageJson');
+
+  var spacecraft = Spacecraft.unlaunched('神舟五号');
+  spacecraft.describe();
+
+  var orbiter = Orbiter('神州10号', DateTime.now(), 100.0);
+  orbiter.describe();
+
+  //带名字的构造函数
+  var prettyPrinter = L.PrettyPrinter(
+      methodCount: 3, // number of method calls to be displayed
+      errorMethodCount: 8, // number of method calls if stacktrace is provided
+      lineLength: 120, // width of the output
+      colors: true, // Colorful log messages
+      printEmojis: false, // Print an emoji for each log message
+      printTime: true // Should each log print contain a timestamp
+      );
+  var logger = L.Logger(
+    printer: prettyPrinter,
+  );
+  var encode = json.encode({'key': '大石头', '1': 109});
+  logger.i('this is logger json str:$encode');
+  logger.v('Verbose log');
+  logger.d('Debug log');
+  logger.i('Info log');
+  logger.w('Warning log');
+  logger.e('Error log');
+  logger.wtf('What a terrible failure log');
+
+//  simpleLogger.setLevel(Level.ALL, includeCallerInfo: true);
+//  simpleLogger.levelSuffixes = {
+//    Level.FINEST: '👾 ',
+//    Level.FINER: '👀 ',
+//    Level.FINE: '🎾 ',
+//    Level.CONFIG: '🐶 ',
+//    Level.INFO: '😃',
+//    Level.WARNING: '⚠️ ',
+//    Level.SEVERE: '‼️ ',
+//    Level.SHOUT: '😡 ',
+//  };
+//  simpleLogger.info('this is logger json str:$encode');
+
+  var dateTime = DateTime.now();
+  logger.i('$dateTime');
+
+  getHttp();
 }

+ 8 - 2
pubspec.yaml

@@ -6,9 +6,15 @@ description: A sample command-line application.
 environment:
   sdk: '>=2.7.0 <3.0.0'
 
-#dependencies:
-#  path: ^1.6.0
+dependencies:
+  simple_logger: ^1.6.0+1
+  dio: ^3.0.9
+  pretty_dio_logger: ^1.1.0
+  logger: ^0.8.3
+  dio_retry: ^0.1.9-beta
+  logging: ^0.11.4
 
 dev_dependencies:
   pedantic: ^1.8.0
   test: ^1.6.0
+