Flutter核心功能扩展插件infobits_core的使用

Flutter核心功能扩展插件infobits_core的使用

本包包含了由infobits.io使用的组件。

TODO

  • 为所有代码添加测试
  • 添加infobits图标
  • 修复日期时间输入(时间输入部分)
  • 更新电话输入
  • 创建数字输入

示例代码

import 'dart:async';

import 'package:flutter/material.dart';
import 'package:go_router/go_router.dart';
import 'package:infobits_core/infobits_core.dart';

void main() {
  Timer.periodic(const Duration(seconds: 1), (timer) {
    InfobitsState.instance.initialized = true;
    timer.cancel();
  });
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  MyApp({super.key});

  final router = GoRouter(routes: [
    GoRoute(
      path: '/',
      builder: (context, state) => const HomePage(),
    ),
  ]);

  // 这个小部件是你的应用的根。
  [@override](/user/override)
  Widget build(BuildContext context) {
    return InfobitsApp(
      title: "Infobits Core 示例",
      logo: const CircularProgressIndicator(),
      router: router,
    );
  }
}

class HomePage extends StatefulWidget {
  const HomePage({super.key});

  [@override](/user/override)
  State<HomePage> createState() => _HomePageState();
}

class _HomePageState extends State<HomePage> {
  late final DropdownInputController themeController;

  [@override](/user/override)
  void initState() {
    themeController = DropdownInputController(
        defaultValue: 'system', initValue: context.chosenThemeName);

    themeController.addListener(_onThemeChanged);
    super.initState();
  }

  [@override](/user/override)
  void dispose() {
    themeController.removeListener(_onThemeChanged);
    super.dispose();
  }

  void _onThemeChanged() {
    debugPrint("新主题值: ${themeController.value}");
    context.setThemeName(themeController.value);
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      body: SingleChildScrollView(
        child: Center(
          child: Container(
            padding: const EdgeInsets.all(20),
            constraints: const BoxConstraints(maxWidth: 850),
            child: Column(
              children: [
                Padding(
                  padding: const EdgeInsets.symmetric(vertical: 10),
                  child: Row(
                    children: [
                      const Expanded(child: T18("主题")),
                      SizedBox(
                        width: 200,
                        child: DropdownInput(
                          controller: themeController,
                          items: const [
                            DropdownInputItem(
                                value: "system",
                                child: Column(
                                  crossAxisAlignment: CrossAxisAlignment.start,
                                  children: [
                                    T16("系统"),
                                    T14("默认"),
                                  ],
                                )),
                            DropdownInputItem(
                                value: "light", child: T16("浅色")),
                            DropdownInputItem(
                                value: "dark", child: T16("深色")),
                          ],
                          defaultValue: "system",
                        ),
                      )
                    ],
                  ),
                ),
                const Padding(
                  padding: EdgeInsets.symmetric(vertical: 10),
                  child: Column(
                    children: [
                      H72("H72 最大文本"),
                      H56("H56 大文本"),
                      H40("H40 文本"),
                      H32("H32 文本"),
                      T24("T24 文本"),
                      T20("T20 文本"),
                      T18("T18 文本"),
                      T16("T16 文本"),
                      T14("T14 文本"),
                      T12("T12 文本"),
                      T10("T10 文本"),
                    ],
                  ),
                ),
                Padding(
                  padding: const EdgeInsets.symmetric(vertical: 10),
                  child: Row(
                    mainAxisAlignment: MainAxisAlignment.spaceBetween,
                    children: [
                      Link(
                        onPressed: () {},
                        text: "链接",
                      ),
                      Link(
                        onPressed: () {},
                        text: "链接",
                        appearance: LinkAppearance.accent,
                      ),
                      Link(
                        onPressed: () {},
                        text: "链接",
                        appearance: LinkAppearance.neutral,
                      ),
                      Link(
                        onPressed: () {},
                        text: "链接",
                        color: Colors.red,
                      ),
                      Link(
                        onPressed: () {},
                        text: "链接",
                        color: Colors.red,
                        appearance: LinkAppearance.accent,
                      ),
                      Link(
                        onPressed: () {},
                        text: "链接",
                        color: Colors.red,
                        appearance: LinkAppearance.neutral,
                      ),
                      Link(
                        onPressed: () {},
                        text: "链接",
                        disabled: true,
                      ),
                      Link(
                        onPressed: () {},
                        text: "链接",
                        disabled: true,
                        appearance: LinkAppearance.accent,
                      ),
                      Link(
                        onPressed: () {},
                        text: "链接",
                        disabled: true,
                        appearance: LinkAppearance.neutral,
                      ),
                    ],
                  ),
                ),
                Padding(
                  padding: const EdgeInsets.symmetric(vertical: 10),
                  child: Row(
                    mainAxisAlignment: MainAxisAlignment.spaceBetween,
                    children: [
                      Link(
                        onPressed: () {},
                        text: "链接",
                        size: const LinkSize.large(),
                      ),
                      Link(
                        onPressed: () {},
                        text: "链接",
                        appearance: LinkAppearance.accent,
                        size: const LinkSize.large(),
                      ),
                      Link(
                        onPressed: () {},
                        text: "链接",
                        appearance: LinkAppearance.neutral,
                        size: const LinkSize.large(),
                      ),
                      Link(
                        onPressed: () {},
                        text: "链接",
                        color: Colors.red,
                        size: const LinkSize.large(),
                      ),
                      Link(
                        onPressed: () {},
                        text: "链接",
                        color: Colors.red,
                        appearance: LinkAppearance.accent,
                        size: const LinkSize.large(),
                      ),
                      Link(
                        onPressed: () {},
                        text: "链接",
                        color: Colors.red,
                        appearance: LinkAppearance.neutral,
                        size: const LinkSize.large(),
                      ),
                      Link(
                        onPressed: () {},
                        text: "链接",
                        disabled: true,
                        size: const LinkSize.large(),
                      ),
                      Link(
                        onPressed: () {},
                        text: "链接",
                        disabled: true,
                        appearance: LinkAppearance.accent,
                        size: const LinkSize.large(),
                      ),
                      Link(
                        onPressed: () {},
                        text: "链接",
                        disabled: true,
                        appearance: LinkAppearance.neutral,
                        size: const LinkSize.large(),
                      ),
                    ],
                  ),
                ),
                const Padding(
                  padding: EdgeInsets.symmetric(vertical: 10),
                  child: Row(
                    mainAxisAlignment: MainAxisAlignment.spaceBetween,
                    children: [
                      Button(
                        text: "按钮",
                      ),
                      Button(
                        icon: Icons.add,
                        text: "按钮",
                      ),
                      Button(
                        icon: Icons.add,
                        text: "按钮",
                        isIconSurfix: true,
                      ),
                    ],
                  ),
                ),
                Padding(
                  padding: const EdgeInsets.symmetric(vertical: 10),
                  child: Row(
                    mainAxisAlignment: MainAxisAlignment.spaceBetween,
                    children: [
                      Button(
                        onPressed: () {},
                        text: "按钮",
                        size: const ButtonSize.small(),
                      ),
                      Button(
                        onPressed: () {},
                        text: "按钮",
                        appearance: ButtonAppearance.accent,
                        size: const ButtonSize.small(),
                      ),
                      Button(
                        onPressed: () {},
                        text: "按钮",
                        appearance: ButtonAppearance.muted,
                        size: const ButtonSize.small(),
                      ),
                      Button(
                        onPressed: () {},
                        text: "按钮",
                        appearance: ButtonAppearance.ghost,
                        size: const ButtonSize.small(),
                      ),
                      Button(
                        onPressed: () {},
                        text: "按钮",
                        appearance: ButtonAppearance.neutral,
                        size: const ButtonSize.small(),
                      ),
                      Button(
                        onPressed: () {},
                        text: "按钮",
                        appearance: ButtonAppearance.danger,
                        size: const ButtonSize.small(),
                      ),
                      Button(
                        onPressed: () {},
                        text: "按钮",
                        appearance: ButtonAppearance.warning,
                        size: const ButtonSize.small(),
                      ),
                      Button(
                        onPressed: () {},
                        text: "按钮",
                        appearance: ButtonAppearance.success,
                        size: const ButtonSize.small(),
                      ),
                    ],
                  ),
                ),
                Padding(
                  padding: const EdgeInsets.symmetric(vertical: 10),
                  child: Row(
                    mainAxisAlignment: MainAxisAlignment.spaceBetween,
                    children: [
                      Button(
                        onPressed: () {},
                        text: "按钮",
                      ),
                      Button(
                        onPressed: () {},
                        text: "按钮",
                        appearance: ButtonAppearance.accent,
                      ),
                      Button(
                        onPressed: () {},
                        text: "按钮",
                        appearance: ButtonAppearance.muted,
                      ),
                      Button(
                        onPressed: () {},
                        text: "按钮",
                        appearance: ButtonAppearance.ghost,
                      ),
                      Button(
                        onPressed: () {},
                        text: "按钮",
                        appearance: ButtonAppearance.neutral,
                      ),
                      Button(
                        onPressed: () {},
                        text: "按钮",
                        appearance: ButtonAppearance.danger,
                      ),
                      Button(
                        onPressed: () {},
                        text: "按钮",
                        appearance: ButtonAppearance.warning,
                      ),
                      Button(
                        onPressed: () {},
                        text: "按钮",
                        appearance: ButtonAppearance.success,
                      ),
                    ],
                  ),
                ),
                Padding(
                  padding: const EdgeInsets.symmetric(vertical: 10),
                  child: Row(
                    mainAxisAlignment: MainAxisAlignment.spaceBetween,
                    children: [
                      Button(
                        onPressed: () {},
                        text: "按钮",
                        size: const ButtonSize.large(),
                      ),
                      Button(
                        onPressed: () {},
                        text: "按钮",
                        appearance: ButtonAppearance.accent,
                        size: const ButtonSize.large(),
                      ),
                      Button(
                        onPressed: () {},
                        text: "按钮",
                        appearance: ButtonAppearance.muted,
                        size: const ButtonSize.large(),
                      ),
                      Button(
                        onPressed: () {},
                        text: "按钮",
                        appearance: ButtonAppearance.ghost,
                        size: const ButtonSize.large(),
                      ),
                      Button(
                        onPressed: () {},
                        text: "按钮",
                        appearance: ButtonAppearance.neutral,
                        size: const ButtonSize.large(),
                      ),
                      Button(
                        onPressed: () {},
                        text: "按钮",
                        appearance: ButtonAppearance.danger,
                        size: const ButtonSize.large(),
                      ),
                      Button(
                        onPressed: () {},
                        text: "按钮",
                        appearance: ButtonAppearance.warning,
                        size: const ButtonSize.large(),
                      ),
                      Button(
                        onPressed: () {},
                        text: "按钮",
                        appearance: ButtonAppearance.success,
                        size: const ButtonSize.large(),
                      ),
                    ],
                  ),
                ),
                Padding(
                  padding: const EdgeInsets.symmetric(vertical: 10),
                  child: Column(
                    children: [
                      TextInput(
                        controller: TextEditingController(),
                        title: "文本输入",
                      ),
                      EmailInput(
                        controller: TextEditingController(),
                      ),
                      PhoneInput(
                        controller: TextEditingController(),
                      ),
                      PasswordInput(
                        controller: TextEditingController(),
                      ),
                      CheckboxInput(
                        title: "复选框",
                        items: const [
                          CheckBoxItem(
                            value: true,
                            widget: T14("复选框 1"),
                          ),
                          CheckBoxItem(
                            value: false,
                            widget: T14("复选框 2"),
                          ),
                        ],
                        controller: CheckBoxInputController(),
                      ),
                      DateTimeInput(
                        controller: DateTimeInputController(),
                      ),
                    ],
                  ),
                ),
                const CircularProgressIndicator(),
                const DateInput(
                  size: DateInputSize.medium,
                ),
              ],
            ),
          ),
        ),
      ),
    );
  }
}

更多关于Flutter核心功能扩展插件infobits_core的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter核心功能扩展插件infobits_core的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是一个关于如何在Flutter项目中使用infobits_core插件的示例代码。infobits_core是一个假设的Flutter核心功能扩展插件,由于这是一个假设的插件,具体功能和API可能会有所不同,但以下代码将展示如何集成和使用一个类似功能的插件。

首先,确保你的Flutter环境已经设置好,并且你的项目已经创建。然后,在pubspec.yaml文件中添加infobits_core插件的依赖(请注意,这里infobits_core是一个假设的包名,你需要替换为实际存在的包名):

dependencies:
  flutter:
    sdk: flutter
  infobits_core: ^latest_version  # 替换为实际插件的版本号

运行flutter pub get来安装依赖。

接下来,在你的Flutter项目中,你可以按照以下方式使用infobits_core插件。假设这个插件提供了一些核心功能,比如设备信息获取、网络状态监听等。以下是一个简单的示例:

import 'package:flutter/material.dart';
import 'package:infobits_core/infobits_core.dart'; // 假设的包导入路径

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

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  String deviceInfo = '';
  String connectivityStatus = '';

  @override
  void initState() {
    super.initState();
    // 获取设备信息
    _getDeviceInfo();

    // 监听网络状态变化
    InfoBitsCore.connectivity.addListener(() {
      setState(() {
        connectivityStatus = InfoBitsCore.connectivity.value ?? 'Unknown';
      });
    });
  }

  Future<void> _getDeviceInfo() async {
    try {
      DeviceInfo deviceInfoData = await InfoBitsCore.deviceInfo.get();
      setState(() {
        deviceInfo = 'Brand: ${deviceInfoData.brand}\n'
            'Model: ${deviceInfoData.model}\n'
            'OS Version: ${deviceInfoData.osVersion}';
      });
    } catch (e) {
      print('Error getting device info: $e');
    }
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Infobits Core Example'),
        ),
        body: Padding(
          padding: const EdgeInsets.all(16.0),
          child: Column(
            crossAxisAlignment: CrossAxisAlignment.start,
            children: <Widget>[
              Text('Device Info:', style: TextStyle(fontSize: 18, fontWeight: FontWeight.bold)),
              SizedBox(height: 8),
              Text(deviceInfo, style: TextStyle(fontSize: 16)),
              SizedBox(height: 24),
              Text('Connectivity Status:', style: TextStyle(fontSize: 18, fontWeight: FontWeight.bold)),
              SizedBox(height: 8),
              Text(connectivityStatus, style: TextStyle(fontSize: 16)),
            ],
          ),
        ),
      ),
    );
  }
}

在这个示例中,我们做了以下几件事:

  1. pubspec.yaml中添加了infobits_core依赖。
  2. MyApp类中,我们定义了两个字符串变量deviceInfoconnectivityStatus来存储设备信息和网络状态。
  3. initState方法中,我们调用_getDeviceInfo方法来获取设备信息,并设置了一个监听器来监听网络状态的变化。
  4. _getDeviceInfo方法是一个异步方法,它调用InfoBitsCore.deviceInfo.get()来获取设备信息,并将结果存储在deviceInfo变量中。
  5. build方法中,我们构建了一个简单的UI来显示设备信息和网络状态。

请注意,由于infobits_core是一个假设的插件,上述代码中的API调用(如InfoBitsCore.deviceInfo.get()InfoBitsCore.connectivity.addListener())可能需要根据实际插件的API进行调整。在实际使用中,你应该参考插件的官方文档来获取正确的API调用方式。

回到顶部