【发布时间】:2021-02-23 15:28:24
【问题描述】:
我目前有一个像这样的简单混合:
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 的类的构造函数(甚至是其他静态方法)?
【问题讨论】: