zoukankan      html  css  js  c++  java
  • flutter-保持页面的效果

    with是dart的关键字,意思是混入的意思,就是说可以将一个或者多个类的功能添加到自己的类无需继承这些类, 避免多重继承导致的问题。

    TabBar Widget的使用

    TabBar是切换组件,它需要设置两个属性。

    • controller: 控制器,后边跟的多是TabController组件。
    • tabs:具体切换项,是一个数组,里边放的也是Tab Widget。
    bottom:TabBar(
      controller: _controller,
      tabs:[
        Tab(icon:Icon(Icons.directions_car)),
        Tab(icon:Icon(Icons.directions_transit)),
        Tab(icon:Icon(Icons.directions_bike)),
      ],
    )

    基本页面布局

    import 'package:flutter/material.dart';
    import 'keep_alive_demo.dart';
    
    void  main ()=>runApp(MyApp());
    
    class MyApp extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        return MaterialApp(
          title:'Flutter Demo',
          theme: ThemeData(
            primarySwatch: Colors.lightBlue
          ),
          home:KeepAlive()
        );
      }
    }
    
    class KeepAlive extends StatefulWidget {
      @override
      _KeepAliveState createState() => _KeepAliveState();
    }
    
    //with是关键字 解决多重继承 
    class _KeepAliveState extends State<KeepAlive> with SingleTickerProviderStateMixin {
      // 混入1个变量
      TabController _controller;
    
      // 因为切换要保持状态不变  所以要重写下销毁方法和init方法  
      @override
      void initState(){
        super.initState();
        _controller = TabController(length: 3,vsync: this);
      }
    
      @override
      void dispose(){//重写被释放的方法,只释放TabController
        _controller.dispose();
        super.dispose();
      }
    
      @override
      Widget build(BuildContext context) {
        return Scaffold(
          appBar: AppBar(
            title: Text('keepAliveDemo'),
            bottom: TabBar(
              controller: _controller,
              tabs: <Widget>[
                Tab(icon:Icon(Icons.directions)),
                Tab(icon:Icon(Icons.directions_bike)),
                Tab(icon:Icon(Icons.directions_boat)),
              ],
            ),
          ),
          body: TabBarView(
            controller: _controller,
            children: <Widget>[
              MyHomePage(),
              MyHomePage(),
              MyHomePage(),
            ],
          ),
        );
      }
    }
    import 'package:flutter/material.dart';
    
    class MyHomePage extends StatefulWidget {
      @override
      _MyHomePageState createState() => _MyHomePageState();
    }
    
    //混入AutomaticKeepAliveClientMixin,这是保持状态的关键
    //然后重写wantKeppAlive 的值为true。
    class _MyHomePageState extends State<MyHomePage> with AutomaticKeepAliveClientMixin {
      
      int _count=0;
    
      @override
      bool get wantKeepAlive => true; //这是一个方法 默认值为false 为ture ,就是可以有记忆功能了
    
      void _incremenetCounter(){
        setState(() {
          _count++;
        });
      }
    
      @override
      Widget build(BuildContext context) {
        return Scaffold(
          body: Center(
            child: Column(
              mainAxisAlignment: MainAxisAlignment.center,
              children: <Widget>[
                Text('点下加1'),
                Text("$_count",
                  style: Theme.of(context).textTheme.display1,
                ),
              ],
            ),
          ),
          floatingActionButton: FloatingActionButton(
            onPressed: (){
              _incremenetCounter();
            },
            tooltip: "increment",
            child: Icon(
              Icons.add,
              size: 20.0,
              color: Colors.white,
            ),
          ),
        );
      }
    }

     

  • 相关阅读:
    HDOJ 5414 CRB and String 模拟
    Python标准库:内置函数all(iterable)
    Can not find a java.io.InputStream with the name [downloadFile] in the invocation stack.
    关于TabLayout+ViewPager组合实现多页面滑动
    互联网产品经理应该具备的技能(需求篇)
    【Android】利用自己定义View的重绘实现拖动移动,获取组件的尺寸
    mybatis自己主动生成mapper,dao,映射文件
    Java解析注解
    如日中天的Uber到底是用什么开发语言做到的?
    [Swift]LeetCode1002. 查找常用字符 | Find Common Characters
  • 原文地址:https://www.cnblogs.com/lxz-blogs/p/13234917.html
Copyright © 2011-2022 走看看