flutter - 尝试从 dart mixin 调用类构造函数时,错误 T 不是函数
问题描述
我目前有一个像这样的简单混合:
import 'package:flutter/material.dart';
mixin PageNav on StatefulWidget {
pushPage(BuildContext context) {
Navigator.push(
context,
MaterialPageRoute(builder: (context) => this)
);
}
}
这个 mixin 让我不必在每个“页面”的 StatefullWidget 中定义 pushPage 方法。所以它消除了以下样板:
class PageTwo extends StatefulWidget {
static pushPage(BuildContext context) {
Navigator.push(
context,
MaterialPageRoute(builder: (context) => PageTwo())
);
}
@override
_PageTwoState createState() => _PageTwoState();
}
请注意,该方法是静态的并调用 StatefulWidget 构造函数。
因此,mixin 的使用方式如下(在用户可能导航到的任何其他页面或小部件上):
class PageOne extends StatefulWidget with PageNav {
@override
_PageOneState createState() => _PageOneState();
}
然后用户可以从其他地方导航到此页面:
TextButton(
onPressed: () => PageOne().pushPage(context),
child: Text('Go to PageOne'),
),
这可行并且没问题,但如果我能做到这一点会更好,就像 PageTwo 示例一样,如下所示:
TextButton(
onPressed: () => PageOne.pushPage(context),
child: Text('Go to PageOne'),
),
这里 pushPage 是一个静态成员,所以 mixin 定义需要改变......
我尝试了以下方法,但它阻碍了:
import 'package:flutter/material.dart';
mixin PageNav<T> on StatefulWidget {
static pushPage(BuildContext context) {
Navigator.push(
context,
MaterialPageRoute(builder: (context) => T()) // Error: T isn't a function
);
}
}
那么如何访问应用了 mixin 的类的构造函数(甚至其他静态方法)(从静态方法)?
解决方案
如果您的目标只是避免为 using 编写样板文件Navigator.push()
,
那么有两种方法可以完成此操作。
您可以使用
GetX
具有简单界面的软件包,例如Get.to(() => Page2());
(是的,没有BuildContext
)您可以简单地
static
在下面的实用程序类中创建一个方法并在不初始化类的情况下调用它:
class PageNavigator {
static pushPage(BuildContext context, Widget destination) {
Navigator.push(
context,
MaterialPageRoute(builder: (_) => destination));
}
}
像这样使用它:PageNavigator.pushPage(context, MainScreen())
推荐阅读
- tensorflow - 用于时间序列异常检测的 Keras LSTM-VAE(变分自动编码器)
- r - 在函数 R 中使用胶水为多个站点创建动态 IP 地址
- amazon-web-services - 将 Flutter 应用程序连接到 DynamoDb 数据库
- python - 如何使用matplotlib分组绘制坐标轴
- sqlalchemy - 数据被删除,没有任何级联删除选项添加到 sql alchemy
- java - 我的 android studio 应用程序在模拟器上成功运行,但在我真正的 android 智能手机上却没有
- pandas - Pandas - 输出中不存在 KeyError 作为列
- dictionary - 将 Ansible 字典列表转换为单个列表未按预期显示
- php - 如何在 shopify 中获取“在线商店”销售渠道产品?
- android - 是否可以强制卸载我的应用程序?