>

Flutter 로 데모 채팅 앱을 만들려고합니다 . 메인 화면 후에 Navigator.push 를 사용하고 있습니다  세부 정보 화면으로 이동합니다. 문제의 스크린 샷 :

첫 번째 화면의 구축 방법 :

@override
 Widget build(BuildContext context) {
return Scaffold(
    appBar: AppBar(
      title: const Text("Chat Thread App"),
      actions: <Widget>[
        IconButton(
          icon: Icon(Icons.settings),
          onPressed: () {
            Navigator.pushNamed(context, '/settings');
          },
        )
      ],
    ),
    body: isLoading
        ? Center(
            child: CircularProgressIndicator(),
          )
        : new ChatThreadListCard(messageThreads: _messageThreadLists, user: _user,),
);
}

Navigator.push

코드  방법 :

Navigator.push(context, MaterialPageRoute(
        builder: (context) => ChatDetailsScreen(threadModel: new ThreadModel(
              user.id, 
              user.fullName, 
              user.pic, 
              "otherId", 
              "otherName", 
              "otherPic", 
              post.threadId
            )
          ),
      ),);

문제가 발생한 두 번째 화면의 빌드 방법 :

return Scaffold(
  appBar: AppBar(
    title: Text("Chat demo"),
  ),
  body: WillPopScope(
    child: isLoading
        ? Center(
            child: CircularProgressIndicator(),
          )
        : Stack(
            alignment: AlignmentDirectional.bottomCenter,
            children: <Widget>[
              SizedBox(
                width: 300,
                height: 300,
              ),
              Column(
                children: <Widget>[
                  buildChat(),
                  buildInput(),
                ],
              )
            ],
          ),
    onWillPop: onBackPress,
  ),
);

  • 답변 # 1

    Material App 를 설정하는 곳에서 무언가가 제대로 작동하지 않는 것 같습니다. ?

    app.dart :

    class App extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        return MaterialApp(
            home: HomePage());
      }
    }
    
    

    홈페이지 및 second_page

    import 'package:flutter/material.dart';
    class HomePage extends StatefulWidget {
      @override
      State createState() => HomePageState();
    }
    class HomePageState extends State<HomePage> with TickerProviderStateMixin {
      @override
      Widget build(BuildContext context) {
        return Scaffold(
            appBar: AppBar(
              title: Text('First Page'),
            ),
            body: Container(
              child: Center(child: RaisedButton(child: Text('Forward'), onPressed: () async {
                await Navigator.push(context, MaterialPageRoute(builder: (context) => SecondPage()));
              },)),
            ));
      }
    }
    class SecondPage extends StatefulWidget {
      @override
      State createState() => SecondPageState();
    }
    class SecondPageState extends State<SecondPage> with TickerProviderStateMixin {
      @override
      Widget build(BuildContext context) {
        return Scaffold(
            appBar: AppBar(
              title: Text('Second Page'),
            ),
            body: Container(
              child: Center(child: RaisedButton(child: Text('Backward'), onPressed: () {
                Navigator.of(context).pop();
              },)),
            ));
      }
    }
    
    

    어느 생산물 :

  • 답변 # 2

    문제는 스캐 폴드 바디의 MaterialApp 위젯. 따라서 onTap 메소드가 호출되면 MaterialApp의 영역에서 새 화면이 교체되었습니다. 전체 화면을 바꾸지 않았습니다.

    트릭은 return new MaterialApp() 를 제거하는 것이 었습니다 .

    모든 사람에게 감사합니다.

  • 이전 녹 재귀 문제
  • 다음 c# - 속성 값에 의존/선택하는 목록 조합