我刚刚将我的flutter_bloc
库更新为以下6.1.1
状态:
bloc' 已弃用,不应使用。改用 context.read 或 context.watch。将在 v7.0.0 中移除。尝试使用替换来替换已弃用成员的使用。
这是我必须更改的部分代码:
class ContractSubscriptionForm extends StatelessWidget {
final ContractSubscription contractSubscription;
const ContractSubscriptionForm(this.contractSubscription, {Key key})
: super(key: key);
@override
Widget build(BuildContext context) {
return BlocProvider(
create: (context) => ContractSubscriptionFormBloc(
contractSubscription,
context.read<CoursesGroupBloc>().state.coursesGroupList, // <---change to .read()
),
child: SubscriptionFormBody(),
);
}
}
Run Code Online (Sandbox Code Playgroud)
我确实改变的部分是这样的:context.bloc<CoursesGroupBloc>().state.coursesGroupList,
到context.read<CoursesGroupBloc>().state.coursesGroupList,
并且现在正在工作。
在该.read()
函数的文档中,我阅读了以下内容:
这种方法与[watch]相反。当值改变时,它不会重新生成widget,并且不能在[StatelessWidget.build]/[State.build]中调用。另一方面,它可以在这些方法之外自由调用。
出于某种原因,这是没有意义的,因为上面的代码在build
StatelessWidget 的a 中,并且正在处理.read()
函数而不是.watch()
.
我错过了什么吗?
我正在尝试写一个习惯onChange
和watch
变化。
错误:
观看者myValue
不会注册下拉列表中的更改。有什么想法吗?
根据API 文档,可以通过执行以下操作来实现:
export default function App() {
const { register, watch } = useForm();
const fruits = register("fruits");
const myValue = watch("fruits", "default");
return (
<div className="App">
<h1>{myValue}</h1>
<select
onChange={(e) => {
fruits.onChange(e); // react hook form onChange
console.log("Here would go the my onChange"); // my onChange
}}
onBlur={fruits.onBlur}
ref={fruits.ref}
>
<option value="1Banana">Banana</option>
<option value="1Kiwi">Kiwi</option>
<option value="1Mango">Mango</option>
</select>
</div>
);
}
Run Code Online (Sandbox Code Playgroud)
您可以在这里找到上面的示例:
在 Flutter 中,我想使用table_calendar 包中的日历来设置班次并将员工分配给他们。
为此,我还使用sqflite 包中的本地数据库。
我在网上看到了一些教程,例如Database Storage in Flutter using Sqflite,将数据库与 Bloc 技术结合起来。
对于我的日历,我需要一个Map<DateTime,List<dynamic>>
来控制事件。到目前为止,我使用了一个静态地图,我将在不同的类中使用它,例如shift_form和shift_calendar。
Bloc 的实现将以这样的方式开始:
class ShiftBloc extends Bloc<ShiftEvent, Map<DateTime,List<dynamic>> {...
为什么应该使用 Bloc 而不是静态 Map?
另外是否可以使用 Bloc 作为 Map 数据结构?编辑:-> 是的
但是,我应该如何为从 Firestore 获取的流实现块作为映射而不是列表呢?
PS 我正在使用Flutter Firestore Todos 教程结构。