Flutter切换组件插件switcher的使用

发布于 1周前 作者 sinazl 来自 Flutter

Flutter切换组件插件switcher的使用

概述

switcher 是一个动画、美观且个性化的切换组件。它基于 Eduardo Muñoz 的 lite_rolling_switch 组件构建。

获取开始

pubspec.yaml 文件中添加依赖:

dependencies:
  switcher: any

示例演示

以下是 switcher 插件的基本用法和一些示例代码,帮助您快速上手。

完整示例 Demo

以下是一个完整的 Flutter 应用程序示例,展示如何使用 Switcher 组件:

import 'package:flutter/material.dart';
import 'package:switcher/core/switcher_size.dart';
import 'package:switcher/switcher.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Switcher',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(title: 'Switcher'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  MyHomePage({Key key, this.title}) : super(key: key);

  final String title;

  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  bool _switchValue = false;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: SingleChildScrollView(
        padding: const EdgeInsets.all(50),
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            Column(
              children: [
                Row(
                  mainAxisAlignment: MainAxisAlignment.center,
                  children: [
                    Text(
                      'Small',
                      style: TextStyle(fontSize: 15, fontWeight: FontWeight.bold),
                    ),
                    SizedBox(width: 50),
                    Switcher(
                      value: _switchValue,
                      colorOff: Colors.purple.withOpacity(0.3),
                      colorOn: Colors.purple,
                      onChanged: (bool state) {
                        setState(() {
                          _switchValue = state;
                        });
                      },
                      size: SwitcherSize.small,
                    ),
                  ],
                ),
                SizedBox(height: 20),
                Row(
                  mainAxisAlignment: MainAxisAlignment.center,
                  children: [
                    Text(
                      'Medium',
                      style: TextStyle(fontSize: 15, fontWeight: FontWeight.bold),
                    ),
                    SizedBox(width: 20),
                    Switcher(
                      value: _switchValue,
                      colorOff: Colors.orange.withOpacity(0.3),
                      colorOn: Colors.orange,
                      size: SwitcherSize.medium,
                      onChanged: (bool state) {
                        setState(() {
                          _switchValue = state;
                        });
                      },
                    ),
                  ],
                ),
                SizedBox(height: 20),
                Row(
                  mainAxisAlignment: MainAxisAlignment.center,
                  children: [
                    Text(
                      'Large',
                      style: TextStyle(fontSize: 15, fontWeight: FontWeight.bold),
                    ),
                    SizedBox(width: 20),
                    Switcher(
                      value: _switchValue,
                      size: SwitcherSize.large,
                      colorOff: Colors.green.withOpacity(0.3),
                      colorOn: Colors.green,
                      onChanged: (bool state) {
                        setState(() {
                          _switchValue = state;
                        });
                      },
                    ),
                  ],
                ),
              ],
            ),
            SizedBox(height: 50),
            Column(
              children: [
                Row(
                  mainAxisAlignment: MainAxisAlignment.center,
                  children: [
                    Text(
                      'Custom Icons',
                      style: TextStyle(fontSize: 15, fontWeight: FontWeight.bold),
                    ),
                    SizedBox(width: 50),
                    Switcher(
                      value: _switchValue,
                      iconOff: Icons.lock,
                      iconOn: Icons.lock_open,
                      colorOff: Colors.blueGrey.withOpacity(0.3),
                      colorOn: Colors.blue,
                      onChanged: (bool state) {
                        setState(() {
                          _switchValue = state;
                        });
                      },
                      size: SwitcherSize.large,
                    ),
                  ],
                ),
              ],
            ),
          ],
        ),
      ),
    );
  }
}

关键属性说明

  • value: 控制开关的状态(true 或 false)。
  • size: 设置开关大小 (SwitcherSize.small, SwitcherSize.medium, SwitcherSize.large)。
  • colorOff: 开关关闭时的颜色。
  • colorOn: 开关打开时的颜色。
  • iconOff: 关闭状态下的图标。
  • iconOn: 打开状态下的图标。
  • onChanged: 当开关状态改变时触发的回调函数。

通过这些属性,您可以轻松定制 Switcher 组件以适应您的需求。更多详细信息和功能请参考 GitHub 仓库issue tracker 提交问题或请求新功能。

希望这个示例能够帮助您更好地理解和使用 switcher 插件!


更多关于Flutter切换组件插件switcher的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter切换组件插件switcher的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


在Flutter中,switcher 并不是一个官方提供的标准组件库中的插件。不过,假设你提到的 switcher 是指一个用于在不同视图或组件之间切换的自定义或第三方插件,我们可以基于类似的功能需求提供一个示例代码。

通常,在Flutter中实现组件切换,可以使用 IndexedStackOffstage/Onstage 组件结合状态管理(如 setState)来实现。下面是一个简单的示例,展示如何在Flutter应用中实现组件切换:

示例代码

import 'package:flutter/material.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Switcher Example',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: SwitcherScreen(),
    );
  }
}

class SwitcherScreen extends StatefulWidget {
  @override
  _SwitcherScreenState createState() => _SwitcherScreenState();
}

class _SwitcherScreenState extends State<SwitcherScreen> with SingleTickerProviderStateMixin {
  int _selectedIndex = 0;

  static List<Widget> _widgetOptions = <Widget>[
    Text('First Screen'),
    Center(child: Text('Second Screen')),
    Center(child: Text('Third Screen')),
  ];

  void _onItemTapped(int index) {
    setState(() {
      _selectedIndex = index;
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Switcher Example'),
      ),
      body: Center(
        child: _widgetOptions.elementAt(_selectedIndex),
      ),
      bottomNavigationBar: BottomNavigationBar(
        items: [
          BottomNavigationBarItem(
            icon: Icon(Icons.home),
            label: 'Home',
          ),
          BottomNavigationBarItem(
            icon: Icon(Icons.star),
            label: 'Favorites',
          ),
          BottomNavigationBarItem(
            icon: Icon(Icons.settings),
            label: 'Settings',
          ),
        ],
        currentIndex: _selectedIndex,
        onTap: _onItemTapped,
      ),
    );
  }
}

代码说明

  1. Main函数:

    • runApp(MyApp()); 启动应用,并设置 MyApp 为根组件。
  2. MyApp组件:

    • MaterialApp 是应用的根组件,包含主题、标题和主页。
  3. SwitcherScreen组件:

    • StatefulWidget 允许我们管理组件的状态。
    • _selectedIndex 变量用于跟踪当前显示的组件索引。
    • _widgetOptions 是一个包含不同组件的列表。
  4. _SwitcherScreenState类:

    • _onItemTapped 方法在底部导航栏项被点击时更新 _selectedIndex,从而切换显示的组件。
    • build 方法构建UI,使用 CenterBottomNavigationBar 组件。
    • BottomNavigationBaronTap 属性绑定到 _onItemTapped 方法,实现点击切换功能。

这个示例展示了如何在Flutter中使用 BottomNavigationBarIndexedStack(隐式地通过 _widgetOptions_selectedIndex)来实现组件之间的切换。如果你提到的 switcher 插件有特定的功能或API,你可能需要参考该插件的文档进行具体实现。

回到顶部