Flutter:从其他文件提供“映射到路线”选项

时间:2019-05-13 20:41:10

标签: dart flutter

我在这里有点茫然。

    return MaterialApp(
      title: 'App Title',
      theme: ThemeData(brightness: Brightness.dark),
      initialRoute: '/',
      routes: SOMETHING_HERE,
    );

我想从其他文件中推送SOMETHING_HERE,但似乎无法在其中推送正确的值。

其他文件(尝试):

import '../screens/home.dart';
import '../screens/charts.dart';

class Routes {

  factory Routes(context) {
    Map<String, Widget Function(BuildContext)> _routes;
    _routes = {
      '/': (context) => ScreenHome(),
      '/charts': (context) => ScreenCharts(),
    };
    return _routes;
  }

}

这行不通,因为它说: The argument type 'Routes' can't be assigned to the parameter type 'Map<String, (BuildContext) → Widget>'

当然,我只能将Map传递给此参数,但我想在一个单独的文件中定义路线。

关于如何实现此目标的任何建议?

1 个答案:

答案 0 :(得分:1)

我只是遇到了同样的问题并找到了解决方法。

您不需要创建一个类,只需创建一个与您的路线var相等的Map

main.dart:

import 'package:flutter/material.dart';
import './custom_routes.dart';
void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
        theme: ThemeData(brightness: Brightness.dark),
        initialRoute: '/',
        routes: customRoutes,
    );
  }
}

custom_routes.dart:

import 'package:flutter/material.dart';
import '../screens/home.dart';
import '../screens/charts.dart';

var customRoutes = <String, WidgetBuilder>{
  '/': (context) => ScreenHome(),
  '/charts': (context) => ScreenCharts(),
};