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

cdway님의 프로필 이미지
cdway

작성한 질문수

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

SliverAppBar에 데이터 적용하기

에러가 생기네요 - 미세먼지앱 섹션57-19 부터 입니다.

작성

·

148

0

에러가 생기네요 - 미세먼지앱 섹션57-19 부터 인데

에러가 생기네요 - 미세먼지앱 섹션57-19 부터 인데, 구판 섹션26-19 입니다.

수시로 에러 생기고 가끔 수십번에 1번은 데이터가 들어오는데 그것도 조금 지나면 에러 메세지가 나오네요.

첨부파일 참조

아마 오타 일건데 암만 강의하구 비교해도 오타를 찾지를 못하겠습니다.

포기하구 강의따라가도 20, 21 에서도 계속 에러 나와서 강의 포기하구 있다가 연락드립니다.

코드는 첨부 합니다.

에러 이미지 캡처.png

/// component/main_app_bar.dart
///

import 'package:flutter/material.dart';
import 'package:section26_fine_dust/constant/color.dart';
import 'package:section26_fine_dust/model/stat_model.dart';
import 'package:section26_fine_dust/model/status_model.dart';

class MainAppBar extends StatelessWidget {
  final StatusModel status;
  final StatModel stat;

  MainAppBar({
    required this.status,
    required this.stat,
    super.key,
  });

  @override
  Widget build(BuildContext context) {
    final ts = TextStyle(
      color: Colors.white,
      fontSize: 30.0,
    );

    return SliverAppBar(
      backgroundColor: status.primaryColor,
      expandedHeight: 500,
      flexibleSpace: FlexibleSpaceBar(
        background: SafeArea(
          child: Container(
            margin: EdgeInsets.only(top: kToolbarHeight),
            child: Column(
              children: [
                Text(
                  '서을',
                  style: ts.copyWith(
                    fontSize: 40.0,
                    fontWeight: FontWeight.w700,
                  ),
                ),
                // const SizedBox(height: 20.0),
                Text(
                  getTimeFromDateTime(dateTime: stat.dataTime),
                  style: ts.copyWith(
                    fontSize: 20.0,
                  ),
                ),
                const SizedBox(height: 20.0),
                Image.asset(
                  status.imagePath,
                  width: MediaQuery.of(context).size.width / 2,
                ),
                const SizedBox(height: 20.0),
                Text(
                  status.label,
                  style: ts.copyWith(
                    fontSize: 40.0,
                    fontWeight: FontWeight.w700,
                  ),
                ),
                const SizedBox(height: 8.0),
                Text(
                  status.comment,
                  style: ts.copyWith(
                    fontSize: 20.0,
                    fontWeight: FontWeight.w700,
                  ),
                ),
              ],
            ),
          ),
        ),
      ),
    );
  }

  String getTimeFromDateTime({required DateTime dateTime}) {
    return '${dateTime.year} ${dateTime.month} ${dateTime.day} ${dateTime.hour} ${dateTime.minute}';
  }

  String getTimeFormat(int number) {
    return number.toString().padLeft(2, '0');
  }
}

 

/// screen/home_screen.dart
///

import 'package:dio/dio.dart';
import 'package:flutter/material.dart';
import 'package:section26_fine_dust/component/card_title.dart';
import 'package:section26_fine_dust/component/category_card.dart';
import 'package:section26_fine_dust/component/hourly_card.dart';
import 'package:section26_fine_dust/component/main_app_bar.dart';
import 'package:section26_fine_dust/component/main_card.dart';
import 'package:section26_fine_dust/component/main_drawer.dart';
import 'package:section26_fine_dust/component/main_state.dart';
import 'package:section26_fine_dust/constant/color.dart';
import 'package:section26_fine_dust/constant/status_level.dart';
import 'package:section26_fine_dust/model/stat_model.dart';
import 'package:section26_fine_dust/repository/stat_repository.dart';

import '../constant/data.dart';

class HomeScreen extends StatefulWidget {
  const HomeScreen({super.key});

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

class _HomeScreenState extends State<HomeScreen> {
  Future<List<StatModel>> fetchData() async {
    final statModels = await StatRepository.fetchData();

    print(statModels);
    return statModels;
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      backgroundColor: primaryColor,
      drawer: MainDrawer(),
      body: FutureBuilder<List<StatModel>>(
        future: fetchData(),
        builder: (context, snapshot) {
          if (snapshot.hasError) {
            // 에러가 있을때
            return Center(
              child: Text('에러가 있습니다.'),
            );
          }

          if (!snapshot.hasData) {
            // 로딩 상태
            return Center(
              child: CircularProgressIndicator(),
            );
          }

          List<StatModel> stats = snapshot.data!;
          StatModel recentStat = stats[0];

          // 1 - 5, 6 - 10, 11 - 15
          // 7
          final status = statusLevel
              .where(
                (element) => element.minFineDust < recentStat.seoul,
              )
              .last;

          return CustomScrollView(
            slivers: [
              MainAppBar(
                stat: recentStat,
                status: status,
              ),
              SliverToBoxAdapter(
                child: Column(
                  crossAxisAlignment: CrossAxisAlignment.stretch,
                  children: [
                    CategoryCard(),
                    const SizedBox(height: 16.0),
                    HourlyCard(),
                  ],
                ),
              ),
            ],
          );
        },
      ),
    );
  }
}

 

답변 2

0

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

안녕하세요!

에러가 난다고 말씀하셨는데 에러를 알려주지 않아서 도움드리기 어렵습니다.

에러를 보여주세요!

감사합니다!

0

안녕하세요, 인프런 AI 인턴입니다.

질문자님이 겪고 계신 문제와 유사한 상황에 대한 답변이 포스트맨 및 앱 오류 관련 질문에서 찾을 수 있습니다. 포스트맨을 사용할 때 간혹 발생하는 SERVICE ACCESS DENIED 에러나, 앱 내부에서 발생하는 데이터 처리 중의 오류 등이 해당될 수 있습니다. 에러 메시지에 따라 다르겠지만, 비슷한 케이스로 해결된 사례를 참고하면 도움이 될 수 있습니다.

해당 질문에서는 두 가지 주요 문제에 대해서 다루고 있습니다:

  1. 포스트맨 사용 시 발생하는 권한 문제: 권한이나 토큰 문제로 인해 API 요청이 실패하는 경우입니다. 인증 문제나 토큰의 유효성 확인이 필요합니다.

  2. 앱에서의 데이터 처리 오류: 앱에서는 리스트 객체에서 유효하지 않은 접근이나 데이터를 제대로 불러오지 못하는 경우로 보입니다. 이는 데이터 소스가 제대로 데이터를 전달하고 있지 않거나, 데이터 모델에 대한 잘못된 처리가 문제일 수 있습니다.

유사한 질문으로는 다음 링크의 답변을 참고하실 수 있습니다:

질문자님의 경우, 구체적인 에러 메시지(“없는 페이지 입니다”, “Page not found”)가 UI에 표시되고 있습니다. 이는 API 경로가 잘못되었거나 서버 측 문제일 수 있습니다. API 경로 확인, 서버 상태 확인 또는 이용 중인 외부 데이터 소스(예: 미세먼지 정보 API)의 이슈 여부를 점검해보시는 것이 좋습니다. 또한, 오타는 가장 흔한 문제 중 하나이므로 코드 내의 URL, 변수명, 함수 호출 등을 한 번 더 점검해볼 것을 권장합니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

cdway님의 프로필 이미지
cdway

작성한 질문수

질문하기