Флаттер динамический c текст в RawMaterialButton - PullRequest
0 голосов
/ 30 апреля 2020

Я создаю свою собственную кнопку стиля во флаттере. До сих пор я создал файл commonui.dart и поместил следующий код

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

class CustomButton extends StatelessWidget {
  CustomButton({@required this.onPressed});
  final GestureTapCallback onPressed;

  @override
  Widget build(BuildContext context) {
    return RawMaterialButton(
      fillColor: Colors.green,
      splashColor: Colors.greenAccent,
      child: Padding(
        padding: EdgeInsets.all(10.0),
        child: Row(
          mainAxisSize: MainAxisSize.min,
          children: const <Widget>[
            SizedBox(
              width: 10.0,
            ),
            Text(
              "Tap Me",
              maxLines: 1,
              style: TextStyle(color: Colors.white,fontFamily: 'ActoBold'),
            ),
          ],
        ),
      ),
      onPressed: onPressed,

    );
  }
}

И вызывал его со своих страниц следующим образом:

CustomButton(
     onPressed: () {
        print("Tapped Me");
      },
)

Я бы хотел, чтобы текст кнопки был динамичным c. Как передать переменную в виджет CustomButton?

Ответы [ 2 ]

0 голосов
/ 30 апреля 2020

Сделайте так, как вы только что сделали для функции onPressed. Разница лишь в том, что типом будет String.

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

class CustomButton extends StatelessWidget {
  final GestureTapCallback onPressed;
  final String buttonText;

  CustomButton({@required this.onPressed, this.buttonText});

  @override
  Widget build(BuildContext context) {
    return RawMaterialButton(
      fillColor: Colors.green,
      splashColor: Colors.greenAccent,
      child: Padding(
        padding: EdgeInsets.all(10.0),
        child: Row(
          mainAxisSize: MainAxisSize.min,
          children: const <Widget>[
            SizedBox(
              width: 10.0,
            ),
            Text(
              buttonText ?? 'Tap me',
              maxLines: 1,
              style: TextStyle(color: Colors.white,fontFamily: 'ActoBold'),
            ),
          ],
        ),
      ),
      onPressed: onPressed,
    );
  }
}

Тогда вы можете передать свое значение в CustomButton.

CustomButton(
   buttonText: 'Updated Text',
   onPressed: () {
      print("Tapped Me");
   },
)

Если вы хотите динамически изменить значение при нажатии кнопки , используйте виджет с состоянием:

class App extends StatefulWidget {
  @override
  _AppState createState() => _AppState();
}

class _AppState extends State<App> {
  String _buttonText;
  Widget build(BuildContext context) {
    return Scaffold(
      body: CustomButton(
        buttonText: _buttonText,
        onPressed: () {
          print("Tap Me");
          setState(() {
            _buttonText = 'Tapped';
          });
        },
      ),
    );
  }
}

0 голосов
/ 30 апреля 2020

Выполните следующие изменения ...

CustomButton(
child: Text(trigger),
 onPressed: () {
    setState((){
          trigger="tapped me";
})
  },
)

не забудьте объявить переменную и изменить класс без сохранения состояния на виджет с контролем состояния.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...