您好,Flutter 社区

我多年来一直使用C#编程,使用的是Patter型MVVM.

我想换成Ffltter,但我有几个基本的问题.我想从这里的一个开始:

我只能找到在小部件中编程的事件的例子.例如:

    onPressed: () {
      showDialog(
        context: context,
        builder: { context.
          return AlertDialog(
            // Retrieve the text that user has entered by using the
            // TextEditingController.
            content: Text(myController.text),
          );
        },
      );
    },

但我通常会将观点与程序的逻辑分开.因此,因为这样编程清晰,程序的维护也容易得多.

Ffltter也是这种情况吗?如果是这样,代码会是什么样子(因为我还没有找到示例).我以这样的方式想象它:

    onPressed: () {
          showDialog()
    },

方法:

static showDialog()
{
          showDialog(
            context: context,
            builder: (context) {
              return AlertDialog(
                // Retrieve the text that user has entered by using the
                // TextEditingController.
                content: Text(myController.text),
              );
            },
          );
}

提前谢谢你 Pcsasa

推荐答案

总的来说,你的方法是正确的,但是

onPressed: () {
   showDialog()
},

这里的问题是showDialog()依赖于BuildContext context,后者通常只在小部件内部可用.此处的context用于创建AlertDialog.在这种情况下,除非将上下文作为参数传递,否则实际上不可能提取showDialog方法.

因此,如果您要提取的方法以某种形式(如显示对话框)修改了UI,我会保留它.

但对于其他所有事情,比如当按下按钮时从API获取数据,您可以提取该方法.

void fetchData() {
 ...
}

...
onPressed: fetchData, // same as '() => fetchData()'  or '() {fetchData();}'
...

在这里,您需要考虑如何将数据返回到UI中.我可能会使用一个回调函数,在获取数据后更新小部件的状态.

Flutter相关问答推荐

Flutter在创建时为提供者调用初始化函数

在Flutter中创建具有固定行的压缩水平列表

Flutter 数独网格

在Flutter 中创建自定义形状

为什么我的Flutter 动画过渡没有发生?

dotenv:未处理的异常:FileNotFoundError的实例

在使用 Android 12+ 的真实 Android 设备上,SingleChildScrollView 中最初位于视口之外的无响应 Web 视图

创建混合 TextWidget 和 TextFieldWidget

如何在Flutter中的textField中在可编辑文本和前缀图标之间添加空格?

允许文本小部件在容器之间溢出

如何在Flutter中显示ListView Builder区域外的列表数据?

Flutter:如何从运行时创建的列表中访问单个子部件的值

通过一个具体的例子理解Flutter约束的本质

具有 BLOC 和存储库模式的 Flutter Workmanager

如何在 Flutter 中将 ScaffoldMessenger 中的 Snackbar 显示为 Widget?

单元测试中如何比较NaN和NaN是否相等

有任何方法可以在应用程序移动背景恢复时显示 appopenAd

Flutter 中父容器顶部的 Gridview 间距额外区域

在自动完成中 Select 值后保持键盘焦点

Flutter:如何将 AssetImage 转换为 Unit8List?