Flutter上下文管理插件full_context的使用
Flutter上下文管理插件full_context的使用
特性
- 可以通过FullContext小部件创建类型提供者;
- 在FullContext的子组件中可以通过其类型在上下文中操作状态。
入门
添加类型提供者并创建一个类型:
Widget build(BuildContext context) => FullContext(
onInit: (context) => context.set<int>(1), // 初始化状态值为1
builder: (context) => YourWidget(), // 构建你的组件
);
使用
当有FullContext作为直接或间接的父组件,并且所需的类型已启动时:
Widget build(BuildContext context) => InkWell(
onTap: () => context.emit<int>(context.get<int>() + 1), // 点击事件更新状态值
child: FCBuilder<int>((context, snapshot) =>
snapshot.hasData
? Text(snapshot.data!) // 如果有数据则显示文本
: const CircularProgressIndicator(), // 否则显示加载指示器
),
);
除了context.set<S>(state)
,context.emit<S>(state)
和 context.get<S>()
之外,我们还有以下方法:
context.get$<S>()
返回ValueStream<S>
;context.init<S>()
开始类型S
而不设置初始状态。请注意,context.get<S>()
只能在第一次调用context.emit<S>(state)
之后使用;context.emitError<S, E>(E error, [StackTracer? stackTracer])
;context.close<S>()
关闭S
流。
其他信息
你好,我是Lucas,这个包的作者。我是巴西人,并希望在未来为这个项目添加工厂,当然,在此之前使现有的东西更加简洁。
未来目标
- 添加工厂;
- 创建自动化测试;
- 创建一个像样的示例。
我的目标是使这个项目类似于ASP.NET CORE的服务,唯一的区别是在手动实例化时使用上下文。
完整示例
为了更好地理解如何使用full_context插件,下面是一个完整的示例:
import 'package:flutter/material.dart';
import 'package:full_context/full_context.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
home: FullContext(
onInit: (context) => context.set<int>(0), // 初始化状态值为0
builder: (context) => Scaffold(
appBar: AppBar(title: Text('FullContext Example')),
body: CounterWidget(),
),
),
);
}
}
class CounterWidget extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
FCBuilder<int>(
builder: (context, snapshot) {
if (snapshot.hasData) {
return Text(
'Count: ${snapshot.data}',
style: TextStyle(fontSize: 24),
);
} else {
return CircularProgressIndicator();
}
},
),
SizedBox(height: 20),
ElevatedButton(
onPressed: () => context.emit<int>(context.get<int>() + 1),
child: Text('Increment'),
),
],
),
);
}
}
更多关于Flutter上下文管理插件full_context的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter上下文管理插件full_context的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
full_context
是一个用于 Flutter 的上下文管理插件,它旨在简化 Flutter 应用中上下文(BuildContext
)的管理和使用。通过 full_context
,开发者可以更方便地获取和管理上下文,特别是在需要跨组件传递上下文或避免重复传递上下文的场景中。
安装
首先,你需要在 pubspec.yaml
文件中添加 full_context
插件的依赖:
dependencies:
flutter:
sdk: flutter
full_context: ^1.0.0 # 请使用最新版本
然后运行 flutter pub get
来安装依赖。
基本使用
full_context
提供了一个 FullContext
类,它可以帮助你在应用中管理上下文。以下是一些基本的使用方法:
1. 初始化 FullContext
在你的应用启动时,初始化 FullContext
。通常,你可以在 main.dart
文件中进行初始化:
import 'package:flutter/material.dart';
import 'package:full_context/full_context.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
// 初始化 FullContext
FullContext.init(context);
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: MyHomePage(),
);
}
}
2. 获取上下文
在应用的任何地方,你都可以通过 FullContext
获取当前的上下文:
class MyHomePage extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('FullContext Example'),
),
body: Center(
child: ElevatedButton(
onPressed: () {
// 通过 FullContext 获取上下文
BuildContext context = FullContext.getContext();
Navigator.push(context, MaterialPageRoute(builder: (context) => SecondPage()));
},
child: Text('Go to Second Page'),
),
),
);
}
}
3. 更新上下文
如果你需要在某个组件中更新上下文,可以使用 FullContext.updateContext
方法:
class SecondPage extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
// 更新 FullContext 中的上下文
FullContext.updateContext(context);
return Scaffold(
appBar: AppBar(
title: Text('Second Page'),
),
body: Center(
child: ElevatedButton(
onPressed: () {
// 使用 FullContext 获取上下文
BuildContext context = FullContext.getContext();
Navigator.pop(context);
},
child: Text('Go Back'),
),
),
);
}
}