我正在尝试创建页面以放入抽屉的body属性中,该属性等于本机android的片段。 我想将容器放在dart文件中,以便每个容器都有其自己的生命周期。 我在一些教程中看到过,人们将容器放在抽屉自己的文件中,这不是我的意图。
这是我需要帮助的代码示例。
dashboard_view.dart
Timer timer = new Timer
{
Interval = 2000
};
timer.Enabled = true;
timer.Elapsed += new ElapsedEventHandler(OnTimerEvent);
private static void OnTimerEvent(object sender, EventArgs e)
{
//your process
}
conference_view.dart
class Dashboard extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
theme: AppStyles.lightTheme(),
home: DashboardView(),
onGenerateRoute: AppRoutes().getRoutes,
);
}
}
class DashboardView extends StatefulWidget {
@override
State<StatefulWidget> createState() => DashboardState();
}
class DashboardState extends State<DashboardView> {
String page = AppRoutes.APP_ROUTE_CONFERENCE;
Widget _selectPage(BuildContext context, String page) {
if (page == "/conference") {
Navigator.of(context).pushNamed(page);
} else {
return Container(child: Text("Dashboard"));
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(APPStrings.APP_NAME),
elevation:
defaultTargetPlatform == TargetPlatform.android ? 5.0 : 0.0,
),
drawer: Drawer(
child: ListView(
children: <Widget>[
UserAccountsDrawerHeader(
accountName: Text(APPStrings.MOCK_NAME),
accountEmail: Text(APPStrings.MOCK_MAIL),
currentAccountPicture: CircleAvatar(
backgroundColor: Theme.of(context).primaryColor,
child: Text(APPStrings.MOCK_SINGLE_NAME),
),
),
ListTile(
title: Text(APPStrings.CONFERENCE_INVOICE),
trailing: Icon(Icons.check_circle),
onTap: () =>
_selectPage(context, AppRoutes.APP_ROUTE_CONFERENCE),
)
],
),
),
body: _selectPage(context, AppRoutes.APP_ROUTE_DASHBOARD));
}
}
app_routes.dart
class Conference extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
theme: AppStyles.lightTheme(),
home: ConferenceView(),
onGenerateRoute: AppRoutes().getRoutes,
);
}
}
class ConferenceView extends StatefulWidget {
@override
State<StatefulWidget> createState() => ConferenceState();
}
class ConferenceState extends State<ConferenceView> {
@override
Widget build(BuildContext context) {
return Container(
child: Center(
child: Text(APPStrings.CONFERENCE),
),
);
}
}
app.dart
class AppRoutes {
static const String APP_ROUTE_LOGIN = "/login";
static const String APP_ROUTE_DASHBOARD = "/dashboard";
static const String APP_ROUTE_CONFERENCE = "/conference";
Route getRoutes(RouteSettings routeSettings) {
switch (routeSettings.name) {
case APP_ROUTE_DASHBOARD:
{
return MaterialPageRoute<void>(
settings: routeSettings,
builder: (BuildContext context) => Dashboard(),
);
}
case APP_ROUTE_CONFERENCE:
{
return MaterialPageRoute(
settings: routeSettings,
builder: (BuildContext context) => Conference(),
);
}
break;
default:
return MaterialPageRoute<void>(
settings: routeSettings,
builder: (BuildContext context) => Dashboard(),
);
}
}
}