如何在flutter中将类实例引用作为通用类型传递

时间:2019-06-05 06:32:02

标签: flutter dart

我的目标是创建一个方法,该方法将使用buildcontext和屏幕引用的参数,并使用提供的详细信息对其进行相应处理。我的部分代码如下。帮助将不胜感激。

我的助手类

import 'package:flutter/material.dart';

class Utils {

 static routToPage <T> (BuildContext context,  <T> page){
  Navigator.of(context).push(MaterialPageRoute(builder: (context) =>page);
 }
}

我要访问的班级

import './utils'
import 'package:flutter/material.dart';

class Home extends StatelessWidget {
   navigateToPage(){
    Utils.rout(BuildContext context, PageTwo())
   }
}

目前由于语法错误,我坚持使用自己的方法。

2 个答案:

答案 0 :(得分:0)

好吧,我认为不需要创建静态类。这是一个有效的示例。

将以下方法粘贴到dart文件中。

void navigateToScreen(BuildContext context, Widget widget) {
  Navigator.of(context).push(MaterialPageRoute(
    builder: (_) => widget,
  ));
}

并使用该类进行导航,例如

navigateToScreen(buildContext, YourNavigationScreen());

答案 1 :(得分:-1)

我更喜欢使用Widget作为对象参数,而不是<T>

您还可以通过使用这样的路线来检查导航到另一页的最简单方法。

在(您的项目)/lib/route/routes.dart中创建路由

import './page/main_page.dart';
import './page/one_page.dart';
import './page/two_page.dart';

final routes = {
  '/': (BuildContext context) => MainPage(),
  '/pageone': (BuildContext context) => PageOne(),
  '/pagetwo': (BuildContext context) => PageTwo(),
}

(您的项目)/lib/main.dart中的主页

import './route/routes.dart';

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    SystemChrome.setEnabledSystemUIOverlays([]);
    return MaterialApp(
      initialRoute: '/', // the default route is MainPage()
      routes: routes,
    );
  }
}

导航到其他页面时,您可以简单地使用以下Navigator.pushNamedNavigator.popAndPushNamedNavigator.pushNamedAndRemoveUntilNavigator.pushReplacementNamed中的任何一个

// your can simple change the route of your choice by changing the name of route
Navigator.pushNamed(context, '/pageone');
Navigator.popAndPushNamed(context, '/pagetwo');
...