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

home2 게시판 Flutter 게시판 제발요 제 자신이 너무 답답합니다. 그리드 불러오기 .

제발요 제 자신이 너무 답답합니다. 그리드 불러오기 .

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

    신주용
    참가자
    
    처음에는 작동을 해서 이미지를 불러왔었는데
    제가 
    @override
    void initState() {
    super.initState();
    getData();
    }
    이쪽 부분을 만졌다가 다시 돌려놨는데 그 이후부터 안됩니다. 
    Store1에 있는 링크 정보를 못 불러오는 것 같습니다.
    작동할때랑 똑같이 썼는데 왜 안 될 까 요
    도와주세요 센세 
    
    import 'package:flutter/cupertino.dart';
    import 'package:flutter/material.dart';
    import './style.dart' as style;
    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';
    import 'package:shared_preferences/shared_preferences.dart';
    import 'package:provider/provider.dart';
    void main() {
      runApp(MultiProvider(
        providers: [
          ChangeNotifierProvider(create: (c) => Store1()),
          ChangeNotifierProvider(create: (c) => Store2()),
        ],
        child: MaterialApp(theme: style.theme, home: MyApp()),
      ));
    }
    var a = TextStyle();
    class MyApp extends StatefulWidget {
      const MyApp({Key? key}) : super(key: key);
      @override
      State<MyApp> createState() => _MyAppState();
    }
    class _MyAppState extends State<MyApp> {
      var tab = 0;
      var data = [];
      var userImage;
      var userContent;
      //데이터 저장 함수
      saveData() async {
        var storage = await SharedPreferences.getInstance();
        storage.setString('name', 'shin');
        var result = storage.get('name');
        storage.remove('name'); //삭제
        print(result);
      }
      addMyData() {
        var myData = {
          "id": data.length,
          "image": userImage,
          "likes": 150,
          "date": "Oct 28",
          "content": "신주봉",
          "liked": false,
          "user": "Joo Bong"
        };
        setState(() {
          data.insert(0, myData); //List 맨앞에 자료 추가하는 법
        });
      }
      setUserContent(a) {
        setState(() {
          userContent = a;
        });
      }
      addData(a) {
        setState(() {
          data.add(a);
        });
      }
      getData() async {
        var result = await http
            .get(Uri.parse('https://codingapple1.github.io/app/data.json'));
        var result2 = jsonDecode(result.body);
        data = result2;
      }
      @override
      void initState() {
        super.initState();
        getData();
      }
      @override
      Widget build(BuildContext context) {
        return Scaffold(
          appBar: AppBar(
            title: Text('Instagram'),
            actions: [
              IconButton(
                icon: Icon(Icons.add_box_outlined, color: Colors.black),
                onPressed: () async {
                  var picker = ImagePicker();
                  var image = await picker.pickImage(source: ImageSource.gallery);
                  if (image != null) {
                    setState(() {
                      userImage = File(image.path); //image가 null 일 가능 성이 있어서 if문으로
                    });
                  }
                  // ignore: use_build_context_synchronously
                  Navigator.push(
                      context,
                      MaterialPageRoute(
                          builder: (c) => Upload(
                              userImage: userImage,
                              setUserContent: setUserContent,
                              addMyData: addMyData)));
                },
              ),
              IconButton(
                  icon: Icon(Icons.favorite_border, color: Colors.black),
                  onPressed: null),
              IconButton(
                  icon: Icon(Icons.send, color: Colors.black), onPressed: null)
            ],
            actionsIconTheme: IconThemeData(color: Colors.black38, size: 30.0),
          ),
          body: [Home(data: data, addData: addData), Text('샵')]

    , bottomNavigationBar: BottomNavigationBar( showSelectedLabels: false, showUnselectedLabels: false, onTap: (i) { setState(() { tab = i; }); }, items: [ BottomNavigationBarItem( label: 'home', icon: Icon(Icons.home_outlined), ), BottomNavigationBarItem( label: 'shop', icon: Icon(Icons.shopping_bag_outlined), ) ], ), ); } }
    //home 페이지
    class Home extends StatefulWidget {
      const Home({Key? key, this.data, this.addData}) : super(key: key);
      final data;
      final addData;
      @override
      State<Home> createState() => _HomeState();
    }
    class _HomeState extends State<Home> {
      var scroll = ScrollController();
      getMore() async {
        var result = await http
            .get(Uri.parse('https://codingapple1.github.io/app/more1.json'));
        var result2 = jsonDecode(result.body);
        widget.addData(result2);
      }
      @override
      void initState() {
        super.initState();
        scroll.addListener(() {
          if (scroll.position.pixels == scroll.position.maxScrollExtent) {
            getMore();
          }
        });
      }
      @override
      Widget build(BuildContext context) {
        if (widget.data != null) {
          return ListView.builder(
              itemCount: widget.data.length,
              controller: scroll,
              itemBuilder: (c, i) {
                return Column(
                  children: [
                    Container(
                      constraints: BoxConstraints(maxWidth: 600),
                      padding: EdgeInsets.all(5),
                      width: double.infinity,
                      child: Column(
                        crossAxisAlignment: CrossAxisAlignment.start,
                        children: [
                          widget.data[i]['image'].runtimeType == String
                              ? Image.network(widget.data[i]['image'])
                              : Image.file(widget.data[i]['image']),
                          Padding(
                            padding: const EdgeInsets.only(top: 5, bottom: 5),
                            child: GestureDetector(
                              child: Text(widget.data[i]['user'], style: TextStyle(fontWeight: FontWeight.w600, fontSize: 20),),
                              onTap: () {
                                Navigator.push(
                                    context,
                                    PageRouteBuilder(
                                        pageBuilder: (c, a1, a2) => Profile(),
                                        transitionsBuilder: (c, a1, a2, child) =>
                                            SlideTransition(
                                              position: Tween(
                                                begin: Offset(1.0, 0.0),
                                                end: Offset(0.0, 0.0),
                                              ).animate(a1),
                                              child: child,
                                            )));
                              },
                            ),
                          ),
                          Text('좋아요${widget.data[i]['likes']}'),
                          Text(widget.data[i]['content']),
                          Text(widget.data[i]['date'], style: TextStyle(fontSize: 10)),
                        ],
                      ),
                    )
                  ],
                );
              });
        } else {
          return Text('로딩중임');
        }
      }
    }
    class Upload extends StatelessWidget {
      const Upload({Key? key, this.userImage, this.setUserContent, this.addMyData})
          : super(key: key);
      final userImage;
      final setUserContent;
      final addMyData;
      @override
      Widget build(BuildContext context) {
        return Scaffold(
          resizeToAvoidBottomInset: false,
          appBar: AppBar(
            actions: [
              IconButton(
                onPressed: () {
                  addMyData();
                },
                icon: Icon(Icons.send),
                color: Colors.black,
              )
            ],
          ),
          body: Column(
            crossAxisAlignment: CrossAxisAlignment.start,
            children: [
              Image.file(userImage),
              Text('이미지업로드화면'),
              TextField(
                onChanged: (text) {
                  setUserContent(text);
                },
              ),
              IconButton(
                onPressed: () {
                  Navigator.pop(context);
                },
                icon: Icon(Icons.close),
              )
            ],
          ),
        );
      }
    }
    class Store1 extends ChangeNotifier {
      var follower = 350;
      var friend = false;
      var follow = '팔로우';
      var profileImage = [];
      getData() async {
        var result = await http
            .get(Uri.parse('https://codingapple1.github.io/app/profile.json'));
        var result2 = jsonDecode(result.body);
        profileImage = result2;
        notifyListeners();
      }
      // var name = 'shinjoo';
      // changeName() {
      //   name = 'jooBong';
      //   notifyListeners();
      // }
      addFollower() {
        if (friend == false) {
          follower++;
          follow = '팔로우 취소';
          friend = true;
        } else {
          follower--;
          follow = '팔로우';
          friend = false;
        }
        notifyListeners();
      }
    }
    class Store2 extends ChangeNotifier {
      var name = 'joobong';
    }
    class Profile extends StatelessWidget {
      const Profile({Key? key}) : super(key: key);
      @override
      Widget build(BuildContext context) {
        return Scaffold(
            appBar: AppBar(
              iconTheme: IconThemeData(
                color: Colors.black,
              ),
                title: Text('shinjoo'),
            ),
            body: CustomScrollView(
              slivers: [
                SliverAppBar(
                  centerTitle: true,
                  flexibleSpace: ProfileHeader(),
                  expandedHeight: 75,
                ),
                SliverGrid(                                                                              이쪽이 문제 지점입니다. 센세..
                    delegate: SliverChildBuilderDelegate(
                          (c, i) => Image.network(context.watch<Store1>().profileImage[i]),
                      childCount: context.watch<Store1>().profileImage.length,
                    ),
                    gridDelegate: SliverGridDelegateWithFixedCrossAxisCount( crossAxisCount: 2 )
                ),
              ],
            )
        );
      }
    }
    class ProfileHeader extends StatelessWidget {
      const ProfileHeader({Key? key}) : super(key: key);
      @override
      Widget build(BuildContext context) {
        return Row(
          mainAxisAlignment: MainAxisAlignment.spaceAround,
          children: [
            CircleAvatar(
              //동그란 이미지
              radius: 30,
              backgroundImage: AssetImage('images/main2.jpeg'),
            ),
            Text('팔로워 ${context.watch<Store1>().follower}명'),
            ElevatedButton(
                onPressed: () {
                  context.read<Store1>().addFollower();
                },
                child: Text(context.watch<Store1>().follow)),
          ],
        );
      }
    }
    
    #52037

    codingapple
    키 마스터
    data 변수를 변경하려면 setState() 안에 적읍시다
2 글 보임 - 1 에서 2 까지 (총 2 중에서)
  • 답변은 로그인 후 가능합니다.

About

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

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

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