将小部件生成器之类的类成员提取到其他文件?

问题描述 投票:1回答:1

在为我的flutter应用程序开发某些屏幕时,我经常需要根据屏幕状态动态呈现窗口小部件。对于需要创建单独的小部件并包含它的情况,我可以这样做。

但是,在许多用例中,我需要呈现的内容不适合小部件,而是利用了页面中的现有状态。因此,我使用构建器方法将适当的窗口小部件呈现到页面。正如使用Flutter的任何人都知道的那样,这可能会导致冗长的代码,您需要在其中上下滚动很多才能找到所需的内容。

为了获得更好的可维护性,我希望将那些构建器方法移到单独的文件中,然后仅将它们包括在内。这样可以更轻松地处理渲染的特定代码小部件,并使屏幕小部件更加整洁。

但是我还没有找到提取动态窗口小部件代码的适当方法,该方法利用状态,调用状态的更新等。我正在寻找一种类型的“ include”文件,该文件会将代码插入到主窗口中。屏幕并进行渲染,就好像它是核心代码的一部分。

这可能吗?如何实现?

flutter dart flutter-layout
1个回答
0
投票

introduction of extension members,我碰到了这种非常整洁的方式来实现您所描述的目的!

假设您有一个这样定义的extension类:

State

如您所见,有一个局部变量class MyWidgetState extends State<MyWidget> { int cakes; @override void initState() { super.initState(); cakes = 0; } @override Widget build(BuildContext context) { return Builder( builder: (context) => Text('$cakes'), ); } } 和一个cakes函数。现在,提取此构建器的一种非常简洁的方法是:

builder

现在,即使扩展名放在另一个文件中,也可以从extension CakesBuilderExtension on MyWidgetState { Widget cakesBuilder(BuildContext context) { return Text('$cakes'); } } 访问cakes成员。

现在,您将像这样更新extension类(State已更改:]

builder

即使仅在class MyWidgetState extends State<MyWidget> { int cakes; @override void initState() { super.initState(); cakes = 0; } @override Widget build(BuildContext context) { return Builder( builder: cakesBuilder, ); } } 中声明,也可以从cakesBuilder中引用MyWidgetState!>>

注意

CakesBuilderExtension功能需要Dart 2.6。这在稳定频道中尚不可用,但我想应该在2019年底左右。因此,您需要使用extensiondev通道:masterflutter channel dev,并更新flutter channel master文件中的environment约束:

pubspec.yaml
© www.soinside.com 2019 - 2024. All rights reserved.