• 20个Flutter实例视频教程-第08节: 保持页面状态


    博客地址:

    https://jspang.com/post/flutterDemo.html#toc-bb9

    视频地址:

    https://www.bilibili.com/video/av39709290/?p=8

    创建项目demo05

    keepAliveDemo是一个自定义组件

    keepAliveDemo这个组件必须是个动态组件,因为他来回的切换还要变换里面的效果

    sfu快捷键快速生成

    第一个知识点就是with。

    这里我们继承自State,如果我们还要继承其他的类呢?这里就用到了with。表示混入。为了解决多重继承的问题

    混入with SingleTickerProviderStateMixin。作用就是我们在初始化Tabcontroller的时候要用到一个垂直的选项。这个选项必须在这个混入里面使用

    我们现在已经混入了这个类

    定义TabController _controller.

    因为要保持来回切换这个状态页面不变。所以要重写我们的销毁方法和initState方法

    再重写我们的销毁方法

    然后再来写我们的TabBar

    最终效果:

    代码

    import 'package:flutter/material.dart';
    
    void main() => runApp(MyApp());
    
    class MyApp extends StatelessWidget {
      // This widget is the root of your application.
      @override
      Widget build(BuildContext context) {
        return MaterialApp(
          title: 'Flutter Demo',
          theme: ThemeData(
            primarySwatch: Colors.blue,
          ),
          home: KeepAliveDemo()
        );
      }
    }
    
    class KeepAliveDemo extends StatefulWidget {
      @override
      _KeepAliveDemoState createState() => _KeepAliveDemoState();
    }
    
    class _KeepAliveDemoState extends State<KeepAliveDemo> with SingleTickerProviderStateMixin {
      TabController _controller;
      @override
      void initState() { 
        super.initState();
        _controller=TabController(length: 3,vsync:this);
      }
      @override
      void dispose() {
        _controller.dispose();
        super.dispose();
      }
      @override
      Widget build(BuildContext context) {
        return Scaffold(
          appBar: AppBar(
            title: Text('Keep Alive Demo'),
            bottom: TabBar(
              controller: _controller,
              tabs:[
                Tab(icon: Icon(Icons.directions_car),),
                Tab(icon: Icon(Icons.directions_transit),),
                Tab(icon: Icon(Icons.directions_bike),),
              ]
            ),
          ),
          body: TabBarView(
            controller: _controller,
            children: <Widget>[
              Text('1111'),
              Text('2222'),
              Text('3333'),
            ],
          ),
        );
      }
    }
    main.dart
  • 相关阅读:
    1065 01字符串
    poj 1321 棋盘问题
    0608模拟算法试题
    唯一的雪花
    2969 角谷猜想
    0607枚举算法试题
    3162 抄书问题(划分dp)
    8782:乘积最大(划分dp)
    2985:数字组合
    3531:判断整除
  • 原文地址:https://www.cnblogs.com/wangjunwei/p/10588295.html
Copyright © 2020-2023  润新知