探索 Flutter Bloc 8.0.1 Flutter 中的设计模式
2022/11/1 23:24:58
本文主要是介绍探索 Flutter Bloc 8.0.1 Flutter 中的设计模式,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
集团结构的最新版本是Flutter Bloc 8.0编程模型。当前版本包含对早期版本的各种升级。Flutter 集团布局比版本 7 更加耐用。Flutter Bloc 8.0 序列图提供了一种通过事件管理状态的更好方法。此设计模式有助于将存储过程与外观分开。通过使用 BLoC 设计,可以促进可测试性和重用。
通过抽象模式的反应式组件,该模块使程序员能够专注于创建业务策略。事件处理程序是 Flutter Bloc 8.0 中管理状态的新功能。在这里,我们将 Bloc 8.0 设计用于反向更新项目。
概述
该程序旨在简化BLoC设计模式的实现(业务逻辑组件)。这种面向对象的设计有助于将核心功能与外观分开。通过使用 BLoC 设计,可以促进可测试性和重用。
通过抽象设计的反应式组件,该软件包使开发人员能够专注于设计业务策略。远程 Flutter 程序员是创建用户友好、可访问、高效和视觉上引人注目的移动应用程序的不错选择。
什么是肘?
Cubits 是扩展 BlocBase 并且可以管理任何状态的类。因此,发射前的条件称为Cubit的脉冲响应。肘的当前状态可以使用状态获取,可以通过执行具有单独状态的发射来更改。
Cubit 状态更新从调用可以使用 emit 方法生成新状态的指定函数开始。OnChange 包含当前和下一个状态,在条件更改发生之前调用。
如何设计立方体?
/// A `CounterCubit` which manages an `int` as its state. class CounterCubit extends Cubit { /// The initial state of the `CounterCubit` is 0. CounterCubit() : super(0); /// When an increment is called, the current state /// of the Cubit is accessed via `state` and /// a new `state` is emitted via `emit`. void increment() => emit(state + 1); }
如何使用库比特?
import 'package:flutter/material.dart'; import 'package:flutter_application_1/cubit/example_cubit.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; void main() { runApp(const MyApp()); } class MyApp extends StatelessWidget { const MyApp({super.key}); // This widget is the root of your application. @override Widget build(BuildContext context) { return MaterialApp( title: 'Flutter Demo', theme: ThemeData( primarySwatch: Colors.blue, ), // Create a Instance for the cubit home: BlocProvider( create: (context) => ExampleCubit(), child: HomePage(), ), ); } } class HomePage extends StatelessWidget { HomePage({super.key}); @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: const Text("Cubit Example"), ), body: Center( child: Column( mainAxisAlignment: MainAxisAlignment.center, children: [ const Text( 'You have pushed the button this many times:', ), // Add the bloc builder to rebuild the state BlocBuilder( builder: (context, state) { return Text( state.toString(), style: Theme.of(context).textTheme.headline4, ); }, ), ], ), ), floatingActionButton: FloatingActionButton( //Call the increment function from the cubit class it will update the bloc builder onPressed: () => context.read().increment(), tooltip: 'Increment', child: const Icon(Icons.add), ), ); } }
如何观察肘?
可以覆盖 onChange 以观察单个肘的状态更改。
可以覆盖onError以观察单个肘的错误
class CounterCubit extends Cubit { CounterCubit() : super(0); void increment() => emit(state + 1); @override void onChange(Change change) { super.onChange(change); print(change); } @override void onError(Object error, StackTrace stack trace) { print('$error, $stackTrace'); super.onError(error, stackTrace); } } BlocObserver can be used to observe all cubits. class MyBlocObserver extends BlocObserver { @override void onCreate(BlocBase bloc) { super.onCreate(bloc); print('onCreate -- ${bloc.runtimeType}'); } @override void onChange(BlocBase bloc, Change change) { super.onChange(bloc, change); print('onChange -- ${bloc.runtimeType}, $change'); } @override void onError(BlocBase bloc, Object error, StackTrace stack trace) { print('onError -- ${bloc.runtimeType}, $error'); super.onError(bloc, error, stackTrace); } @override void onClose(BlocBase bloc) { super.onClose(bloc); print('onClose -- ${bloc.runtimeType}'); } } void main() { BlocOverrides.runZoned( () { // Use cubits... }, blocObserver: MyBlocObserver(), ); }
什么是集团?
Bloc 表示一个更复杂的类,它使用事件而不是方法来启动状态更改。Bloc还扩展了BlocBase,它具有与Cubit相当的开放API。但是,Bloc 接受事件并将传入的事件转换为离开状态,而不是调用 Bloc 上的过程并立即发出新状态。
当引入事件时,onEvent 被触发,从而启动 Bloc 中的状态更改。之后,使用EventTransformer来转换事件。默认情况下,每个事件都是连续处理的,但可以提供自定义事件转换器来修改入站事件流。
到达的事件随后调用该数据项的所有指定事件处理程序。为了响应事件,每个事件处理程序必须发出零个或多个值。最后但并非最不重要的一点是,转换(包括当前情况、事件和下一个条件)在修改条件之前不久被调用。
Building a Block /// The events which `CounterBloc` will react to. abstract class CounterEvent {} /// Notifies bloc to increment state. class Increment extends CounterEvent {} /// A `CounterBloc` which handles converting `CounterEvent`s into `int`s. class CounterBloc extends Bloc { /// The initial state of the `CounterBloc` is 0. CounterBloc() : super(0) { /// When an `Increment` event is added, /// the current `state` of the Bloc is accessed via the `state` property /// and a new state are emitted via `emit.` on((event, emit) => emit(state + 1)); } } Using a Bloc void main() { runApp(const MyApp()); } class MyApp extends StatelessWidget { const MyApp({super.key}); // This widget is the root of your application. @override Widget build(BuildContext context) { return MaterialApp( title: 'Flutter Demo', theme: ThemeData( primarySwatch: Colors.blue, ), // Create a Instance for the Bloc home: BlocProvider( create: (context) => ExampleBloc(), child: HomePage(), ), ); } } class HomePage extends StatelessWidget { const HomePage({super.key}); @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: const Text("Bloc Example"), ), body: Center( child: Column( mainAxisAlignment: MainAxisAlignment.center, children: [ const Text( 'You have pushed the button this many times:', ), // Add the bloc builder to rebuild the state BlocBuilder( builder: (context, state) { return Text( state.toString(), style: Theme.of(context).textTheme.headline4, ); }, ), ], ), ), floatingActionButton: FloatingActionButton( //Call the increment function from the cubit class it will update the bloc builder onPressed: () => context.read().add(Increment()), tooltip: 'Increment', child: const Icon(Icons.add), ), ); }
这篇关于探索 Flutter Bloc 8.0.1 Flutter 中的设计模式的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23增量更新怎么做?-icode9专业技术文章分享
- 2024-11-23压缩包加密方案有哪些?-icode9专业技术文章分享
- 2024-11-23用shell怎么写一个开机时自动同步远程仓库的代码?-icode9专业技术文章分享
- 2024-11-23webman可以同步自己的仓库吗?-icode9专业技术文章分享
- 2024-11-23在 Webman 中怎么判断是否有某命令进程正在运行?-icode9专业技术文章分享
- 2024-11-23如何重置new Swiper?-icode9专业技术文章分享
- 2024-11-23oss直传有什么好处?-icode9专业技术文章分享
- 2024-11-23如何将oss直传封装成一个组件在其他页面调用时都可以使用?-icode9专业技术文章分享
- 2024-11-23怎么使用laravel 11在代码里获取路由列表?-icode9专业技术文章分享
- 2024-11-22怎么实现ansible playbook 备份代码中命名包含时间戳功能?-icode9专业技术文章分享