Как я могу передать кнопку Нажмите на функцию на другой странице? - PullRequest
1 голос
/ 27 мая 2019

Я пытаюсь передать простое нажатие кнопки, чтобы выполнить что-то в другом классе. Смысл в том, чтобы использовать одну страницу для нескольких разных функций вместо одной страницы для каждой функции.

Прямо сейчас навигация к странице textDeclaration работает нормально, но я не могу получить правильную функцию, которая делает свое дело.

Если я нажму первую кнопку, информация из виджета FirstButton должна отобразиться на странице textDeclaration, а если я нажму вторую кнопку, информация из виджета SecondButton должна появиться на странице displayText.

Main:

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {

    return MaterialApp(
      home: HomePage(),
    );
  }
}

HomePage:

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

class HomePage extends StatefulWidget {
  @override
  _HomePageState createState() => _HomePageState();
}

class _HomePageState extends State<HomePage> {
  Function buttonChoice;

  Widget outlineButton(String buttonName) {
    return SizedBox(
      height: 60.0,
      width: 225.0,
      child: OutlineButton(
          highlightedBorderColor: Colors.lightBlueAccent,
          child: Text(buttonName,
              style: TextStyle(fontSize: 17.0, fontWeight: 
FontWeight.bold)),
          borderSide: BorderSide(
            color: Colors.blue,
            width: 2.0,
          ),
          onPressed: () {
            navigate(buttonName, buttonChoice);
          }),
    );
  }

  void navigate(String buttonName, Function buttonChoice) {
    setState(() {
      Navigator.of(context).popUntil(ModalRoute.withName('/'));
      Navigator.of(context).push(MaterialPageRoute(
          builder: (context) => TextDeclaration(
                buttonName: buttonName,
                buttonChoice: buttonChoice,
              )));
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text('HOME PAGE')),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.spaceEvenly,
          children: [
            outlineButton('First Button'),
            outlineButton('Second Button'),
          ],
        ),
      ),
    );
  }
}

textDeclarationPage:

import 'package:flutter/material.dart';

class TextDeclaration extends StatefulWidget {
  final String buttonName;
  final Function buttonChoice;

  TextDeclaration({this.buttonName, this.buttonChoice});

  @override
  _TextDeclarationState createState() => _TextDeclarationState();
}

class _TextDeclarationState extends State<TextDeclaration> {
  String buttonName = "";

  buttonChoice(String buttonName) {
    if (buttonName == 'First Button') {
      firstButton(buttonName);
    } else if (buttonName == 'Second Button') {
      secondButton(buttonName);
    }
  }

  Widget firstButton(buttonName) {
    return Scaffold(
      appBar: AppBar(
        title: Text('First Button'),
      ),
      body: Center(
        child: Container(
          height: 200.0,
          width: 200.0,
          child: Center(child: Text('First Button Text')),
        ),
      ),
    );
  }

  Widget secondButton(buttonName) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Second Button'),
      ),
      body: Center(
        child: SizedBox(
          height: 200.0,
          width: 200.0,
          child: Center(
            child: Text('Second Button Text'),
          ),
        ),
      ),
    );
  }

  @override
  Widget build(BuildContext context) {
    return Container(
      decoration: BoxDecoration(color: Colors.blue),
      child: buttonChoice(buttonName),
    );
  }
}

Код работает, но функции от разных кнопок не будут работать.

Любая помощь вообще была бы великолепна, так как я застрял с этим в течение очень долгого времени. Благодаря.

...