• 로그인
  • 장바구니에 상품이 없습니다.

home2 게시판 Flutter 게시판 인스타그램 선택한 이미지와 글을 보여주라던 숙제

인스타그램 선택한 이미지와 글을 보여주라던 숙제

6 글 보임 - 1 에서 6 까지 (총 6 중에서)
  • 글쓴이
  • #133046

    이재준
    참가자
    오늘도 질문이 있습니다... 최대한 혼자 해보려고 해서 아직 답도 안본 상태입니다.
    
    코드가 좀 길긴 한데
    
    
    
    
    import 'package:flutter/material.dart';
    import 'package:http/http.dart' as http;
    import 'dart:convert';
    import 'package:flutter/rendering.dart';
    import 'package:image_picker/image_picker.dart';
    import 'dart:io';
    void main() {
      runApp(MaterialApp(home: MyApp()));
    }
    class MyApp extends StatefulWidget {
      MyApp({super.key});
    // ----------------------------------본체 함수---------------------------------------------
      @override
      State<MyApp> createState() => _MyAppState();
    }
    class _MyAppState extends State<MyApp> {
      var tab = 0;
      var datalist = [];
      var userImage;
      plusdata(a){
        setState(() {
          datalist.add(a);
        });
      }
      
      getdata() async{
        var result = await http.get(Uri.parse('https://codingapple1.github.io/app/data.json'));
        var result2 = jsonDecode(result.body);
        if (result.statusCode == 200) {
          print(result2);
        } else {
          throw Exception('실패함ㅅㄱ');
        }
        setState(() {
          datalist = result2;
        });
      }
      @override
      void initState() {
        super.initState();
        getdata();
      }
    // ---------------------------------------본체----------------------------------------------------
      @override
      Widget build(BuildContext context) {
        return Scaffold(
          appBar: AppBar(
            title: Text('Instagram'), actions: [IconButton(onPressed: ()async{
              var picker = ImagePicker();
              var image = await picker.pickImage(source: ImageSource.gallery);
              if (image!=null){
                setState(() {
                  userImage = File(image.path);
                });
              }
              Navigator.push(context, MaterialPageRoute(builder: (c){return Upload(userImage: userImage, plusdata: plusdata);}));
          }, icon: Icon(Icons.add_box_outlined))],
            bottom: PreferredSize(preferredSize: Size.fromHeight(1), child: Container(height: 0.2,color: Colors.black,))
          ),
          body: [context1(datalist : datalist, plusdata: plusdata)
          , Text('샵입니다')]

    , bottomNavigationBar: BottomAppBar( height: 60, child: Row( mainAxisAlignment: MainAxisAlignment.spaceEvenly, children: [ IconButton(onPressed: (){setState(() { tab=0; });}, icon: Icon(Icons.home_outlined)), IconButton(onPressed: (){setState(() { tab=1; });}, icon: Icon(Icons.shopping_bag_outlined)), ], ) ,), ); } }
    // ----------------------------------바디에 있는 context1 함수---------------------
    class context1 extends StatefulWidget {
      context1({super.key,this.datalist,this.plusdata});
      final datalist;
      final plusdata;
      @override
      State<context1> createState() => _context1State();
    }
    class _context1State extends State<context1> {
      var scroll = ScrollController();
      moredata()async{
        var result3 = await http.get(Uri.parse('https://codingapple1.github.io/app/more1.json'));
        var result4 = jsonDecode(result3.body);
        if (result3.statusCode==200){
        widget.plusdata(result4);
        } else {
          throw Exception('또실패함 ㅅㄱ');
        }
      }
      @override
      void initState() {
        super.initState();
        scroll.addListener((){
          if(scroll.position.maxScrollExtent == scroll.position.pixels){
            moredata();
          }
        });
      }
      // ----------------------------------------body context1 본체----------------------------------
      @override
      Widget build(BuildContext context) {
        if(widget.datalist.isNotEmpty){
          return ListView.builder(
              controller: scroll,
              itemCount: widget.datalist.length,
              itemBuilder: (context,i){
                return Column(
                  children: [
                    Container(padding: EdgeInsets.all(3),child: Row(
                      mainAxisAlignment: MainAxisAlignment.spaceBetween,
                      children: [
                        Text(widget.datalist[i]['user']),
                        Text(widget.datalist[i]['date'.toString()])
                      ],
                    ),),
                    Image.network(widget.datalist[i]['image']),
                    Container(
                      constraints: BoxConstraints(maxWidth: 600),
                      padding: EdgeInsets.all(20),
                      width: double.infinity,
                      child: Column(
                        crossAxisAlignment: CrossAxisAlignment.start,
                        children: [
                          Text(widget.datalist[i]['likes'].toString()),
                          Row(children: [
                            Text(widget.datalist[i]['user']),
                            SizedBox(width: 10),
                            Text(widget.datalist[i]['content']),
                          ],)
                        ],
                      ),
                    ),
                  ],
                );
              });
        }
        else{
          return CircularProgressIndicator();
        }
      }
    }
    class Upload extends StatelessWidget {
      Upload({super.key,this.userImage,this.plusdata});
      // ------------업로드 함수--------------
      final userImage;
      final plusdata;
      var content = TextEditingController();
      var name = TextEditingController();
      var date = TextEditingController();
      var likes = TextEditingController();
      // --------------업로드 본체------------
      @override
      Widget build(BuildContext context) {
        return Scaffold(
            appBar: AppBar(automaticallyImplyLeading: false,
              leading: IconButton(onPressed: (){Navigator.pop(context);},icon: Icon(Icons.close)),
              actions: [IconButton(onPressed: (){plusdata({"name":name.text,"image":userImage.path,"date":date.text,"likes":likes.text.toString(),"content":content.text});
                Navigator.pop(context);}, icon: Icon(Icons.check))],),
            body: Column(
              crossAxisAlignment: CrossAxisAlignment.start,
              children: [
                TextField(controller: name, decoration: InputDecoration(hintText: '이름'),),
                TextField(controller: date, decoration: InputDecoration(hintText: '날짜'),),
                Container(padding: EdgeInsets.all(15),child: Image.file(userImage, width: 300,height: 300,fit: BoxFit.cover)),
                Text('이미지업로드화면'),
                TextField(controller: content, decoration: InputDecoration(hintText: '본문내용'),),
                TextField(controller: likes, decoration: InputDecoration(hintText: '좋아요 수'),),
              ],
            )
        );
      }
    }
    
    
    이렇게 짜고 발행 버튼을 누르면 왜 오류가 날까요 선생님..
    #133063

    codingapple
    키 마스터
    에러메세지가 뭐가 문제인지 알려줍니다 datalist같은데 데이터 잘들어가나 출력해봅시다
    #133068

    이재준
    참가자
    오류 메세지는 
    Type null is 어쩌구 not type string 어쩌구 였습니다
    
    
    출력 해보겠습니다
    #133070

    이재준
    참가자
    발행버튼을 눌렀을때 콘솔에 뜨는 오류 메세지는 없는데, 게시글이 안뜨고 빨간색 바탕에 노란색 글씨로 어쩌구 뜹니다
    #133072

    codingapple
    키 마스터
    Text안에 문자가 아닌것 또는 null 집어넣은 부분이 있나봅니다
    #133093

    이재준
    참가자
    따이.... 해결을 했습니다. 감사합니다 :)
6 글 보임 - 1 에서 6 까지 (총 6 중에서)
  • 답변은 로그인 후 가능합니다.

About

현재 월 700명 신규수강중입니다.

  (09:00~20:00) 빠른 상담은 카톡 플러스친구 코딩애플 (링크)
  admin@codingapple.com
  이용약관
ⓒ Codingapple, 강의 예제, 영상 복제 금지
top

© Codingapple, All rights reserved. 슈퍼로켓 에듀케이션 / 서울특별시 강동구 고덕로 19길 30 / 사업자등록번호 : 212-26-14752 온라인 교육학원업 / 통신판매업신고번호 : 제 2017-서울강동-0002 호 / 개인정보관리자 : 박종흠