如何在函数中获取上下文?

问题描述

我需要为我的导航器推送获取上下文,我的函数 _navigate 上有这个导航器。我尝试了类似 _navigate(BuildContext context) 之类的东西,但是我得到了一个错误,比如“type (BuildContext) => dynamic 不是 type() => void 的子类型。这是 Navigator.push 的第一个上下文我不知道如何得到它。

import 'package:flutter/material.dart';
import 'package:pandora_etna/assistance.dart';
import 'dart:math';
import 'package:vector_math/vector_math.dart' show radians;
import 'package:font_awesome_flutter/font_awesome_flutter.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  // This widget is the root of your application.
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
          backgroundColor: Color(0xFFB3E5FC),body: SizedBox.expand(child: RadialMenu())),);
  }
}

class RadialMenu extends StatefulWidget {
  createState() => _RadialMenuState();
}

class _RadialMenuState extends State<RadialMenu>
    with SingleTickerProviderStateMixin {
  AnimationController controller;

  void initState() {
    super.initState();
    controller =
        AnimationController(duration: Duration(milliseconds: 900),vsync: this);
  }

  Widget build(BuildContext context) {
    return RadialAnimation(controller: controller);
  }
}

class RadialAnimation extends StatelessWidget {
  RadialAnimation({Key key,this.controller})
      : scale = Tween<double>(
          begin: 1.5,end: 0.0,).animate(
          CurvedAnimation(parent: controller,curve: Curves.fastOutSlowIn),),translation = Tween<double>(
          begin: 0.0,end: 100.0,curve: Curves.linear),rotation = Tween<double>(begin: 0.0,end: 360.0).animate(
          CurvedAnimation(
              parent: controller,curve: Interval(
                0.0,0.7,curve: Curves.decelerate,)),super(key: key);

  final AnimationController controller;
  final Animation<double> scale;
  final Animation<double> translation;
  final Animation<double> rotation;

  build(context) {
    return AnimatedBuilder(
        animation: controller,builder: (context,builder) {
          return Transform.rotate(
              angle: radians(rotation.value),child: Stack(alignment: Alignment.center,children: [
                _buildButton(0,_close,color: Color(0xFF29B6F6),icon: FontAwesomeIcons.chartBar),_buildButton(60,icon: FontAwesomeIcons.clipboard),_buildButton(120,_buildButton(180,icon: FontAwesomeIcons.book),_buildButton(240,icon: FontAwesomeIcons.arrowsAltV),_buildButton(300,_navigate,icon: FontAwesomeIcons.phoneAlt),_buildButton(360,icon: FontAwesomeIcons.compressAlt),Transform.scale(
                  scale: scale.value - 1.5,child: FloatingActionButton(
                      child: Icon(FontAwesomeIcons.timesCircle),onPressed: _close,backgroundColor: Color(0xFF29B6F6)),Transform.scale(
                  scale: scale.value,child: FloatingActionButton(
                      child: Icon(FontAwesomeIcons.solidDotCircle),onPressed: _open,]));
        });
  }

  _buildButton(double angle,Function callback,{Color color,IconData icon}) {
    final double rad = radians(angle);
    return Transform(
        transform: Matrix4.identity()
          ..translate(
              (translation.value) * cos(rad),(translation.value) * sin(rad)),child: FloatingActionButton(
            child: Icon(icon),backgroundColor: color,onPressed: callback));
  }

  _open() {
    controller.forward();
  }

  _close() {
    controller.reverse();
  }

  _navigate(BuildContext context) {
    Navigator.push(
        context,new MaterialPageRoute(builder: (context) => Assistance()));
  }
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)