인프런 커뮤니티 질문&답변

박지훈님의 프로필 이미지
박지훈

작성한 질문수

[2024 최신] [코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!

안녕하세요 코드정리에 대해서 질문이 있습니다.

해결된 질문

작성

·

181

0

강의에서 배운대로 코드정리를 할때 궁금한게 생겼습니다.

강의 프로젝트들과 마찬가지로 최상단에는 StatefulWidget, 코드가 길어진다면

lesswidget으로 정리를 해준 후, 추후 관리하기 쉽게 상태코드들은 fulWidget으로 올리는 작업에서

만약 Listview와 같이 index도 필요로 할때에도 상단으로 올릴 수 있나요?

다음은 간단히 적어본 예시코드인데

아래와 같이 onTap()으로 뺄수있는지, 다른 코드정리방법이 있는지 궁금합니다.

class HomeScreen extends StatefulWidget {
  const HomeScreen({Key? key}) : super(key: key);

  @override
  State<HomeScreen> createState() => _HomeScreenState();
}

class _HomeScreenState extends State<HomeScreen> {
  @override
  Widget build(BuildContext context) {
    return SafeArea(
      child: Scaffold(
        body: _Body(
          onTap: onTap,
        ),
      ),
    );
  }

  onTap() {
    showToast(context, index.toString()); // index ??
  }
}

class _Body extends StatelessWidget {
  final GestureTapCallback onTap;

  const _Body({
    required this.onTap,
    Key? key,
  }) : super(key: key);

  @override
  Widget build(BuildContext context) {
    List<int> list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
    return ListView.separated(
      itemBuilder: (_, index) {
        return ListTile(
          title: Text(
            '${list[index]}',
            style: const TextStyle(fontSize: 30),
          ),
          onTap: () { // 상단으로 올리는게 가능한지
            showToast(context, index.toString());
          },
        );
      },
      separatorBuilder: (_, index) {
        return const SizedBox(
          height: 20,
        );
      },
      itemCount: list.length,
    );
  }
}

showToast(BuildContext context, String message) {
  Fluttertoast.showToast(
    msg: message,
    toastLength: Toast.LENGTH_LONG,
    gravity: ToastGravity.CENTER,
    timeInSecForIosWeb: 1,
    fontSize: 16.0,
    textColor: Colors.blue,
    backgroundColor: Colors.grey[200],
  );
}

 

 

 

답변 1

0

코드팩토리님의 프로필 이미지
코드팩토리
지식공유자

네 가능합니다.

방법은 여러가지가 될텐데

가장 추천드리는 방법은 상태를 최상위에서 관리하시면 쉽습니다. (_HomeScreenState에서)

상태의 흐름은 항상 위에서 아래로 흐르도록 관리해주세요!

박지훈님의 프로필 이미지
박지훈
질문자

그럼 상태관련 로직이 있다면, 지금은 예시코드가 짧아서 상관없지만,

만약코드가 엄청 길어진다하더라도 _Body lesswidget으로 빼지말고

그냥 _HomeScreenState에다 작성해주는것이 좋다는말씀일까요?

코드팩토리님의 프로필 이미지
코드팩토리
지식공유자

UI는 따로 분리하는게 무조건 좋습니다.

하지만 상태 (현재 예제에서 갖고계시는 리스트값)은 위에서 아래로 넘겨주는게 관리가 편해요!

박지훈님의 프로필 이미지
박지훈

작성한 질문수

질문하기