美文网首页
Flutter for Android developers 要

Flutter for Android developers 要

作者: 小源子2016 | 来源:发表于2021-03-22 16:48 被阅读0次

一.View对应什么,如何更新控件,写XML,添加或者移除控件

1.What is the equivalent of a View in Flutter?
2.How do I update widgets?
3.How do I lay out my widgets? Where is my XML layout file?
4.How do I add or remove a component from my layout?
小结:Flutter的视图是声明式的 Widget组成的,所谓布局对应所谓Widget Tree,
通过setState告知框架变化,从而引起渲染的变化

二.动画(How do I animate a widget?)

借助AnimationController和 CurvedAnimation,借助这些功能类完成

import 'package:flutter/material.dart';

void main() {
  runApp(FadeAppTest());
}

class FadeAppTest extends StatelessWidget {
  // This widget is the root of your application.
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Fade Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyFadeTest(title: 'Fade Demo'),
    );
  }
}

class MyFadeTest extends StatefulWidget {
  MyFadeTest({Key key, this.title}) : super(key: key);
  final String title;
  @override
  _MyFadeTest createState() => _MyFadeTest();
}

class _MyFadeTest extends State<MyFadeTest> with TickerProviderStateMixin {
  AnimationController controller;
  CurvedAnimation curve;

  @override
  void initState() {
    super.initState();
    controller = AnimationController(
      duration: const Duration(milliseconds: 2000),
      vsync: this,
    );
    curve = CurvedAnimation(parent: controller, curve: Curves.easeIn);
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: Center(
          child: Container(
              child: FadeTransition(
                  opacity: curve,
                  child: FlutterLogo(
                    size: 100.0,
                  )))),
      floatingActionButton: FloatingActionButton(
        tooltip: 'Fade',
        child: Icon(Icons.brush),
        onPressed: () {
          controller.forward();
        },
      ),
    );
  }
}

Canvas是对应的功能(How do I use a Canvas to draw/paint?)

Flutter has a similar Canvas API as well,

自定义控件 (How do I build custom widgets?)

组合简单控件方式

Intents对应

1.Flutter有路由解决跳转
2.收外部Intent参数还是通过原生,然后传递给Flutter
What is the equivalent of startActivityForResult()?

Map coordinates = await Navigator.of(context).pushNamed('/location');

Navigator.of(context).pop({"lat":43.821757,"long":-79.226392});

Flutter 线程

What is the equivalent of runOnUiThread() in Flutter?

Flutter是单线程,除非你使用隔离Isolates,计算密集型的消耗时间的可以考虑使用Isolates,而await 没有开新的线程,也不会阻塞,也没有隔离,而是相当于Tcp发出消息,并不消耗时间,消息回来到任务队列,Flutter继续处理

生命周期

How do I listen to Android activity lifecycle events?

import 'package:flutter/widgets.dart';

class LifecycleWatcher extends StatefulWidget {
  @override
  _LifecycleWatcherState createState() => _LifecycleWatcherState();
}

class _LifecycleWatcherState extends State<LifecycleWatcher> with WidgetsBindingObserver {
  AppLifecycleState _lastLifecycleState;

  @override
  void initState() {
    super.initState();
    WidgetsBinding.instance.addObserver(this);
  }

  @override
  void dispose() {
    WidgetsBinding.instance.removeObserver(this);
    super.dispose();
  }

  @override
  void didChangeAppLifecycleState(AppLifecycleState state) {
    setState(() {
      _lastLifecycleState = state;
    });
  }

  @override
  Widget build(BuildContext context) {
    if (_lastLifecycleState == null)
      return Text('This widget has not observed any lifecycle changes.', textDirection: TextDirection.ltr);

    return Text('The most recent lifecycle state this widget observed was: $_lastLifecycleState.',
        textDirection: TextDirection.ltr);
  }
}

void main() {
  runApp(Center(child: LifecycleWatcher()));
}

布局方案

What is the equivalent of a LinearLayout?
What is the equivalent of a RelativeLayout?
Row Column Stack或者组合他们实现

What is the equivalent of a ScrollView?
What is the alternative to a ListView in Flutter?

自定义平台插件

How do I build my own custom native integrations?
如何缺少平台特地功能,需要做一些自定义原生整合
参考:https://flutter.dev/docs/development/packages-and-plugins/developing-packages

使用NDK

How do I use the NDK in my Flutter application?
NDK调用需要自定义插件,不能直接调用

GPS/相册/SP/数据库/推送

GPS\ camera\Shared Preferences\ SQLite\ Notifications
都需要插件帮助,Firebase 应该相当于国外的友盟,Firebase Messaging是谷歌系统推送服务,这里我们国内用不上

参考资料:
https://flutter.dev/docs/get-started/flutter-for/android-devs

相关文章

网友评论

      本文标题:Flutter for Android developers 要

      本文链接:https://www.haomeiwen.com/subject/pdozcltx.html