# flutter_ctrip
A new Flutter project.
## Getting Started
This project is a starting point for a Flutter application.
A few resources to get you started if this is your first Flutter project:
- [Lab: Write your first Flutter app](https://flutter.dev/docs/get-started/codelab)
- [Cookbook: Useful Flutter samples](https://flutter.dev/docs/cookbook)
For help getting started with Flutter, view our
[online documentation](https://flutter.dev/docs), which offers tutorials,
samples, guidance on mobile development, and a full API reference.
## Dart
> https://dartpad.dev/
> 注意事项
```
1、Dart未初始化的默认类型是 null,JavaScript未初始化的默认类型是 undefined
2、Dart中只有Boolean类型的true才是 true,JavaScript中非null 和 非0 都认为是true
3、?.运算符在左边为null的情况下会阻断右边的调用(相当于js的 &&),??运算符主要作用是在左边的表达式为null时为其设置默认值
```
> 异步编程【Future、Async、Await】
```
JavaScript中Promise是异步编程
Dart中Future是异步编程
JavaScript中 async 后面返回的是一个Promise对象,await 等待的是Promise执行完毕
Dart中 async 后面返回的是一个Future对象,await 等待的是Future执行完毕
```
## Flutter
> 示例及Demo
```
https://github.com/iampawan/FlutterExampleApps
https://github.com/flutter/flutter/tree/master/examples
```
> 基础知识
```
# 创建项目
flutter create project_name
# 运行项目(终端)
flutter run -d '模拟器/真机名称'
```
> Widget
```
Flutter 中所有的视图都是由一个一个的小部件(Widget)组成的
Widget 就是 iOS、Android、RN 中的View
StatelessWidgets适用于当我们描述的用户界面不依赖于对象中的配置信息时。
例如,在Android/iOS中,我们需要用ImageView/UIImageView来显示logo。 logo在运行时不会改变,因此在Flutter中使用StatelessWidget是最好不过了。
如果要根据HTTP网络请求或用户交互后收到的数据动态更改UI,则必须使用StatefulWidget并告诉Flutter框架Widget的状态已更新,以便更新该Widget。
无状态Widget和有状态Widget之间的重要区别在于StatefulWidgets具有一个State对象,该对象存储状态数据并将其传递到树重建中,因此状态不会丢失。
```
> 项目结构和依赖
```
pubspec.yaml
Flutter项目的配置文件,里面包含了项目所需要的依赖,相当于RN中的 package.json 文件
依赖包下载地址
https://pub.dev/flutter
获取项目所需要的依赖
1、在 pubspec.yaml 中的 dependencies 配置好依赖
dependencies:
cupertino_icons: ^0.1.2
http: ^0.12.0+2
2、在项目根目录执行
flutter packages get
```
> Flutter 中JSON格式的转换
```
在线转换网址(json 转成 dart)
https://javiercbk.github.io/json_to_dart/
```
> Flutter 本地存储
```
shared_preferences
```
> Flutter中的列表
```
可展开的列表
ExpansionTile
```
> 和视图相关
```
获取屏幕宽高
MediaQuery.of(context).size.width
MediaQuery.of(context).size.height
```
> 各个组件特性分析
```
# Expanded
能自动适应宽度(里面有个属性 flex:1 就会自动适应剩余的宽度)
# GestureDetector
给组件添加点击事件
```
## Flutter 与 Android混合开发
> 创建Flutter module【和原生应用处于同一级】
```
flutter create -t module flutter_module
环境配置参考:
https://github.com/flutter/flutter/wiki/Add-Flutter-to-existing-apps
```
> Java代码中调用Flutter Module
```
Flutter.createView
FlutterFragment
```
## Flutter 与 iOS混合开发
```
环境配置参考:
https://github.com/flutter/flutter/wiki/Add-Flutter-to-existing-apps
```
> OC代码中调用Flutter代码
```
方式1:FlutterViewController
方式2:FlutterEngine
```
> 混合开发中开启热重载
```
flutter attach -d <deviceId>
```
> Flutter与iOS混合开发中调试Dart代码
```
1、关闭模拟器正在运行的App
2、在 Android Studio 中通过图形化工具执行 Flutter Attach
3、在 Dart 代码中打断点
4、在模拟器中启动之前关闭的App
```
## Flutter 与 Native 通信机制
> Flutter与Native通信【Channel】
```
# BasicMessageChannel
持续的双向通信,Flutter可以给Native发消息并且接收消息,Native也可以给Flutter发消息并且接收消息
# MethodChannel
Flutter调用Native的方法,比如Flutter调用Native的相机,实现拍照功能
# EventChannel
非持续性的双向通信,例如Flutter中监听Native中手机电量、网络状态的变化
```
> 注意点
```
Flutter中消息的传递完全是异步的
```
> Flutter 与 iOS通信
> BasicMessageChannel
```
# iOS端
sendMessageHandler
接收Flutter端发来的消息
sendMessage
发送消息给Flutter端
# Flutter端
sendMessageHandler
接收Native端发来的消息
Future<T> send
传递数据给Native端,可以通过Future获取到Native端返回的结果
```
> MethodChannel
```
# iOS端
setMethodCallHandler
接收处理Flutter传递过来的函数
# Flutter端
Future<T> invokeMethod
Flutter调用Native的方法
```
> EventChannel
```
# iOS端
setStreamHandler
# Flutter端
Stream<dynamic> receiveBroadcastStream([dynamic arguments])
dynamic arguments 监听事件时向Native传递的数据
```
没有合适的资源?快使用搜索试试~ 我知道了~
Flutter开发的移动App.zip
共84个文件
dart:28个
png:23个
xml:5个
需积分: 1 0 下载量 40 浏览量
2024-03-18
20:32:48
上传
评论
收藏 103KB ZIP 举报
温馨提示
Flutter开发的移动App.zip
资源推荐
资源详情
资源评论
收起资源包目录
Flutter开发的移动App.zip (84个子文件)
flutter_ctrip-master
lib
pages
travel_page.dart 379B
home_page.dart 7KB
my_page.dart 359B
search_page.dart 756B
animation2.dart 2KB
listview_demo2.dart 2KB
imageDemo.dart 728B
listview_demo.dart 2KB
heroAnimation.dart 2KB
main.dart 376B
navigator
tab_navigator.dart 2KB
main2.dart 5KB
dao
home_dao.dart 612B
widgets
grid_nav.dart 5KB
sub_nav.dart 2KB
local_nav.dart 2KB
sales_box.dart 4KB
loading_container.dart 639B
search_bar.dart 6KB
webview.dart 4KB
model
common_model.dart 483B
grid_nav_model.dart 1KB
sales_box_model.dart 984B
config_model.dart 285B
home_model.dart 1KB
animation3.dart 2KB
animation1.dart 2KB
pubspec.lock 6KB
LICENSE 1KB
android
gradle.properties 30B
gradle
wrapper
gradle-wrapper.properties 234B
app
src
profile
AndroidManifest.xml 333B
debug
AndroidManifest.xml 333B
main
res
mipmap-xxhdpi
ic_launcher.png 1KB
mipmap-hdpi
ic_launcher.png 544B
mipmap-mdpi
ic_launcher.png 442B
mipmap-xxxhdpi
ic_launcher.png 1KB
mipmap-xhdpi
ic_launcher.png 721B
values
styles.xml 361B
drawable
launch_background.xml 434B
kotlin
com
example
flutter_ctrip
MainActivity.kt 341B
AndroidManifest.xml 2KB
build.gradle 2KB
build.gradle 582B
settings.gradle 484B
.metadata 305B
test
widget_test.dart 1KB
ios
Runner.xcworkspace
xcshareddata
IDEWorkspaceChecks.plist 238B
contents.xcworkspacedata 224B
Flutter
AppFrameworkInfo.plist 794B
Debug.xcconfig 106B
Release.xcconfig 108B
Runner
Base.lproj
Main.storyboard 2KB
LaunchScreen.storyboard 2KB
Runner-Bridging-Header.h 37B
AppDelegate.swift 404B
Info.plist 1KB
Assets.xcassets
LaunchImage.imageset
AppIcon.appiconset
Runner.xcodeproj
xcshareddata
xcschemes
Runner.xcscheme 3KB
project.pbxproj 24KB
project.xcworkspace
contents.xcworkspacedata 152B
.gitignore 1KB
README.md 5KB
pubspec.yaml 3KB
共 84 条
- 1
资源评论
日刷百题
- 粉丝: 5320
- 资源: 951
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功