精华内容
参与话题
问答
  • flutter 提供了 print(Object object) 来向开发工具的控制 台输出日志信息 print("test"); common_utils 工具类已经将pring 封装为工具类 common_utils: ^1.1.1 使用common_utils工具类中的LogUtil //初始化设置 ...

    重要消息


    目前在西瓜视频上免费刊登 Flutter 系列教程,每日更新,欢迎关注接收提醒

    【x1】点击查看提示

    【x2】各种系列的教程

    【x3】flutter 点滴积累 系列文章


    flutter 提供了 print(Object object) 来向开发工具的控制 台输出日志信息

    print("test");
    

    可以通过插值法直接输出基本数据类型如下 :

    String str ="张三"print("测试输出 $str ");
    
    int count = 40;
    print("测试输出 $count ");
    

    如果是对象类型的,比如要输出对象的一个属性的值,可以这样做:

     User user = new User(name:"张三");
     
     ///输出name
     print("测试输出 ${user.name} ");
    

    common_utils 工具类已经将pring 封装为工具类

    common_utils: ^1.1.1
    

    使用common_utils工具类中的LogUtil

    //初始化设置 LogUtil
    LogUtil.init(true);
    //输出日志
    LogUtil.v("test");
    

    当然 LogUtil 的 init 方法可根据是否是生产环境来配置 true 与 false ,如果是 false ,则不输出日志,这样的一个优化也是应用在发版本后可以节省向控制台输出日志信息的消耗。

    封装源码如下

    class LogUtil {
      static const String _TAG_DEF = "###common_utils###";
    
      static bool debuggable = false; //是否是debug模式,true: log v 不输出.
      static String TAG = _TAG_DEF;
    
      static void init({bool isDebug = false, String tag = _TAG_DEF}) {
        debuggable = isDebug;
        TAG = tag;
      }
    
      static void e(Object object, {String tag}) {
        _printLog(tag, '  e  ', object);
      }
    
      static void v(Object object, {String tag}) {
        if (debuggable) {
          _printLog(tag, '  v  ', object);
        }
      }
    
      static void _printLog(String tag, String stag, Object object) {
        StringBuffer sb = new StringBuffer();
        sb.write((tag == null || tag.isEmpty) ? TAG : tag);
        sb.write(stag);
        sb.write(object);
        print(sb.toString());
      }
    }
    
    

    完毕 每日积累 尽在点滴

    展开全文
  • Flutter Dart print 日志打印

    千次阅读 2019-10-14 15:03:28
    print('我是日志'); String name = '野猿新一'; print('我的名字叫${name}'); 没啦,就这么简单
    print('我是日志');
    String name = '野猿新一';
    print('我的名字叫${name}');

    没啦,就这么简单

    展开全文
  • 主要介绍了Flutter实战之自定义日志打印组件详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
  • Flutter实战之自定义日志打印组件

    千次阅读 2019-03-16 13:14:16
    Flutter中,如果我们需要打印日志,如果不进行自定义,我们只能使用自带的print()或者debugPrint()方法进行打印,但是这两种打印,日志都是默认Info层级的日志,很不友好,所以如果需要日志打印层级分明,我们就...

    前言

    在Flutter中,如果我们需要打印日志,如果不进行自定义,我们只能使用自带的print()或者debugPrint()方法进行打印,但是这两种打印,日志都是默认Info层级的日志,很不友好,所以如果需要日志打印层级分明,我们就需要自定义一个日志打印组件,以下就来介绍如何自定义日志打印组件。

    如何让输出的日志层级分明?

    换种方式想,如果我们能在Flutter代码中,能够调用到原始Android中的Log组件,岂不是就能解决日志打印问题?

    如何进行关联

    在Flutter中,可以使用MethodChannel进行关联,让Flutter调用特定平台(如Android、IOS)的相关API,对于MethodChannel的使用说明和相关介绍,可参考官方文档: 点击查看

    这里简单说明下, Flutter关于特定平台的API,主要是依赖其灵活的消息传递方式来执行的,而并非一套完整的代码生成的。啥意思呢?

    • Flutter可以通过平台通道向其宿主(Android、IOS)发送消息;
    • 其宿主监听平台通道,接收发送过来的消息;
    • 宿主平台通过接收到的消息执行宿主特有的API,然后将响应结果返回给客户端(也就是Flutter部分)更新状态。

    下面用代码简单说明:

    • Step1:创建Flutter平台客户端
    import 'package:flutter/services.dart';
    
    ///一个日志打印工具类
    class LogUtils {
      LogUtils._();
    
      //第一步:设置平台,并进行命名
      static const _platform = const MethodChannel('com.yancy.flutter.plugins/log');
    
      //第二步,设置相关需要传递的方法
      //invokeMethod方法接收的参数,第一个必选参数,设置的是方法的名称;后面的参数为可选的需要传递的参数
      static void i(String tag, String msg) {
        _platform.invokeMethod('logI', {'tag': tag, 'msg': msg});
      }
    
      static void d(String tag, String msg) {
        _platform.invokeMethod('logD', {'tag': tag, 'msg': msg});
      }
    
      static void v(String tag, String msg) {
        _platform.invokeMethod('logV', {'tag': tag, 'msg': msg});
      }
    
      static void w(String tag, String msg) {
        _platform.invokeMethod('logW', {'tag': tag, 'msg': msg});
      }
    
      static void e(String tag, String msg) {
        _platform.invokeMethod('logE', {'tag': tag, 'msg': msg});
      }
    
    }
    复制代码
    • Step2:宿主端建立对应通道接收端
    package com.yancy.flutter.host;
    
    import android.content.Context;
    import android.util.Log;
    import android.widget.Toast;
    
    import io.flutter.plugin.common.BinaryMessenger;
    import io.flutter.plugin.common.MethodChannel;
    
    /**
     * 说明:
     *
     * @author Yancy
     * @date 2019/3/15
     */
    public class CustomFlutterPlugins {
      
        //这里必选要跟Flutter平台名称对应上,否则无法接收消息
        private static final String LOG_CHANNEL_NAME = "com.yancy.flutter.plugins/log";
    
        public static void registerLogger(BinaryMessenger messenger) {
            new MethodChannel(messenger, LOG_CHANNEL_NAME).setMethodCallHandler((methodCall, result) -> {
                String tag = methodCall.argument("tag");
                String msg = methodCall.argument("msg");
                switch (methodCall.method) {
                    case "logV":
                        Log.v(tag, msg);
                        break;
                    case "logD":
                        Log.d(tag, msg);
                        break;
                    case "logI":
                        Log.i(tag, msg);
                        break;
                    case "logW":
                        Log.w(tag, msg);
                        break;
                    case "logE":
                        Log.e(tag, msg);
                        break;
                    default:
                        Log.d(tag, msg);
                        break;
                }
            });
        }
    }
    复制代码

    上面的switch里面的部分即对于flutter中invokeMethod方法中的第一个参数名称。

    • Step3:然后我们在宿主的MainActivity中进行调用注册即可完成通道的建立。
    public class MainActivity extends FlutterActivity {
      @Override
      protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        GeneratedPluginRegistrant.registerWith(this);
    
        CustomFlutterPlugins.registerLogger(getFlutterView());
      }
    }
    复制代码
    • Step4:Flutter中调用LogUtils相关方法,打印日志。
    class MyApp extends StatelessWidget {
    
      @override
      Widget build(BuildContext context) {
        print('print------');
        debugPrint('debugPrint-----');
        LogUtils.v('yancy', 'v-------');
        LogUtils.d('yancy', 'd-------');
        LogUtils.i('yancy', 'i-------');
        LogUtils.w('yancy', 'w-------');
        LogUtils.e('yancy', 'e-------');
    
        return MaterialApp(
          title: 'Flutter Demo',
          theme: ThemeData(
            primarySwatch: Colors.blue,
          ),
    
          home: MyHomePage(title: 'Flutter Demo Home Page'),
        );
      }
    }
    复制代码

    控制台输出的打印结果如下:

    至此,一个简单的日志打印组建就开发完成啦。

    结语

    目前Flutter很多组建需要原始平台API支持,我们完全可以利用好MethodChannel进行相关功能开发,例如Flutter中对于toast提示,目前自带的是SnackBar组件,如果想要使用Android自带的Toast,完全可以使用本文中类似的方法进行封装。

    Tips

    关于Flutter日志打印,评论区说到devtools关于日志的打印,大家也可以看看这里的说明devtools/logging

    转载于:https://juejin.im/post/5c8cf49e51882575eb6ad6ac

    展开全文
  • 在iOS调试Flutter时,默认的日志打印在Xcode的控制台上,而不是在Android Studio的控制台上。 只要在Android Studio的控制台上执行命令:flutter logs就可以Android Studio的控制台上输出日志了。 这样报错时,...

    在iOS调试Flutter时,默认的日志会打印在Xcode的控制台上,而不是在Android Studio的控制台上。

    只要在Android Studio的控制台上执行命令:flutter logs就可以Android Studio的控制台上输出日志了。

    这样报错时,在控制台直接点击报错行,就可以跳转到对应的Flutter代码了。

    展开全文
  • flutter日志工具

    2020-03-18 18:32:27
    以前用惯了as的logcat,现在在接触flutter,但是打印日志窗口真的让我蒙了,啥功能都没有,于是自己写了一个小工具,至少分下类过滤一下 class LogUtils { static const bool debug = true; //显示debug,info,...
  • ios手机升级到13后,flutter调试模式下print会无效,不打印调试日志 解决方法有几种: 等官方更新,或者切到flutter的master分支,方法是执行flutter channel master。这个方法我没试过,也不推荐,业务master分支...
  • 在开发 Flutter 的过程中打印日志是常用的调试方式之一,但 Flutter 内置的日志打印非常简单,下面介绍一个强大的软件包:logger。 Logger 是一款易于使用且可扩展的日志记录器,可打印精美的日志。 受到Android记录...
  • 方便调试,详细的日志打印信息 优化代码性能,避免到处滥new对象,构建全局单例 简化请求步骤,只暴露需要的响应数据,而对错误的响应统一回调 对接口数据的基类封装,简化解析流程 无侵入的,灵活的请求loading配置...
  • Flutter常用命令简介

    2020-05-18 23:23:50
    查看帮助信息 类似命令的使用指南 -h/--help可以作为别的命令的后缀使用 打印详细的命令使用指南 如 flutter run -h 2. flutter create 创建项目 跟上项目的名称 即可创建Flutter项目 3. flutter run 运行项目 ...
  • flutter,打开Logcat视窗

    2020-07-09 20:23:26
    后来发现flutter项目自动打印出来的日志都是没有时间的,神经病一样。后来就想啊,是不是可以调出Logcat呢,还真嫩。 解决方法: 点击 或者找到Project Structure菜单,进入,找到Facets,点击+,, 选择Android...
  • 他们在哪里? 看图说话: ...在initstate中打印一行日志,比如 print("22222222222222222222222222222222222"); 复制代码此时控制台显示的日志为 接下来我们修改日志为 print("111111111111111...
  • 地址:...1、TimelineUtil : 时间轴.(新)2、TimerUtil : 倒计时,定时任务.(新)3、MoneyUtil : 精确转换,元转分,分转元,支持格式输出.(新)4、LogUtil : 简单封装打印日志.(新...
  • Flutter Dio的简易封装和demo

    千次阅读 2019-06-16 17:07:11
    一个简单的flutter dio的封装, 包括: 日志打印, 网络进度, 返回json转bean, get post upload方法的封装, 简易可直接运行的demo Getting Started Clone & Run main.dart 网络相关代码在net目录, 直接复制即可使用...
  • Flutter中的一个小技巧

    2019-05-29 09:32:28
    ///打印日志的类 class Log { Log._(); static void printMsg(Object obj) { assert(() { print(obj.toString()); return true; }()); } } 复制代码系统代码中,有大量的这种形式,因为断言只在调试模式...
  • 如何解决Flutter SDK升级后报错问题

    千次阅读 2020-05-18 11:45:07
    有时在系统推送的Flutter SDK有新版本后,有强迫症的同学可能直接点击了升级。可是升级完后发现问题就来了,...可是我刚刚控制台日志打印显示最新sdk下载完成了呀? 那这篇文章就带领大家来看下,如何解决这类问题。
  • 终于把基本的组件扯完了,真的是多如牛毛。现在让我们来看一下控件如何实现交互 最后会实现一个简单的有点笔触效果的画布,来说明如何使用手势交互。...下面是RaisedButton的简单使用,点击按钮会打印日志 var show =...
  • Flutter应用中,导航栏切换页面后默认情况下会丢失原页面状态,即每次进入页面时都会重新初始化状态,如果在initState中打印日志,会发现每次进入时都会输出,显然这样增加了额外的开销,并且带来了不好的用户体验...
  • #Tips (Flutter)Dart扩展方法的应用 在kotlin中,我们可以通过编写自己的扩展方法,来复用一些常用的方法调用,这样能够快速的进行迭代开发,并且用起来也舒服,在...比如我们要打印日志之类的方法,我们传统的方法就
  • 在命令行输入,gradlew compileDebugSources,可以查看打印报错的信息,这句话可以控制台输出代码报错的日志。 IOException: CreateProcess error=2, 系统找不到指定的文件。 具体报错日志如下所示 ...
  • Flutter应用中,导航栏切换页面后默认情况下会丢失原页面状态,即每次进入页面时都会重新初始化状态,如果在initState中打印日志,会发现每次进入时都会输出,显然这样增加了额外的开销,并且带来了不好的用户体验...

空空如也

1 2
收藏数 30
精华内容 12
关键字:

flutter打印日志