본문 바로가기
IT 정보/플러터 flutter

StatefulWidget 예시 및 데이터 매개변수 넘겨주기

by 쩜오개미 2023. 9. 18.
class ClassName extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<ClassName> {
  String _msg = 'Welcome to WillPopScope World';

  @override
  initState() {
    super.initState();
  }
  @override
  Widget build(BuildContext context) {
    return WillPopScope(    // <-  WillPopScope로 감싼다.
      onWillPop: () {
        setState(() {
          _msg = "You can not get out of here! kkk";
        });
        return Future(() => false);
      },


      child: Scaffold(
        appBar: AppBar(
          title: Text('text'),
          automaticallyImplyLeading: false, // 뒤로가기 버튼 없애기
        ),
        body: Container(
          child: Text(''),
        ),
      ),


    );
  }
}

매개변수를 State<StatefulWidget>으로 넘겨주려면 어떻게 할까?

 

StatefulWidget 의 첫번째 클래스에 변수를 정의하고 

두번째 클래스에서 widget.파라미터 이름으로 그 값을 사용할 수 있고 class의 상단엔서 초기화해주면 그 이후 코드에서 사용할 수 있다는데 .. 무슨 소리인지?

https://stackoverflow.com/questions/50818770/passing-data-to-a-stateful-widget-in-flutter

class UserData extends StatefulWidget {
  final String clientName;
  final int clientID;
  const UserData(this.clientName,this.clientID);

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

class UserDataState extends State<UserData> {
  @override
  Widget build(BuildContext context) {
    // Here you direct access using widget
    return Text(widget.clientName);
  }
}

// 화면 이동 시 값을 전달
Navigator.of(context).push(MaterialPageRoute(builder: (context) => UserData("WonderClientName",132)));

 

 

이런 글도 있다.

import 'package:flutter/material.dart';
import 'second_screen.dart';
class FirstScreen extends StatelessWidget{
  @override
  Widget build(BuildContext context){
    return Scaffold(
      appBar: AppBar(),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            Text('This is First Screen'),
            ElevatedButton(onPressed: (){
              Navigator.of(context).push(
                MaterialPageRoute(
                  builder: (BuildContext context) => SecondScreen(screenData: 'MetaData there is',),
                ),
              );
            }, child: Text('Go to Second Screen'))
          ],
        ),
      ),
    );
  }
}
import 'package:flutter/material.dart';

class SecondScreen extends StatelessWidget{
  final String? screenData;
  SecondScreen({required this.screenData});

  @override
  Widget build(BuildContext context){
    return Scaffold(
      appBar: AppBar(),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            Text('screenData: ' + screenData!),
            OutlinedButton(onPressed: (){
              Navigator.of(context).pop();
            }, child: Text('Go to First Screen '))
          ],
        ),
      ),
    );
  }
}

플러터에서 앱 이동시 데이터의 값을 전달하려고 한다면

먼저 first_screen, second_screen 으로 화면 이동 버튼을 구현.

그리고 나서 first_screen에 secondScreen을 임포트

.

그리고 SecondScreen에 데이터의 종류를 선언,, 출력할 위치를 지정

그러면 자동으로 ristScreen 함수 내에서 오류가 발생하는데 거기에 데이터의 이름과 동시에 값을 작성

위 소스코드를 참고!!.

 

 

728x90
반응형

댓글