Flutter UI设计增强插件flutter_fx的使用
Flutter UI设计增强插件flutter_fx的使用
本包是一套用于Flutter的应用程序的状态管理和导航管理策略的组件和工具。它包括状态管理、导航管理和一系列工具组件。
特性
- Fx State: 用于在UI中执行和监听变化。
- Fx Navigation: 用于简化导航过程。
- Fx Suite: 用于加速开发,使用工具和组件。
开始使用
💥 FxState
此功能是为了简化应用中的状态更新而设计的。它允许你通过一个类来定义所有的逻辑,并在页面中设置所有可变变量和状态,然后从不同的小部件中监听这些状态的变化。
使用方法
首先,我们定义一个类来分配所有我们的状态或可变变量。我们使用Fx<T>
类型来定义一个可变变量,然后用toFx
扩展初始化该变量。
import 'package:flutter_fx/flutter_fx.dart';
class HomeController {
static final Fx<int> currentTab = 0.toFx;
}
现在我们需要做的就是在我们想要根据变量/状态变化来更新的部分使用FxBuilder
,并使用FxBuilder
的fxContext
来监听。
import 'package:flutter/material.dart';
import 'package:flutter_fx/flutter_fx.dart';
class HomeScreen extends StatelessWidget {
static const String path = "/homeScreen";
const HomeScreen({super.key});
@override
Widget build(BuildContext context) {
return FxScreen(
screenBuilder: (context, paddings) => Center(
child: FxBuilder(
builder: (fxContext) {
switch (HomeController.currentTab.listen(fxContext)) {
case 1:
return const CreatePatientTab();
case 0:
default:
return const PatientsList();
}
},
),
),
bottomNavigationBar: FxBuilder(builder: (fxContext) {
return BottomNavigationBar(
backgroundColor: AppColors.secondaryBackground,
currentIndex: HomeController.currentTab.listen(fxContext),
onTap: (value) => HomeController.changeTabIndex(value),
items: const [
BottomNavigationBarItem(
icon: Icon(Icons.people),
label: "Patients",
),
BottomNavigationBarItem(
icon: Icon(Icons.person),
label: "Create patient",
),
]);
}),
);
}
}
为了更新变量/状态,我们只需要调用value
setter,FxState
会通知正在监听此变量的小部件并更新其状态。
import 'package:flutter_fx/flutter_fx.dart';
class HomeController {
static final Fx<int> currentTab = 0.toFx;
void changeTabIndex(int newIndex){
currentTab.value = newIndex;
}
}
其他类型
// 使用 Fx<T> 定义和 toFx 扩展
Fx<int> myInt = 0.toFx;
// 使用 Fx<T> 定义和 toFx 扩展
Fx<String> myString = "Hello".toFx;
// 使用 Fx<T> 定义和 toFx 扩展
Fx<Map<String, int>> myString = {}.toFx;
// 使用 Fx<T> 定义和 toFx 扩展
Fx<List<String>> myString = [].toFx;
// 使用 FxString 类型定义和 toFx 扩展
FxString myFxString = "Hello".toFx;
// 使用 FxInt 类型定义和 toFx 扩展
FxInt myFxInt = 0.toFx;
// 使用 FxBool 类型定义和 Fx 构造函数
FxBool myBool = Fx(false);
// 使用 Fx<T> 类型定义和 FxNullable 类支持可空类型
Fx<bool?> myNullableBool = FxNullable.setNull();
💥 FxNavigation
此功能允许你在不使用上下文的情况下进行导航,并且可以使用自定义过渡效果。
使用方法
要使用FxNavigation
,你需要使用FxApp
,它使用MaterialApp
,因此你可以设置一些Material
的属性。
FxApp
需要两个参数,一个是initialRoute
,即应用开始时将被压入堆栈的第一个路由;另一个是routeBuilder
,你可以在其中定义特定路径下应该构建哪个小部件。
FxApp(
initialRoute: "/",
routeBuilder: (String path){
switch (path) {
case HomeScreen.path:
return const HomeScreen();
case "/":
case SplashScreen.path:
default:
return const SplashScreen();
}
},
)
稍后,你可以使用FxRouter
在你的应用程序内导航,并发送参数来自定义页面的过渡效果。
FxRouter.goToAndReplace(HomeScreen.path,
arguments: NavigationArguments(
payload: "Coming from SplashScreen",
curve: Curves.easeInOut,
barrierColor: Colors.transparent,
routeTransition: RouteTransition.animated,
transitionDirection: TransitionDirection.rightToLeft,
));
💥 FxSuite
此功能是为了在新项目中拥有几乎每个应用程序都有的基本特性。看看可用的一些组件,我相信你会觉得它们很有用。
FxScreen
这个组件专注于简化UI屏幕的构建方式。它允许你轻松地自定义背景、覆盖层、屏幕填充等。
使用方法
导入库:
import 'package:flutter_fx/flutter_fx.dart';
在页面中返回FxScreen
:
import 'package:flutter/services.dart';
import 'package:flutter_fx/flutter_fx.dart';
class ExamplePage extends StatelessWidget {
const ExamplePage({super.key});
@override
Widget build(BuildContext context) {
return FxScreen(
/// 必填项
screenBuilder: (context, paddings) =>
/// 默认情况下,encapsulateScreen 属性为 true,因此屏幕会被封装到 paddings 中,以使内容远离导航栏和状态栏。
/// 但是如果你需要实现某些功能并自定义屏幕填充的使用方式,可以使用 screenBuilder 函数中的 paddings 参数。
/// 现在你可以在 screen builder 中放置小部件而不必担心其他事情
const MyScreenContent(),
/// 使用 uiOverlayStyle 属性可以自定义状态栏和导航栏的外观。
/// uiOverlayStyle: SystemUiOverlayStyle(
/// statusBarColor: Colors.transparent,
/// statusBarIconBrightness: Brightness.light,
/// statusBarBrightness: Brightness.light,
/// systemNavigationBarColor: Colors.transparent,
/// systemNavigationBarIconBrightness: Brightness.light,
/// ),
uiOverlayStyle: SystemUiOverlayStyle.dark,
/// 使用 screenBackgroundBuilder 可以添加屏幕背景。
screenBackgroundBuilder: (context, paddings) =>
/// 和 screenBuilder 一样,你可以使用 paddings 参数来自定义屏幕填充的使用方式
Image.asset(
"custom_background.png",
),
/// 使用 screenOverlayBuilder 可以添加屏幕覆盖层。
/// 我用它来显示操作期间的加载指示器
screenOverlayBuilder: (context) => const CircularProgressIndicator(),
);
}
}
FxComponents
-
FxButton 是一个带有默认样式的
FilledButton
,用 paddings 包裹以简化组件之间的分离。它允许完全定制。FxButton( content: "Press me", /// 必填项 onPressedF: (){} )
-
FxTextField 是一个带有默认样式的
TextField
,用 paddings 包裹以方便表单字段的分离。它允许完全定制。FxTextField( label: "Text field" /// 必填项 inputController: textController )
-
FxTextButton 是一个带有默认样式的
TextButton
,使用shrinkWrap
作为tapTargetSize
。FxTextButton( /// 必填项 textContent: "Content", /// 必填项 onPressedF: (){} ),
FxExtensions
-
FxScaleSize 允许根据设计创建的视口大小缩放大小。
要设置适用于你的视口大小,需要在你的
runApp
方法之前设置以下内容:FxScaleSize.viewportWidth = 500 // 你的视口宽度 FxScaleSize.viewportHeight = 1200 // 你的视口高度
FxValidators
此功能只是我曾经使用过的验证器的副本。很快我会改进它们并添加更多常用的验证器。
- validateEmail
- validateUsernameText
- validateText
- compareText
- validatePhoneNumber
- validateDouble
- validatePositiveDouble
- validatePositiveInt
- validateNCFSequence
- validateMinorThan
- validateGreaterThan
使用方法
导入库:
import 'package:flutter_fx/flutter_fx.dart';
使用验证器:
final String? error = FxValidators.validateEmail("hola@as.co");
更多关于Flutter UI设计增强插件flutter_fx的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter UI设计增强插件flutter_fx的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,关于如何在Flutter项目中使用flutter_fx
插件来增强UI设计,下面是一些代码示例,展示了如何使用该插件提供的一些功能。flutter_fx
是一个Flutter包,旨在帮助开发者快速实现美观和用户友好的UI组件。请注意,实际使用时你需要确保已在pubspec.yaml
文件中添加了该依赖项。
安装flutter_fx
首先,在你的pubspec.yaml
文件中添加flutter_fx
依赖:
dependencies:
flutter:
sdk: flutter
flutter_fx: ^最新版本号 # 请替换为实际的最新版本号
然后运行flutter pub get
来安装依赖。
使用示例
1. 使用GradientButton
GradientButton
是一个具有渐变颜色的按钮,可以极大地提升UI的视觉效果。
import 'package:flutter/material.dart';
import 'package:flutter_fx/flutter_fx.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('Flutter FX Demo'),
),
body: Center(
child: GradientButton(
onPressed: () {
print('Button pressed!');
},
child: Text('Gradient Button'),
linearGradient: LinearGradient(
colors: [Colors.blue, Colors.red],
),
),
),
),
);
}
}
2. 使用GradientContainer
GradientContainer
用于创建具有渐变背景色的容器。
import 'package:flutter/material.dart';
import 'package:flutter_fx/flutter_fx.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('Flutter FX Demo'),
),
body: Center(
child: GradientContainer(
linearGradient: LinearGradient(
colors: [Colors.purple, Colors.deepOrange],
),
child: Text(
'Gradient Container',
style: TextStyle(color: Colors.white),
),
),
),
),
);
}
}
3. 使用ShadowContainer
ShadowContainer
为容器添加阴影效果,增加立体感和深度。
import 'package:flutter/material.dart';
import 'package:flutter_fx/flutter_fx.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('Flutter FX Demo'),
),
body: Center(
child: ShadowContainer(
elevation: 12.0,
blurRadius: 20.0,
spreadRadius: 5.0,
color: Colors.white,
child: Text(
'Shadow Container',
style: TextStyle(color: Colors.black),
),
),
),
),
);
}
}
结论
以上示例展示了如何在Flutter项目中集成并使用flutter_fx
插件来增强UI设计。通过利用这些预构建的组件,你可以快速创建出美观和用户友好的界面。记得查阅flutter_fx
的官方文档以获取更多功能和详细用法。