android+flutter开发笔记(二)
1、flutter项目的入口
至于多个main函数的时候,怎么确定执行的是哪一个?
Android Studio导航条,EditConfigure配置要执行的dart文件里的main函数
void main() {
runApp(new MaterialApp(
title: 'My app', // used by the OS task switcher
home: new MyScaffold(),
));
}
或
void main() => runApp(AppSplashPage());
2、这里用的flutter数据基本类型map
参考:https://www.jianshu.com/p/3d927a7bf020
中文文档:https://book.flutterchina.club/chapter10/json_model.html
//读取响应内容
String result = await response.transform(utf8.decoder).join();
//Map<String,dynamic> userMap = json.decode(result);//错误的写法,这样会获取不到数据
Map userMap = json.decode(result);//正确的写法获取数据
if(userMap.containsKey("data")){
final userInfo =userMap['data'];
setState(() {
resultInfoShowText = userInfo['userName'];
});
return;
}
3、flutter页面的跳转:
中文文档介绍:https://book.flutterchina.club/chapter2/flutter_router.html?h=%E8%B7%AF%E7%94%B1
A页面:
import './main.dart';
//导航到新路由
Navigator.push( context,
new MaterialPageRoute(builder: (context) {
return new MainPage();
})
);
B页面:
import 'package:flutter/material.dart';
class MainPage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'MaterialApp 继承了StatefulWidget,也是个脚手架之类的;提供有好多UI参数设置',
theme: ThemeData(
brightness: Brightness.dark,
primaryColor: const Color(0xFF0a3470),
accentColor: const Color(0xFF0a3470),
),
home: LoginPage(),
);
}
}
Navigator的其他方法:
参考介绍:https://blog.****.net/yuezheyue123/article/details/84315157
1》、保留当前页面跳转到下个页面
Navigator.push( context,
new MaterialPageRoute(builder: (context) {
return new MainPage();
})
);
2》、能够传递回去参数
Navigator.pop('name');
3》、销毁当前页面,并跳转到mainPageHome页面
使用routePath需要提前在MaterialApp中声明下routes:
return MaterialApp(
-----------------------
home: LoginPage(),
routes: <String, WidgetBuilder> {
'/mainPageHome': (_) => new MainPage(),
},
);
这两种:
Navigator.pushReplacementNamed(context, '/mainPageHome');
Navigator.popAndPushNamed(context, '/mainPageHome');
4》、销毁所有页面,并跳转到HomePage页面
Navigator.pushNamedAndRemoveUntil(context, '/mainPageHome',(Route<dynamic> route)=>false);
5》、销毁所有除了mainPageHome的所有页面
Navigator.pushNamedAndRemoveUntil(context, '/mainPageHome',ModalRoute.withName('/mainPageHome'));
6》、销毁栈顶的所有页面
Navigator.popUntil(context,ModalRoute.withName('/mainPageHome'));
等等吧!
4、flutter使用sharedPreferences保存数据:
整理地址:https://blog.****.net/u010326875/article/details/89002468
5、android studio里 启动flutter的第一个页面需要在:
android studio工具栏上配置 :login.dart还是splash.dart
6、App启动逻辑:
1、和原生开发一样,初始一个启动页面splash.dart
判断是否登录,进行页面的跳转
2、登录页面登录成功后,保存登录信息,并且跳转主页面
整理:https://blog.****.net/u010326875/article/details/89011215
7、flutter里面使用ICON这个对象的时候,不支持加载本地的图片,需要借助iconFont生成tts的文件来引用:
参考:https://blog.****.net/HuberCui/article/details/86219572
8、flutter按照android原生的导航栏使用:
appBar: AppBar( //导航栏
title: Text("主页面"),
centerTitle: true,
//导航栏右侧菜单
actions: <Widget>[
IconButton(icon: Icon(Icons.share), onPressed: () {}),
],
//自定义左侧图标
leading: Builder(builder: (context) {
return IconButton(
icon: Icon(Icons.dashboard, color: Colors.white), //自定义图标
onPressed: () {
// 打开抽屉菜单
Scaffold.of(context).openDrawer();
},
);
}),
),
9、flutter页面右上角debug标签去掉:
参考:https://www.jianshu.com/p/2073fcf7562a
class _MyAppState extends State<MyApp> {
// This widget is the root of your application.
@override
Widget build(BuildContext context) {
return new MaterialApp(
title: new Text('My Application'),
debugShowCheckedModeBanner: false, // 设置这一属性即可
theme: new ThemeData(
primarySwatch: Colors.blue,
),
home: new SplashScreen(),
routes: <String, WidgetBuilder> {
'/splashscreen': (BuildContext context) => new SplashScreen(),
'/conditions': (BuildContext context) => new TermsAndConditionsPage(),
},
);
}
}
10、Flutter PageView 禁止滑动
参考:https://blog.****.net/weixin_33830216/article/details/87017476
physics: new NeverScrollableScrollPhysics(),
//主要内容
body: TabBarView(
physics: new NeverScrollableScrollPhysics(),
controller: _tabController,
children: choices.map<Widget>((Choice choice) {
return Container(
child: choice.widgetPage,
);
}).toList(),
)
11、android+flutter实现tabView主框架展示
我的整理实现:https://blog.****.net/u010326875/article/details/89173216
12、Widget 类之间的传值:
MessagePageWidget(tabInfo:this.tabInfo)//调用传参数
//页面加载器,作为主页面
class MessagePageWidget extends StatefulWidget {
//构造函数获取值
const MessagePageWidget({ Key key, this.tabInfo }) : super(key: key);
//声明要获取的值的类型和字段
final Object tabInfo;
//生命周期函数
@override
MessagePageState createState() => MessagePageState(tabInfo);
}
13、State 类之间的传值:
MessagePageState(tabInfo)//调用传参数
class MessagePageState extends State<MessagePageWidget>{
//构造函数获取参数
MessagePageState(Object tabInfo) {
this.tabInfo = tabInfo;
}
//声明要获取的值的类型和字段
Object tabInfo;
@override
void initState() {
super.initState();
}
@override
void dispose() {
super.dispose();
}
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Colors.green,
body: Center(
child: Text(this.tabInfo),
),
);
}
}
14、Flutter有四种运行模式:
Debug、Release、Profile和test,这四种模式在build的时候是完全独立的
个人去了解了一下,并没有什么卵用!自己可以度娘一下