Flutter基础功能扩展插件flutter_base_plus的使用

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

Flutter基础功能扩展插件flutter_base_plus的使用

flutter_base_plus 是一个用于快速构建 Flutter 应用的基础功能扩展插件。它提供了多种实用工具和基类,帮助开发者更高效地管理应用的路由、状态、数据模型以及页面结构等。

插件功能概览

以下是 flutter_base_plus 的主要功能模块及其作用:

目录名称 功能
animation 基础转场动画库
base 基类库
model 基类库用到的数据模型
navigator 路由操作工具库
page 页面基类
router 路由库

使用说明

1. 添加依赖

pubspec.yaml 文件中添加以下依赖:

dependencies:
  flutter_base_plus: ^1.0.0  # 替换为最新版本号

然后运行 flutter pub get 安装依赖。

2. 配置应用根组件

通过继承 BaseAppRoot 创建应用根组件,并配置路由、主题和其他选项。

示例代码

import 'package:flutter_base_plus/flutter_base_plus.dart';
import 'package:flutter_smart_dialog/flutter_smart_dialog.dart';

import 'app_routers.dart';
import 'dialog/custom_loading_widget.dart';
import 'dialog/custom_toast_widget.dart';

void main() {
  // 初始化 Flutter 环境
  WidgetsFlutterBinding.ensureInitialized();
  runApp(MyApp());
}

class MyApp extends BaseAppRoot {
  late final DateTime startDateTime;

  MyApp({Key? key})
      : super(
          key: key,
          config: AppConfig(
            theme: ThemeData(
              primarySwatch: Colors.blue,
            ),
            routers: AppRouters().routers,
            homeName: "page_1",  // 设置默认首页路由名称
            observers: [
              FlutterSmartDialog.observer,  // 添加路由观察者
              TestNavigatorObserver(),  // 自定义路由观察者
            ],
            transitionBuilder: FlutterSmartDialog.init(
              // 自定义默认 Toast 弹窗
              toastBuilder: (String msg, AlignmentGeometry alignment) {
                return CustomToastWidget(msg: msg, alignment: alignment);
              },
              // 自定义默认加载弹窗
              loadingBuilder: (String msg, Color background) {
                return CustomLoadingWidget(msg: msg, background: background);
              },
            ),
          ),
        ) {
    startDateTime = DateTime.now();
  }

  [@override](/user/override)
  void buildFinishCallBack() {
    debugPrint(
        'MyApp.buildFinishCallBack:${DateTime.now().millisecondsSinceEpoch - startDateTime.millisecondsSinceEpoch} ms');
  }
}

/// 测试用路由观察者
class TestNavigatorObserver extends NavigatorObserver {
  [@override](/user/override)
  void didPush(Route<dynamic> route, Route<dynamic>? previousRoute) {}

  [@override](/user/override)
  void didReplace({Route<dynamic>? newRoute, Route<dynamic>? oldRoute}) {}

  [@override](/user/override)
  void didRemove(Route<dynamic> route, Route<dynamic>? previousRoute) {}

  [@override](/user/override)
  void didPop(Route<dynamic> route, Route<dynamic>? previousRoute) async {}
}

3. 定义路由

创建一个文件 app_routers.dart 来定义路由表。

import 'package:flutter_base_plus/flutter_base_plus.dart';

class AppRouters {
  static Map<String, WidgetBuilder> routers = {
    "page_1": (context) => Page1(),
    "page_2": (context) => Page2(),
  };
}

4. 创建页面

创建两个简单的页面 Page1Page2

Page1

import 'package:flutter/material.dart';

class Page1 extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text("Page 1")),
      body: Center(
        child: ElevatedButton(
          onPressed: () {
            Navigator.pushNamed(context, "page_2");
          },
          child: Text("Go to Page 2"),
        ),
      ),
    );
  }
}

Page2

import 'package:flutter/material.dart';

class Page2 extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text("Page 2")),
      body: Center(
        child: ElevatedButton(
          onPressed: () {
            Navigator.pop(context);
          },
          child: Text("Back to Page 1"),
        ),
      ),
    );
  }
}

5. 自定义弹窗

创建自定义的 CustomToastWidgetCustomLoadingWidget

CustomToastWidget

import 'package:flutter/material.dart';

class CustomToastWidget extends StatelessWidget {
  final String msg;
  final AlignmentGeometry alignment;

  const CustomToastWidget({
    Key? key,
    required this.msg,
    required this.alignment,
  }) : super(key: key);

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Container(
      padding: EdgeInsets.all(8),
      decoration: BoxDecoration(
        color: Colors.black.withOpacity(0.8),
        borderRadius: BorderRadius.circular(8),
      ),
      alignment: alignment,
      child: Text(
        msg,
        style: TextStyle(color: Colors.white),
      ),
    );
  }
}

CustomLoadingWidget

import 'package:flutter/material.dart';

class CustomLoadingWidget extends StatelessWidget {
  final String msg;
  final Color background;

  const CustomLoadingWidget({
    Key? key,
    required this.msg,
    required this.background,
  }) : super(key: key);

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Container(
      width: 100,
      height: 100,
      decoration: BoxDecoration(
        color: background,
        borderRadius: BorderRadius.circular(8),
      ),
      child: Center(
        child: Text(
          msg,
          style: TextStyle(color: Colors.white),
        ),
      ),
    );
  }
}

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

1 回复

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


flutter_base_plus 是一个用于扩展 Flutter 基础功能的插件,它通常包含了一些常用的工具类、扩展方法、以及一些便捷的功能,以帮助开发者更高效地开发 Flutter 应用。以下是关于如何使用 flutter_base_plus 插件的一些基本介绍和示例。

1. 安装插件

首先,你需要在 pubspec.yaml 文件中添加 flutter_base_plus 插件的依赖:

dependencies:
  flutter:
    sdk: flutter
  flutter_base_plus: ^1.0.0  # 请根据实际情况填写版本号

然后运行 flutter pub get 来安装依赖。

2. 导入插件

在你的 Dart 文件中导入 flutter_base_plus

import 'package:flutter_base_plus/flutter_base_plus.dart';

3. 使用插件功能

flutter_base_plus 插件可能包含以下一些常见功能:

3.1 工具类

插件可能提供了一些常用的工具类,例如 StringUtilsDateUtils 等。

String formattedDate = DateUtils.formatDate(DateTime.now(), 'yyyy-MM-dd');
bool isValidEmail = StringUtils.isEmail('example@example.com');

3.2 扩展方法

插件可能为常见的 Flutter 类提供了扩展方法,例如 StringWidget 等。

String str = 'hello world';
String capitalizedStr = str.capitalize();  // 'Hello world'

Widget container = Container().withPadding(EdgeInsets.all(16.0));

3.3 网络请求

插件可能封装了网络请求的功能,简化了 HTTP 请求的发送和响应处理。

var response = await HttpClient().get('https://api.example.com/data');
if (response.statusCode == 200) {
  print('Response data: ${response.body}');
} else {
  print('Request failed with status: ${response.statusCode}');
}

3.4 状态管理

插件可能提供了一些简单的状态管理工具,帮助开发者更轻松地管理应用状态。

class MyAppState extends BaseState {
  int counter = 0;

  void increment() {
    counter++;
    notifyListeners();
  }
}

final myAppState = MyAppState();

// 在 Widget 中使用
class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return StateBuilder(
      state: myAppState,
      builder: (context, state) {
        return Text('Counter: ${state.counter}');
      },
    );
  }
}

3.5 日志记录

插件可能提供了更便捷的日志记录功能。

Logger.log('This is a log message');
Logger.error('This is an error message');

4. 自定义配置

flutter_base_plus 插件可能允许你进行一些自定义配置,例如设置日志级别、网络请求的超时时间等。

Logger.setLevel(LogLevel.debug);
HttpClient.setTimeout(Duration(seconds: 30));

5. 示例代码

以下是一个简单的示例,展示了如何使用 flutter_base_plus 插件的一些功能:

import 'package:flutter/material.dart';
import 'package:flutter_base_plus/flutter_base_plus.dart';

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

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Flutter Base Plus Example'),
        ),
        body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: [
              Text('Formatted Date: ${DateUtils.formatDate(DateTime.now(), 'yyyy-MM-dd')}'),
              Text('Capitalized String: ${'hello world'.capitalize()}'),
              ElevatedButton(
                onPressed: () async {
                  var response = await HttpClient().get('https://jsonplaceholder.typicode.com/posts/1');
                  if (response.statusCode == 200) {
                    Logger.log('Response data: ${response.body}');
                  } else {
                    Logger.error('Request failed with status: ${response.statusCode}');
                  }
                },
                child: Text('Fetch Data'),
              ),
            ],
          ),
        ),
      ),
    );
  }
}
回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!