Flutter基础功能扩展插件flutter_base_plus的使用
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. 创建页面
创建两个简单的页面 Page1 和 Page2。
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. 自定义弹窗
创建自定义的 CustomToastWidget 和 CustomLoadingWidget。
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
更多关于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 工具类
插件可能提供了一些常用的工具类,例如 StringUtils、DateUtils 等。
String formattedDate = DateUtils.formatDate(DateTime.now(), 'yyyy-MM-dd');
bool isValidEmail = StringUtils.isEmail('example@example.com');
3.2 扩展方法
插件可能为常见的 Flutter 类提供了扩展方法,例如 String、Widget 等。
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'),
              ),
            ],
          ),
        ),
      ),
    );
  }
}
        
      
            
            
            
