Flutter:从其他文件中提供 Map to Routes 选项

Ser*_*ant 2 dart flutter

我在这里有点不知所措。

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

我想从不同的文件推送 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;
  }

}
Run Code Online (Sandbox Code Playgroud)

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

当然,我可以将 Map 传递给这个参数,但我想在单独的文件中定义我的路由。

关于如何实现这一点的任何建议?

小智 8

我刚刚遇到了同样的问题并找到了解决方案。

你不需要创建一个类,只需创建一个var等于你的路线Map

主要.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,
    );
  }
}
Run Code Online (Sandbox Code Playgroud)

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(),
};
Run Code Online (Sandbox Code Playgroud)