一.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
网友评论