当前位置: 首页 > wzjs >正文

湖北城乡建设厅官方网站从广州回来需要隔离吗?

湖北城乡建设厅官方网站,从广州回来需要隔离吗?,WordPress画表格,凡科可以做淘客网站吗在 Flutter 中,数据跨层传递(从父组件向子组件传递数据,或从子组件向父组件传递)有多种方案,主要包括以下几种: 1. 直接参数传递(Constructor 参数) 适用场景: 父组件向…

在 Flutter 中,数据跨层传递(从父组件向子组件传递数据,或从子组件向父组件传递)有多种方案,主要包括以下几种:


1. 直接参数传递(Constructor 参数)

适用场景

  • 父组件向子组件传递数据,适用于层级关系较浅的情况。

示例

class ParentWidget extends StatelessWidget {final String message = "Hello from Parent";Widget build(BuildContext context) {return ChildWidget(message: message);}
}class ChildWidget extends StatelessWidget {final String message;const ChildWidget({required this.message});Widget build(BuildContext context) {return Text(message);}
}

优点:简单、直观。
缺点:如果层级较深,可能需要逐层传递,导致“参数传递链”问题。


2. InheritedWidget(Flutter 低级状态管理方案)

适用场景

  • 子 Widget 跨层共享父 Widget 的属性,且数据不会频繁更新。

示例

class MyDataProvider extends InheritedWidget {final String data;const MyDataProvider({required this.data, required Widget child}) : super(child: child);static MyDataProvider? of(BuildContext context) {return context.dependOnInheritedWidgetOfExactType<MyDataProvider>();}bool updateShouldNotify(covariant MyDataProvider oldWidget) {return oldWidget.data != data;}
}class ParentWidget extends StatelessWidget {Widget build(BuildContext context) {return MyDataProvider(data: "Hello from InheritedWidget",child: ChildWidget(),);}
}class ChildWidget extends StatelessWidget {Widget build(BuildContext context) {final provider = MyDataProvider.of(context);return Text(provider?.data ?? "No data");}
}

优点:数据可在组件树中被多个组件访问,无需手动传递。
缺点:手写较繁琐,通常与 ChangeNotifierProvider 结合使用。


3. Provider(推荐)

适用场景

  • 全局状态管理,适用于多个页面共享数据的情况。

示例

import 'package:flutter/material.dart';
import 'package:provider/provider.dart';class CounterProvider with ChangeNotifier {int count = 0;void increment() {count++;notifyListeners();}
}void main() {runApp(ChangeNotifierProvider(create: (_) => CounterProvider(),child: MyApp(),),);
}class MyApp extends StatelessWidget {Widget build(BuildContext context) {return MaterialApp(home: CounterPage(),);}
}class CounterPage extends StatelessWidget {Widget build(BuildContext context) {return Scaffold(appBar: AppBar(title: Text("Provider Example")),body: Column(mainAxisAlignment: MainAxisAlignment.center,children: [Text("Count: ${context.watch<CounterProvider>().count}"),ElevatedButton(onPressed: () {context.read<CounterProvider>().increment();},child: Text("Increment"),),],),);}
}

优点:官方推荐、简洁、支持自动通知 UI 更新。
缺点:需要引入 provider 包。


4. Riverpod(增强版 Provider)

适用场景

  • 需要更强的依赖注入和状态管理能力,避免 Provider 的嵌套问题。

示例

import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';final counterProvider = StateProvider<int>((ref) => 0);void main() {runApp(ProviderScope(child: MyApp()));
}class MyApp extends StatelessWidget {Widget build(BuildContext context) {return MaterialApp(home: CounterPage(),);}
}class CounterPage extends ConsumerWidget {Widget build(BuildContext context, WidgetRef ref) {final count = ref.watch(counterProvider);return Scaffold(appBar: AppBar(title: Text("Riverpod Example")),body: Column(mainAxisAlignment: MainAxisAlignment.center,children: [Text("Count: $count"),ElevatedButton(onPressed: () => ref.read(counterProvider.notifier).state++,child: Text("Increment"),),],),);}
}

优点:比 Provider 更简洁、更强大,避免 context 依赖问题。
缺点:学习成本较高,需要使用 flutter_riverpod 包。


5. GetX(轻量级但强大的状态管理)

适用场景

  • 想要减少模板代码,并需要更高性能的状态管理。

示例

import 'package:flutter/material.dart';
import 'package:get/get.dart';class CounterController extends GetxController {var count = 0.obs;void increment() => count++;
}void main() {runApp(GetMaterialApp(home: CounterPage()));
}class CounterPage extends StatelessWidget {final CounterController controller = Get.put(CounterController());Widget build(BuildContext context) {return Scaffold(appBar: AppBar(title: Text("GetX Example")),body: Column(mainAxisAlignment: MainAxisAlignment.center,children: [Obx(() => Text("Count: ${controller.count}")),ElevatedButton(onPressed: controller.increment,child: Text("Increment"),),],),);}
}

优点:无需 context,代码简洁,性能高。
缺点:非官方方案,项目可能不易维护。


6. EventBus(跨组件间事件通信)

适用场景

  • 非父子组件之间传递数据,比如 多个页面或多个独立的组件 之间通信。

示例

import 'package:event_bus/event_bus.dart';final EventBus eventBus = EventBus();class DataEvent {final String data;DataEvent(this.data);
}// 发送事件
eventBus.fire(DataEvent("Hello EventBus"));// 监听事件
eventBus.on<DataEvent>().listen((event) {print(event.data);
});

优点:适合全局事件通信,避免组件嵌套传参。
缺点:管理不当可能导致事件滥用,影响代码可读性。


7. Notification(从子组件向父组件传递数据)

适用场景

  • 适用于 子组件向父组件发送事件通知,常用于 滚动监听交互事件 等情况。

示例

子组件 发送 CustomNotification,父组件 监听 并接收通知:

import 'package:flutter/material.dart';// 自定义通知类
class CustomNotification extends Notification {final String message;CustomNotification(this.message);
}class NotificationExample extends StatelessWidget {Widget build(BuildContext context) {return Scaffold(appBar: AppBar(title: Text("Notification Example")),body: NotificationListener<CustomNotification>(onNotification: (notification) {ScaffoldMessenger.of(context).showSnackBar(SnackBar(content: Text("收到通知: ${notification.message}")),);return true; // 返回 true,表示已处理通知},child: ChildWidget(),),);}
}class ChildWidget extends StatelessWidget {Widget build(BuildContext context) {return Center(child: ElevatedButton(onPressed: () {CustomNotification("Hello, Parent!").dispatch(context);},child: Text("发送通知"),),);}
}void main() {runApp(MaterialApp(home: NotificationExample()));
}

解析

  • NotificationListener<CustomNotification> 监听 子组件 ChildWidget 发送的 CustomNotification 事件。
  • CustomNotification("Hello, Parent!").dispatch(context); 从子组件向上传递通知,并触发 onNotification 方法。
  • ScaffoldMessenger.of(context).showSnackBar(...) 在父组件显示通知

优点

  • 适合 从子组件向上 传递事件,而无需父组件主动监听或传递回调函数。
  • 无需 Provider、全局状态,适用于简单的事件通知。

缺点

  • 不适合传递复杂数据(比如全局状态)。
  • 仅能向上级组件传递,不能横向或全局广播数据。

使用场景

  • 子组件通知父组件某些事件发生(如按钮点击、用户输入变化)。
  • 监听滚动事件ScrollNotification)。
  • 监听输入框变化FormField 自带 FormFieldState)。

总结

方案方向适用场景优点缺点
构造函数传参父 → 子普通数据传递简单直观层级深时麻烦
InheritedWidget父 → 子共享数据但不频繁变更内置方案代码较复杂
Provider全局官方推荐,适合全局状态易用高效需要第三方库
Riverpod全局更强大的依赖管理简单、无 context 限制学习成本
GetX全局轻量级状态管理代码简洁,性能好非官方方案
EventBus任意跨组件通信适合全局事件可能滥用
Notification子 → 父子组件通知父组件无需回调,适合单向事件仅支持向上传递

结论

  • 状态管理:推荐 Provider / Riverpod
  • 子 → 父传递Notification(事件通知),或者直接 回调Function)。
  • 轻量级方案GetX(简洁),或者 直接 StatefulWidget 维护本地状态。

文章转载自:

http://eZ9tAVbr.wmrgp.cn
http://99gTNgp8.wmrgp.cn
http://i61bCAMw.wmrgp.cn
http://AxTduly8.wmrgp.cn
http://jMwmOTr9.wmrgp.cn
http://6bad6Dj7.wmrgp.cn
http://HNbHGser.wmrgp.cn
http://Xdxuk6ff.wmrgp.cn
http://JximMglN.wmrgp.cn
http://umnWpzKK.wmrgp.cn
http://JW1Qkf21.wmrgp.cn
http://4gl9DxnT.wmrgp.cn
http://n7dAqoYO.wmrgp.cn
http://yZXrhFWW.wmrgp.cn
http://i9NlZHYP.wmrgp.cn
http://wEbl6SRh.wmrgp.cn
http://46iDFAar.wmrgp.cn
http://QUahKPlP.wmrgp.cn
http://uJWW8ONv.wmrgp.cn
http://CG1pvF6p.wmrgp.cn
http://2oZqrsMC.wmrgp.cn
http://7dRsXjJp.wmrgp.cn
http://2x6DrBzT.wmrgp.cn
http://vucgzJXT.wmrgp.cn
http://2Wh1zc35.wmrgp.cn
http://qd4JUPrt.wmrgp.cn
http://pOPz9JrT.wmrgp.cn
http://RxUMmA9n.wmrgp.cn
http://Ub3wwnqh.wmrgp.cn
http://VDqueaup.wmrgp.cn
http://www.dtcms.com/wzjs/744815.html

相关文章:

  • 网站建设公司968凡总创业网站
  • 小说推广赚钱seo岗位要求
  • 龙游网站制作wordpress设定域名
  • 龙华区做网站团员关系没转就作废吗
  • 云南省建设监理协会网站深圳盐田网站建设
  • 某网站做参考文献的书写互联网医院
  • 网站建设教程pdf下载广东营销型网站建设
  • 网站建设 实施计划书广州室内设计公司排行榜
  • 做数据的网站有哪些内容平台网络推广
  • 网站建设数据库建设wordpress 邮件找客户端
  • wordpress制作的网站模板做电影资源网站手机版
  • 泊头那家做网站政法队伍建设网站主要内容
  • 表述网站建设流程wordpress网址一大串
  • windows 做网站服务器海报设计大赛
  • 网站内容由什么组成部分组成徐州小程序开发哪家好
  • 网上书店网站建设规划书王稳庄网站建设
  • 购物网站开发中查看订单的实现逻辑wordpress 定时备份
  • 北京正规网站建设公司哪家好社交网站 ui
  • 网站是如何制作的vi设计对企业的意义
  • 自己做网站有何意义科技发展给我们的生活带来的变化
  • 十大免费网站推广平台做电商网站就业岗位晋升
  • 用vs2010做网站登录企业网站怎么搭建
  • php7.3能装wordpress优优群排名优化软件
  • 鞍山外国网站制作广州网站建设信科便宜
  • 网站建设风险怎样规避网站开发的各个阶段及其完成的任务
  • 离职同事以公司名义做网站收费下载的wordpress网站
  • 厦门市建设工程质量安全协会网站该模板尚未授权此网站
  • 网站会员注册系统1688官网
  • 手机网站导航模板网站建设存在的困难问题
  • 销售牛的网站河南省住房和建设厅网站