android+flutter开发笔记(二)

fight

 

1、flutter项目的入口

    至于多个main函数的时候,怎么确定执行的是哪一个?
        Android Studio导航条,EditConfigure配置要执行的dart文件里的main函数

sett

    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.csdn.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.csdn.net/u010326875/article/details/89002468

5、android studio里 启动flutter的第一个页面需要在: 

    android studio工具栏上配置 :login.dart还是splash.dart

sett

6、App启动逻辑:

    1、和原生开发一样,初始一个启动页面splash.dart
        
        判断是否登录,进行页面的跳转
        
    2、登录页面登录成功后,保存登录信息,并且跳转主页面

    整理:https://blog.csdn.net/u010326875/article/details/89011215
    
7、flutter里面使用ICON这个对象的时候,不支持加载本地的图片,需要借助iconFont生成tts的文件来引用:

    参考:https://blog.csdn.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.csdn.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.csdn.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的时候是完全独立的
    
    个人去了解了一下,并没有什么卵用!自己可以度娘一下

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

漠天515

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值