предыдущая кнопка flutter navigation не отображается

#flutter #flutter-web

#флаттер #flutter-web

Вопрос:

Я пытаюсь создать простое приложение для чата с помощью flutter, у меня есть список двух экранных чатов и страница чата, навигация работает, и я передаю данные, но когда я вижу примеры кодов из Интернета, они используют только виджет без состояния, я использую главную страницу в качестве виджета с полным состоянием ивторая страница — виджет без состояния

 import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter/scheduler.dart';
import 'package:web_socket_channel/web_socket_channel.dart';
import 'package:http/http.dart' as http;
import 'dart:convert' show json;
import 'token.dart';
import 'chat.dart';
void main() {
  var x = const AppPage();
  runApp(x);
}

class AppPage extends StatefulWidget {
  const AppPage({Key? key}) : super(key: key);
  static String username = "";

  @override
  State<StatefulWidget> createState() => _AppState();
}

class _AppState extends State<AppPage> {
  var userrName = AppPage.username;
  var MessagesList = [];
  var profileImg = "http://localhost:5000/images/profiles/avatar.png";
  var refreshToken = "";

  void user_data_Getter(token) async {
    final response = await http.post(
      Uri.parse('http://localhost:5000/get/my/data/'),
      headers: <String, String>{
        'Content-Type': 'application/json; charset=UTF-8',
        'Authorization': 'Bearer ${token}',
      },
    );
    var repo = json.decode(response.body);
    setState(() {
      profileImg = "http://localhost:5000/${repo['user']['avatar']}";
      userrName = repo['user']['name'];
      MessagesList = repo['messages'];
      //print(MessagesList.length);
    });
    return repo;
  }

  void fetcher() async {
    final response = await http.post(
      Uri.parse('http://localhost:5000/api/token/'),
      headers: <String, String>{
        'Content-Type': 'application/json; charset=UTF-8',
      },
      body: json.encode(<String, String>{
        'email': "mohnas914@gmail.com",
        'password': 'admin',
      }),
    );
    var repo = json.decode(response.body);
    setState(() {
      refreshToken = repo['refresh'];
    });

    return user_data_Getter(repo['access']);
  }

  @override
  void initState() {
    fetcher();
    super.initState();
  }

  void NavFun(BuildContext ctx, datas) {
    Navigator.of(ctx).pushReplacement(MaterialPageRoute(builder: (_){
      return ChatScreen(datas);

    }));
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
        home: Scaffold(
      appBar: AppBar(
          backgroundColor: Color(0xFF0A1D49),
          title: Text("Hello, ${userrName}"),
          leading: Padding(
            padding: EdgeInsets.fromLTRB(4.0, 4.0, 4.0, 4.0),
            child: Material(
              shape: CircleBorder(),
              child: ClipRRect(
                  borderRadius: BorderRadius.circular(50.0),
                  child: Image.network(
                    profileImg,
                    fit: BoxFit.cover,
                  )),
            ),
          )),
      body: Container(
        margin: EdgeInsets.fromLTRB(0.0, 50.0, 0.0, 0.0),
        decoration: BoxDecoration(
          borderRadius: BorderRadius.vertical(top: Radius.circular(10.0)),
          color: Color(0xFF1D264B),
        ),
        child: Container(
          margin: EdgeInsets.fromLTRB(0.0, 50.0, 0.0, 0.0),
          decoration: BoxDecoration(
            borderRadius: BorderRadius.vertical(top: Radius.circular(10.0)),
            color: Color(0xFF0A1D49),
          ),
          child: Container(
            margin: EdgeInsets.fromLTRB(25.0, 25.0, 0.0, 0.0),
            child: Center(
              child: ListView.builder(
                itemCount: (MessagesList.length > 0) ? MessagesList.length : 0,
                itemBuilder: (BuildContext context, index) {
                  return Center(
                      child: InkWell(
                    onTap: () => NavFun(context, {
                      'id': MessagesList[index]['sender']['id'],
                      'name': MessagesList[index]['sender']['name'],
                      'img': MessagesList[index]['sender']['pic'],
                      'token': refreshToken
                    }),
                    child: Container(
                        /*decoration:BoxDecoration(
                            border: Border(bottom:BorderSide(width: 1.0, color: Colors.white) )
                        ), */

                        margin: EdgeInsets.fromLTRB(
                            0.0, (index > 0) ? 25.0 : 0.0, 0.0, 0.0),
                        child: Row(
                            mainAxisAlignment: MainAxisAlignment.spaceBetween,
                            children: [
                              Container(
                                  child: Row(children: [
                                CircleAvatar(
                                  backgroundImage: NetworkImage(
                                      'http://localhost:5000${MessagesList[index]['sender']['pic']}'),
                                ),
                                Container(
                                  margin:
                                      EdgeInsets.fromLTRB(10.0, 0.0, 0.0, 0.0),
                                  child: Column(
                                    crossAxisAlignment:
                                        CrossAxisAlignment.start,
                                    children: [
                                      Text(
                                          '${MessagesList[index]['sender']['name']}',
                                          style: TextStyle(
                                              color: Colors.white,
                                              fontSize: 20.0)),
                                      Container(
                                        margin: EdgeInsets.fromLTRB(
                                            15.0, 0.0, 0.0, 0.0),
                                        child: Row(children: [
                                          Text(
                                              '${MessagesList[index]['content']}',
                                              style: TextStyle(
                                                  color: Colors.white,
                                                  fontSize: 20.0)),
                                        ]),
                                      )
                                    ],
                                  ),
                                ),
                              ])),
                              Container(
                                margin: EdgeInsets.fromLTRB(0, 0, 10, 0),
                                child: Text(
                                  '${MessagesList[index]['date']}',
                                  style: TextStyle(
                                      color: Colors.white, fontSize: 20.0),
                                ),
                              )
                            ])),
                  ));
                },
              ),
            ),
          ),
        ),
      ),
    ));
  }
}

 

и вот мой код второй страницы

 import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:web_socket_channel/web_socket_channel.dart';
import 'package:http/http.dart' as http;
import 'dart:convert' show json;
import 'token.dart';

class ChatScreen extends StatelessWidget {
  final data;
  ChatScreen(this.data);

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home:  Scaffold(
        appBar: AppBar(
            backgroundColor: Color(0xFF0A1D49),
            title: Text("Hello, ${data['name']}"),
            leading: Padding(
              padding: EdgeInsets.fromLTRB(4.0, 4.0, 4.0, 4.0),
              child: Material(
                shape: CircleBorder(),
                child: ClipRRect(
                    borderRadius: BorderRadius.circular(50.0),
                    child: Image.network(
                      "http://localhost:5000${data['img']}",
                      fit: BoxFit.cover,
                    )),
              ),
            )),
      ),
    );
  }
}


 

я понятия не имею, что происходит с навигацией, так как я только начал изучать flutter 8 часов назад
, я думал, что это из Edge web, поскольку я не использую эмулятор Android * не поддерживает процессор *, но примеры кодов из онлайн работают бесперебойно

Ответ №1:

Похоже, вы используете pushReplacement() , который заменяет вашу текущую страницу в стеке навигатора. push() Вместо этого используйте обычную. Кроме того, я думаю, что если вы передадите leading аргумент в AppBar , он заменит кнопку «Назад».

Узнайте больше об этом

Комментарии:

1. я удалил ведущую и использовал нажатие, но все та же проблема