0

我的颤振应用程序底部有一个底部导航栏。它工作得很好。我还有一个需要填写文本字段的页面。填写完文本字段后,用户可以单击“保存”按钮。保存数据后,我将用户导航到仪表板屏幕。

问题:当我从我使用的数据输入页面导航时

Navigator.of(context).pushReplacement(MaterialPageRoute(
                          builder: (context) => AgentDashboardScreen()));

上述行在“保存”按钮代码中。

导航到仪表板页面。这是在底部导航功能之外的,所以当我到达仪表板时,底部导航栏消失了。

BottomNavigation 位于 main_screen.dart 页面中,它的作用类似于容器,因此我需要在容器内导航。下面是 main_screen.dart 的代码

class MainScreen extends StatefulWidget {
  @override
  _MainScreenState createState() => _MainScreenState();
}

class _MainScreenState extends State<MainScreen> {

  int _pageIndex = 0;

List<Widget> pageList = <Widget>[
  AgentDashboardScreen(),
  TransactionDetailScreen(),
  AgentProfileScreen(),
];

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: pageList[_pageIndex],
      resizeToAvoidBottomInset: true,
      bottomNavigationBar: BottomNavigationBar(
        backgroundColor: Colors.blueAccent,
        selectedIconTheme: IconThemeData(color: Colors.white),
        selectedItemColor: Colors.white,
        unselectedItemColor: Colors.black45,
        type: BottomNavigationBarType.fixed,
        currentIndex: _pageIndex,
        onTap: (value) {
          setState(() {
            _pageIndex = value;
          });
        },
        items: [
          BottomNavigationBarItem(icon: Icon(Icons.home), label: "Home"),
          BottomNavigationBarItem(icon: Icon(Icons.add_business_outlined), label: "Add Tran"),
          BottomNavigationBarItem(icon: Icon(Icons.people), label: "Profile"),
          BottomNavigationBarItem(icon: Icon(Icons.adjust), label: "Logout"),
        ],
      ),
    );
  }
}

这是数据输入页面的代码

class AgentProfileScreen extends StatefulWidget {
  static const String id = 'agent_profile_screen';
  final Agents agents;

  AgentProfileScreen([this.agents]);

  @override
  _AgentProfileScreenState createState() => _AgentProfileScreenState();
}

class _AgentProfileScreenState extends State<AgentProfileScreen> {
  final _db = FirebaseFirestore.instance;

  @override
  Widget build(BuildContext context) {
    // Get the stream of agents created in main.dart
    final agentProvider = Provider.of<AgentProvider>(context);
    final _firestoreService = FirestoreService();
    //String _chosenState = 'Select State';

    return Scaffold(
      appBar: AppBar(
        title: Row(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            Image.asset('assets/images/Appbar_logo.png',
                fit: BoxFit.cover, height: 56),
          ],
        ),
      ),
      backgroundColor: Colors.white,
      body: SafeArea(
        child: SingleChildScrollView(
          child: Padding(
            padding: const EdgeInsets.all(20.0),
            child: Column(
              //mainAxisAlignment: MainAxisAlignment.center,
              //crossAxisAlignment: CrossAxisAlignment.stretch,
              children: <Widget>[
                Text(
                  'Agent Profile',
                  style: TextStyle(
                    fontSize: 30,
                  ),
                ),
                SizedBox(
                  height: 8.0,
                ),
                // Email entry text field
                TextField(
                  controller: fNameController,
                  keyboardType: TextInputType.text,
                  textAlign: TextAlign.center,
                  onChanged: (value) {
                    agentProvider.changefName(value);
                  },
                  decoration: kTextFieldDecoration.copyWith(
                      hintText: 'First Name', labelText: 'First Name'),
                ),
                SizedBox(
                  height: 8.0,
                ),
                TextField(
                  controller: lNameController,
                  keyboardType: TextInputType.text,
                  textAlign: TextAlign.center,
                  onChanged: (value) {
                    agentProvider.changelName(value);
                  },
                  decoration: kTextFieldDecoration.copyWith(
                      hintText: 'Last Name', labelText: 'Last Name'),
                ),
                SizedBox(
                  height: 8.0,
                ),
                Container(
                  child: StreamBuilder(
                      stream: _db.collection('agency').snapshots(),
                      builder: (BuildContext context, AsyncSnapshot snapshot) {
                        if (snapshot.data == null) {
                          return Center(
                            child: CircularProgressIndicator(),
                          );
                        } else {
                          return new DropdownButton<String>(
                            hint: new Text("Select Agency"),
                            value: _currentAgency,
                            onChanged: changedDropDownAgency,
                            items: snapshot.data.docs
                                .map<DropdownMenuItem<String>>((document) {
                              return new DropdownMenuItem<String>(
                                value: document.id,
                                child: new Text(document.data()['name']),
                              );
                            }).toList(),
                          );
                        }
                      }),
                ),
                SizedBox(
                  height: 8.0,
                ),
                TextField(
                  controller: address1Controller,
                  keyboardType: TextInputType.text,
                  textAlign: TextAlign.center,
                  onChanged: (value) {
                    agentProvider.changeaddress1(value);
                  },
                  decoration: kTextFieldDecoration.copyWith(
                      hintText: 'Address 1', labelText: 'Address 1'),
                ),
                SizedBox(
                  height: 8.0,
                ),
                TextField(
                  controller: address2Controller,
                  textAlign: TextAlign.center,
                  onChanged: (value) {
                    agentProvider.changeaddress2(value);
                  },
                  decoration: kTextFieldDecoration.copyWith(
                      hintText: 'Address 2', labelText: 'Address 2'),
                ),
                SizedBox(
                  height: 8.0,
                ),
                TextField(
                  controller: cityController,
                  keyboardType: TextInputType.emailAddress,
                  textAlign: TextAlign.center,
                  onChanged: (value) {
                    agentProvider.changecity(value);
                  },
                  decoration: kTextFieldDecoration.copyWith(
                      hintText: 'City', labelText: 'City'),
                ),
                SizedBox(
                  height: 8.0,
                ),
                DropdownButton(
                  value: _currentAgentState,
                  items: _dropDownState,
                  hint: Text('Choose State'),
                  onChanged: changedDropDownState,
                ),
                SizedBox(
                  height: 8.0,
                ),
                TextField(
                  controller: zipController,
                  keyboardType: TextInputType.number,
                  textAlign: TextAlign.center,
                  onChanged: (value) {
                    agentProvider.changezipCode(value);
                  },
                  decoration: kTextFieldDecoration.copyWith(
                      hintText: 'Zip Code', labelText: 'Zip Code'),
                ),
                SizedBox(
                  height: 8.0,
                ),
                TextField(
                  controller: cellPhoneController,
                  keyboardType: TextInputType.phone,
                  textAlign: TextAlign.center,
                  onChanged: (value) {
                    agentProvider.changecellPhone(value);
                  },
                  decoration: kTextFieldDecoration.copyWith(
                      hintText: 'Cell Phone', labelText: 'Cell Phone'),
                ),
                SizedBox(
                  height: 8.0,
                ),
                TextField(
                  controller: officePhoneController,
                  keyboardType: TextInputType.phone,
                  textAlign: TextAlign.center,
                  onChanged: (value) {
                    agentProvider.changeofficePhone(value);
                  },
                  decoration: kTextFieldDecoration.copyWith(
                      hintText: 'Office Phone', labelText: 'Office Phone'),
                ),
                SizedBox(
                  height: 8.0,
                ),
                RoundedButton(
                  title: 'Save',
                  colour: Colors.blueAccent,
                  onPressed: () async {
                    setState(() {
                      showSpinner = true;
                    });
                    try {
                      agentProvider.saveAgent();
                      globals.currentAgentName = fNameController.value.text + ' ' + lNameController.value.text;
                      globals.currentAgentState = _currentAgentState;
                      await _firestoreService.saveDeviceToken();
                      Navigator.of(context).pushReplacement(MaterialPageRoute(
                          builder: (context) => AgentDashboardScreen()));

                      setState(() {
                        showSpinner = false;
                      });
                    } catch (e) {
                      // todo: add better error handling
                      print(e);
                    }
                  },
                ),
                SizedBox(
                  height: 8.0,
                ),

                (widget != null)
                    ? RoundedButton(
                        title: 'Delete',
                        colour: Colors.red,
                        onPressed: () async {
                          setState(() {
                            showSpinner = true;
                          });
                          try {
                            agentProvider.deleteAgent(globals.currentUid);
                            Navigator.pushNamed(
                                context, AgentDashboardScreen.id);

                            setState(() {
                              showSpinner = false;
                            });
                          } catch (e) {
                            // todo: add better error handling
                            print(e);
                          }
                        },
                      )
                    : Container()
              ],
            ),
          ),
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: () async {
          setState(() {
            showSpinner = true;
          });
          try {
            agentProvider.saveAgent();
            Navigator.push(
              context,
              new MaterialPageRoute(
                builder: (context) => AgentDashboardScreen(),
              ),
            );
            setState(() {
              showSpinner = false;
            });
          } catch (e) {
            // todo: add better error handling
            print(e);
          }
        },
        backgroundColor: kPrimaryColor,
        child: Icon(
          Icons.assignment_turned_in_outlined,
          color: Colors.blueAccent,
        ),
      ),
    );
  }
}
4

0 回答 0