Flutter数据监听与构建插件watcher_builder的使用
Flutter数据监听与构建插件watcher_builder的使用
NEW!
随着版本1.1.0的发布,你现在可以使用.watch
方法创建任何类型的VarWatcher
实例,这将使你更容易监控变量。此外,版本1.1.0还简化了构建器的方法。例如,你可以调用watcher
上的.build()
方法,并传入构建器函数。
final watcher = 0.watch;
// 这将在watcher上调用notify时自动重新构建
Widget watcherBuilder = watcher.build((value) => Text('value = $value'));
我们进一步简化了构建器,通过在VarWatcher
上引入一个新的操作符。
Widget simple = watcher >> (value) => Text('value = $value');
同样地,如果你声明一个VarWatcher
列表,也可以调用相同的方法和操作符。
final watchers = [
0.watch,
0.watch,
0.watch,
];
Widget watchersBuilder = watchers.build(
() => Column(children: watchersBuilder.map((w) =>
Text('value = ${w.value}')).toList())
);
// 或者
Widget simple2 = watchers >> Column(children: watchersBuilder.map((w) =>
Text('value = ${w.value}')).toList());
特性
WatcherBuilder是Flutter中最简单的状态管理方式。你所要做的就是声明一个VarWatcher
,在WatcherBuilder
内部使用它,并在需要更新/重新构建其小部件时调用notify
。
使用方法
[@override](/user/override)
Widget build(BuildContext context) {
final counter = VarWatcher(0);
return Scaffold(
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
WatcherBuilder(
watch: counter,
builder: (context, value) => Text('Counter = $value'),
),
OutlinedButton(
onPressed: () {
counter.value++;
counter.notify();
},
child: const Text('Increment'),
)
],
),
),
);
}
额外信息
你还可以使用WatchersBuilder
来监控多个VarWatchers
。
示例代码
以下是example/main.dart
文件中的完整示例:
import 'package:flutter/material.dart';
import 'package:watcher_builder/watcher_builder.dart';
void main() {
runApp(const MaterialApp(
home: Example(),
));
}
class Example extends StatelessWidget {
const Example({super.key});
[@override](/user/override)
Widget build(BuildContext context) {
final counter = 0.watch;
final counters = [
0.watch,
0.watch,
0.watch,
];
return Scaffold(
body: SizedBox(
width: MediaQuery.sizeOf(context).width,
child: Center(
child: Row(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
// 示例1:基本的WatcherBuilder
WatcherBuilder(
watch: counter,
builder: (context, value) => Text('Counter = $value'),
),
// 示例2:从变量中获取简单的构建器函数
counter.build((value) => Text('Counter = $value')),
// 示例3:更简单的构建器操作符
counter >> (value) => Text('Counter = $value'),
OutlinedButton(
onPressed: () {
counter.value++;
counter.notify();
},
child: const Text('Increment'),
)
],
),
const SizedBox(width: 100),
Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
// 示例1:基本的WatcherBuilder
WatchersBuilder(
watchers: counters,
builder: (context) {
return Column(
children: counters
.map((w) => Text('Counter = ${w.value}'))
.toList(),
);
},
),
// 示例2:从变量中获取简单的构建器函数
counters.build(() {
return Column(
children: counters
.map((w) => Text('Counter = ${w.value}'))
.toList(),
);
}),
// 示例3:更简单的构建器操作符
counters >>
() {
return Column(
children: counters
.map((w) => Text('Counter = ${w.value}'))
.toList(),
);
},
OutlinedButton(
onPressed: () {
for (var c in counters) {
c.value += 1 + counters.indexOf(c);
}
},
child: const Text('Increment'),
)
],
),
],
),
),
),
);
}
}
更多关于Flutter数据监听与构建插件watcher_builder的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter数据监听与构建插件watcher_builder的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,下面是一个关于如何在Flutter中使用watcher_builder
包进行数据监听与构建的示例代码。watcher_builder
是一个用于监听数据变化并重建UI的Flutter插件。不过需要注意的是,watcher_builder
并不是Flutter官方提供的包,而是一个社区维护的包,因此确保你已经在pubspec.yaml
文件中添加了这个依赖。
首先,确保在pubspec.yaml
中添加依赖:
dependencies:
flutter:
sdk: flutter
watcher_builder: ^最新版本号 # 请替换为实际的最新版本号
然后运行flutter pub get
来安装依赖。
接下来是一个完整的示例代码,展示如何使用watcher_builder
来监听数据变化并更新UI:
import 'package:flutter/material.dart';
import 'package:watcher_builder/watcher_builder.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Watcher Builder Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: MyHomePage(),
);
}
}
class MyHomePage extends StatefulWidget {
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
// 创建一个可监听的数据对象
final _counter = ValueNotifier<int>(0);
void _incrementCounter() {
_counter.value++;
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Watcher Builder Demo'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
// 使用WatcherBuilder监听_counter的变化
WatcherBuilder<int>(
watch: () => _counter.value,
builder: (context, value, child) {
return Text(
'You have pushed the button this many times:',
style: Theme.of(context).textTheme.headline4,
);
},
childBuilder: (context, value) {
return Text(
'$value',
style: Theme.of(context).textTheme.headline4,
);
},
),
],
),
),
floatingActionButton: FloatingActionButton(
onPressed: _incrementCounter,
tooltip: 'Increment',
child: Icon(Icons.add),
),
);
}
@override
void dispose() {
// 释放资源
_counter.dispose();
super.dispose();
}
}
在这个示例中,我们使用了ValueNotifier
来创建一个可监听的数据对象_counter
。然后,我们使用WatcherBuilder
来监听这个数据对象的变化。当_counter
的值发生变化时,WatcherBuilder
会自动调用childBuilder
来重建UI。
WatcherBuilder
接收两个主要参数:
watch
:一个返回监听值的函数。childBuilder
:一个根据监听值构建子组件的函数。
此外,还有一个可选的builder
参数,它允许你基于监听值构建一个不依赖于子组件的静态部分。在这个例子中,我们使用builder
来显示一个静态文本,而使用childBuilder
来显示动态变化的计数器值。
请注意,由于watcher_builder
可能不是官方包,其API和用法可能会有所不同,因此请参考其官方文档以获取最新和最准确的信息。如果watcher_builder
包不存在或已过时,可以考虑使用Flutter内置的Provider
、Riverpod
或GetX
等状态管理库来实现类似的功能。