flutter知识点记载

53 阅读3分钟

1.Flutter 可以通过 热重载(hot reload) 实现快速的开发周期,热重载就是无需重启应用程序就能实时加载修改后的代码,并且不会丢失状态(译者语:如果是一个web开发者,那么可以认为这和webpack的热重载是一样的)。简单的对代码进行更改,然后告诉IDE或命令行工具你需要重新加载(点击reload按钮),你就会在你的设备或模拟器上看到更改。

学习资源:

github.com/crazycodebo…   各种开源库

AnimationController 的vsync需要传入一个TickerProvider,TickerProvider作为一个抽象类有一个方法createTicker。

通过mixin SingleTickerProviderStateMixin里面实现的createTicker可以通过传入一个回调方法获得一个Ticker,Ticker就是一个帧定时器,在执行start之后会一直在指定时间内执行回调

Flutter 模型转换采用两种方式

juejin.im/post/5b5f00…

在线转换

javiercbk.github.io/json_to_dar…

flutter 字符串处理

包含判断::URL.contains('http')

字符串拼接: “”+“”或者‘’ + ‘’

导航头的处理

直线进度条如何设置圆角?

ClipRRect(

            borderRadius: BorderRadius.all(Radius.circular(10)),

            child: LinearProgressIndicator(

              value: 0.7,

              valueColor: new AlwaysStoppedAnimation(Color(0xff00ff00)),

              backgroundColor: Color(0xffD6D6D6),

            ),

          ),

或者使用

List of different types indicator pub.dev/packages/pe…

        child:  Padding(

          padding: EdgeInsets.all(15.0),

          child:  LinearPercentIndicator(

            width: MediaQuery.of(context).size.width - 50,

            animation: true,

            lineHeight: 20.0,

            animationDuration: 2000,

            percent: 0.9,

            linearStrokeCap: LinearStrokeCap.roundAll,

            progressColor: Colors.greenAccent,

          ),

        )

关于AppLifecycleState检测应用程序存在的状态(前后台监听)

enum AppLifecycleState {

 //应用程序是可见的,并且响应用户输入

  resumed,

  /// 应用程序处于非活动状态,没有接收用户输入

  /// On iOS

  /// 在Android上,这对应于一个应用程序或Flutter主机视图运行在前台非活动状态

  /// 当其他活动被关注时,应用程序会过渡到这种状态,比如分屏应用程序、电话呼叫、画中画应用程序、   /// 系统对话框或另一个窗口

  ///处于这种状态的应用程序应该假设它们可能在任何时候pause.

  inactive,

  /// 应用程序当前对用户不可见,不响应用户输入,并在后台运行。当应用程序处于这种状态时,引擎将不  ///会调用Window.onBeginFrame和Window.onDrawFrame回调。

  paused,

  ///应用程序仍然驻留在Flutter引擎上,但是与任何主机视图分离。

///当应用程序处于这种状态时,引擎在没有视图的情况下运行。当引擎第一次初始化时,它可以处于 ///attaching a view 的过程中或在由于 Navigator pop,view被销毁之后。

  detached,

}

代码实现如下

void main() {

  // Enable integration testing with the Flutter Driver extension.

  // See flutter.io/testing/ for more info.

  runApp(new MyApp());

}

class MyApp extends StatefulWidget {

  @override

  _MyAppState createState() => new _MyAppState();

}

class _MyAppState extends State

    with WidgetsBindingObserver{

  @override

  void initState() {

    super.initState();

    WidgetsBinding.instance.addObserver(this);

  }

  @override

  void didChangeAppLifecycleState(AppLifecycleState state) {

    print("--" + state.toString());

    switch (state) {

    

     

     //切换前台时,可回调,初始化时,收不到回调

    case AppLifecycleState.resumed:

        break;

        //切换后台时,inactive,pause先后回调

    case AppLifecycleState.inactive: 

        break;

      case AppLifecycleState.paused: 

        break;

      case AppLifecycleState.detached: 

        break;

    }

  }

  @override

  void dispose() {

    WidgetsBinding.instance.removeObserver(this);

    super.dispose();

  }

flutterToast弹窗

pub.flutter-io.cn/packages/fl…

shared_preferences数据存储,属于轻量级的耗时操作,所以我们也是需要在异步中进行的。

SharedPreferences prefs = await SharedPreferences.getInstance();

prefs.setString(key, value)

SharedPreferences prefs = await SharedPreferences.getInstance();

prefs.remove(key); //删除指定键

prefs.clear();//清空键值对

www.jianshu.com/p/735b5684e…

Flutter Decoration背景设定(边框,圆角,阴影,形状,渐变,背景图像)

blog.csdn.net/chenlove1/a…

blog.csdn.net/u014112893/…

文件和目录操作

www.codenong.com/cs106441389…

动态权限申请

www.jianshu.com/p/a51593817…

www.jianshu.com/p/fa68876fb…