Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过使用Flutter制作的命名路由Android应用程序传递参数_Flutter_Dart - Fatal编程技术网

通过使用Flutter制作的命名路由Android应用程序传递参数

通过使用Flutter制作的命名路由Android应用程序传递参数,flutter,dart,Flutter,Dart,我在AppBrewery学习了一门关于颤振的课程,实际上这是我对编程的介绍,所以这门课程很值得学习 我当时正在制作一个BMI体重指数计算器的模块,并且正在学习命名和映射路线。我们被要求在应用程序中创建路线,我选择了映射路线方法。 而且效果很好 当我观看视频时,她使用了命名路线,因为它只有两个屏幕,但由于它起作用,我就把它放在那里 稍后在模块中,我不得不将一些参数传递到第二页,很清楚如何使用命名路由,但我的代码没有成功 有人能告诉我为什么我一直传递空参数,即使我的代码中目前没有错误 这是我的档案

我在AppBrewery学习了一门关于颤振的课程,实际上这是我对编程的介绍,所以这门课程很值得学习

我当时正在制作一个BMI体重指数计算器的模块,并且正在学习命名和映射路线。我们被要求在应用程序中创建路线,我选择了映射路线方法。 而且效果很好

当我观看视频时,她使用了命名路线,因为它只有两个屏幕,但由于它起作用,我就把它放在那里

稍后在模块中,我不得不将一些参数传递到第二页,很清楚如何使用命名路由,但我的代码没有成功

有人能告诉我为什么我一直传递空参数,即使我的代码中目前没有错误

这是我的档案

主飞镖

 import 'package:bmi_calculator/results_page.dart';
import 'package:flutter/material.dart';
import 'input_page.dart';

void main() => runApp(BMICalculator());

class BMICalculator extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      theme: ThemeData.dark().copyWith(
        primaryColor: Color(0XFF0A0E21),
        scaffoldBackgroundColor: Color(0XFF0A0E21),
      ),
      initialRoute: '/',
      routes: {
        '/': (context) => InputPage(),
        '/results': (context) => ResultsPage(),
      },
    );
  }
}
我的输入页面是最重要的部分

    Gender selectedGender;
  int initialHeight = 180;
  int initialWeight = 60;
  int initialAge = 30;

          BottomButton(
            buttonTitle: 'CALCULATE',
            onPress: () {
              CalculatorBrain calc =
                  CalculatorBrain(height: initialHeight, weight: initialWeight);
              Navigator.pushNamed(
                context,
                '/results',
                arguments: ResultsPage(
                  bmiResults: calc.calculateBMI(),
                  resultText: calc.getResult(),
                  resultSummary: calc.getResultSummary(),
                ),
              );
              //Navigate to ResultsPage
            },
          ),
        ],
      ),
    );
  }
}
还有计算器课

   import 'dart:math';

class CalculatorBrain {
  CalculatorBrain({this.height, this.weight});

  final int height;
  final int weight;
  double _bmi;

  String calculateBMI() {
    double _bmi = weight / pow(height / 100, 2);
    return _bmi.toStringAsFixed(1);
  }

  String getResult() {
    if (_bmi >= 25) {
      return 'OVERWEIGHT';
    } else if (_bmi > 18.5) {
      return 'NORMAL';
    } else {
      return 'UNDERWEIGHT';
    }
  }

  String getResultSummary() {
    if (_bmi >= 25) {
      return 'You have a higher than normal body weight.  Try to exercise more.';
    } else if (_bmi > 18.5) {
      return 'You have a normal body weight.  Good Job';
    } else {
      return 'You have a lower than normal body weight.  You can eat a bit more.';
    }
  }
}

您的见解将受到这位新手的赞赏。我确实在《颤振食谱》中看到了一个不错的博士,但我仍然很难理解。

您需要通过
屏幕参数
类处理参数:

放映:

Navigator.pushNamed(
上下文
“/结果”,
//你的论点
参数:ScreenArguments(),
);
进入新屏幕:

@覆盖
小部件构建(构建上下文){
final ScreenArguments args=ModalRoute.of(context.settings.arguments);
//你的代码
}

此外,您还可以在中找到所有可能的方法来通过Flatter SDK提供路由。

您需要通过
ScreenArguments
类使用参数:

放映:

Navigator.pushNamed(
上下文
“/结果”,
//你的论点
参数:ScreenArguments(),
);
进入新屏幕:

@覆盖
小部件构建(构建上下文){
final ScreenArguments args=ModalRoute.of(context.settings.arguments);
//你的代码
}

此外,您还可以在中找到所有可能的方法,通过颤振SDK提供路由。

颤振导航器2.0非常适合您的需要。是一篇同样的文章。

颤振导航器2.0非常适合您的需要。是一篇同样的文章。

用于传递参数

Navigator.pushNamed(
            context,
            '/results',
            arguments: {
              'bmiResults': calc.calculateBMI(),
              'resultText': calc.getResult(),
              'resultSummary': calc.getResultSummary(),
            },
          );
路线组

class BMICalculator extends StatelessWidget {


@override
  Widget build(BuildContext context) {
    return MaterialApp(
      theme: ThemeData.dark().copyWith(
        primaryColor: Color(0XFF0A0E21),
        scaffoldBackgroundColor: Color(0XFF0A0E21),
      ),
      initialRoute: '/',
      onGenerateRoute: RouteManager.generateRoute,
    );
  }
}
路由管理器

class RouteManager {
  static Route<dynamic> generateRoute(RouteSettings settings) {
    final args = settings.arguments;

    switch (settings.name) {
      case '/':
        return getRouteFor(
          InputPage(),
        );

      case '/results':
        if (args is Map) {
          return getRouteFor(
            ResultsPage(
              bmiResults: args['bmiResults'],
              resultText: args['resultText'],
              resultSummary: args['resultSummary'],
            ),
          );
        }

        return _underConstructionRoute();

      default:
        return _underConstructionRoute();
    }
  }

  static Route<dynamic> getRouteFor(Widget widget) {
    return Platform.isIOS
        ? CupertinoPageRoute(builder: (_) => widget)
        : MaterialPageRoute(builder: (_) => widget);
  }

  static Route<dynamic> _underConstructionRoute() {
    return getRouteFor(
      Scaffold(
        appBar: AppBar(
          title: Text(title),
          centerTitle: true,
        ),
        body: Center(
          child: Text(
            'Under Construction',
            style: TextStyle(
              fontSize: 40,
            ),
          ),
        ),
      ),
    );
  }
}
类路由管理器{
静态路由生成器输出(路由设置){
最终参数=settings.arguments;
开关(设置.名称){
案例“/”:
返回getRouteFor(
InputPage(),
);
案例“/结果”:
如果(args是映射){
返回getRouteFor(
结果页面(
bmiResults:args['bmiResults'],
resultText:args['resultText'],
resultSummary:args['resultSummary'],
),
);
}
返回_understructionroute();
违约:
返回_understructionroute();
}
}
静态路由getRouteFor(小部件){
返回平台
?CupertinoPageRoute(生成器:()=>小部件)
:MaterialPage路由(生成器:()=>小部件);
}
静态路由_UnderstructionRoute(){
返回getRouteFor(
脚手架(
appBar:appBar(
标题:文本(标题),
标题:对,
),
正文:中(
子:文本(
"在建",,
样式:TextStyle(
尺寸:40,
),
),
),
),
);
}
}
检查ResoCoder提供的详细信息。并添加必要的导入。

用于传递参数

Navigator.pushNamed(
            context,
            '/results',
            arguments: {
              'bmiResults': calc.calculateBMI(),
              'resultText': calc.getResult(),
              'resultSummary': calc.getResultSummary(),
            },
          );
路线组

class BMICalculator extends StatelessWidget {


@override
  Widget build(BuildContext context) {
    return MaterialApp(
      theme: ThemeData.dark().copyWith(
        primaryColor: Color(0XFF0A0E21),
        scaffoldBackgroundColor: Color(0XFF0A0E21),
      ),
      initialRoute: '/',
      onGenerateRoute: RouteManager.generateRoute,
    );
  }
}
路由管理器

class RouteManager {
  static Route<dynamic> generateRoute(RouteSettings settings) {
    final args = settings.arguments;

    switch (settings.name) {
      case '/':
        return getRouteFor(
          InputPage(),
        );

      case '/results':
        if (args is Map) {
          return getRouteFor(
            ResultsPage(
              bmiResults: args['bmiResults'],
              resultText: args['resultText'],
              resultSummary: args['resultSummary'],
            ),
          );
        }

        return _underConstructionRoute();

      default:
        return _underConstructionRoute();
    }
  }

  static Route<dynamic> getRouteFor(Widget widget) {
    return Platform.isIOS
        ? CupertinoPageRoute(builder: (_) => widget)
        : MaterialPageRoute(builder: (_) => widget);
  }

  static Route<dynamic> _underConstructionRoute() {
    return getRouteFor(
      Scaffold(
        appBar: AppBar(
          title: Text(title),
          centerTitle: true,
        ),
        body: Center(
          child: Text(
            'Under Construction',
            style: TextStyle(
              fontSize: 40,
            ),
          ),
        ),
      ),
    );
  }
}
类路由管理器{
静态路由生成器输出(路由设置){
最终参数=settings.arguments;
开关(设置.名称){
案例“/”:
返回getRouteFor(
InputPage(),
);
案例“/结果”:
如果(args是映射){
返回getRouteFor(
结果页面(
bmiResults:args['bmiResults'],
resultText:args['resultText'],
resultSummary:args['resultSummary'],
),
);
}
返回_understructionroute();
违约:
返回_understructionroute();
}
}
静态路由getRouteFor(小部件){
返回平台
?CupertinoPageRoute(生成器:()=>小部件)
:MaterialPage路由(生成器:()=>小部件);
}
静态路由_UnderstructionRoute(){
返回getRouteFor(
脚手架(
appBar:appBar(
标题:文本(标题),
标题:对,
),
正文:中(
子:文本(
"在建",,
样式:TextStyle(
尺寸:40,
),
),
),
),
);
}
}

检查ResoCoder提供的详细信息。并添加必要的导入。

tyvm现在更有意义tyvm现在更有意义我一定要把它放在我的阅读列表上我一定要把它放在我的阅读列表上