Flutter实战一Flutter聊天应用(十六)

Flutter实战一Flutter聊天应用(十六),第1张

概述在上一篇文章《Flutter实战一Flutter聊天应用(十五)》中,我们完成了登陆屏幕。在用户登陆成功后,会在本地创建一个LandingInformation文件,以使应用程序在启动时可以判断用户的登陆状态。 在main.dart文件中,我们在main方法执行runApp之前使用existsSync方法判断LandingInformation文件是否存在。判断结果会传递给Talkcasually

在上一篇文章《Flutter实战一Flutter聊天应用(十五)》中,我们完成了登陆屏幕。在用户登陆成功后,会在本地创建一个Landinginformation文件,以使应用程序在启动时可以判断用户的登陆状态。

main.dart文件中,我们在main方法执行runApp之前使用existsSync方法判断Landinginformation文件是否存在。判断结果会传递给TalkcasuallyApp,其根据结果决定用户是进入聊天列表屏幕还是登陆屏幕。

import 'package:Flutter/material.dart';import 'package:path_provIDer/path_provIDer.dart';import 'dart:async';import 'dart:io';import 'sign_in.dart';import 'group_chat_List.dart';voID main() {  _getLandingfile().then((onValue) {    runApp(new TalkcasuallyApp(onValue.existsSync()));  });}Future<file> _getLandingfile() async {  String dir = (await getApplicationdocumentsDirectory()).path;  return new file('$dir/Landinginformation');}class TalkcasuallyApp extends StatelessWidget {  TalkcasuallyApp(this.landing);  final bool landing;  @overrIDe  Widget build(BuildContext context) {    return new MaterialApp(        @R_301_5979@: '谈天论地',home: landing ? new GroupChatList() : new SignIn());  }}

在上面代码中有一个GroupChatList类是暂时不存在的,我们需要在/lib目录下新建一个group_chat_List.dart文件,并添加以下代码。

import 'package:Flutter/material.dart';class GroupChatList extends StatefulWidget {  @overrIDe  State createState() => new _GroupChatListState();}class _GroupChatListState extends State<GroupChatList> {  Widget build(BuildContext context) {    return new Scaffold(        appbar: new Appbar(          @R_301_5979@: new Text("谈天论地"),),body: new Text("聊天列表"),floatingActionbutton: new floatingActionbutton(            onpressed: null,child: new Icon(Icons.add)));  }}

在用户进入聊天列表屏幕时,我们需要读取Landinginformation文件,以显示用户信息并拉取用户的聊天列表。在_GroupChatListState中添加_readLoginData方法,其读取Landinginformation文件的内容并解析成Json数据返回,关于处理Json数据的内容可以查看《Flutter进阶—网络与本地异步加载资源》。

_GroupChatListState中,还增加了三个变量,分别存储用户的名称、手机号码和邮箱。为了获取这些信息,我们覆盖了initState方法,并添加_readLoginData方法,使应用在加载聊天列表屏幕时得到用户的名称、手机号码和邮箱。

//...import 'package:path_provIDer/path_provIDer.dart';import 'dart:async';import 'dart:convert';import 'dart:io';//...class _GroupChatListState extends State<GroupChatList> {  String name = "null";  String phone = "null";  String email = "null";  @overrIDe  voID initState() {    super.initState();    _readLoginData().then((Map onValue) {      setState(() {        name = onValue["name"];        phone = onValue["phone"];        email = onValue["email"];      });    });  }  Future<Map> _readLoginData() async {    String dir = (await getApplicationdocumentsDirectory()).path;    file file = new file('$dir/Landinginformation');    String data = await file.readAsstring();    Map Json = new JsonDecoder().convert(data);    return Json;  }  //...}

获取用户信息后,我们可以使用Drawer控件展示用户信息,还可以放置用户相关的 *** 作按钮。Drawer控件的打开方式有两种,一是从屏幕的边缘水平滑动,二是点击顶部导航栏左侧的菜单按钮。打开后只需点击空白部分即可关闭Drawer控件。

首先我们先写一个自定义的Drawer控件的选择项_drawerOption控件。

class _GroupChatListState extends State<GroupChatList> {  //...  Widget _drawerOption(Icon icon,String name) {    return new Container(      padding: const EdgeInsets.only(top: 22.0),child: new Row(        children: <Widget>[          new Container(              padding: const EdgeInsets.only(right: 28.0),child: icon),new Text(name)        ],);  }  //...}

然后在_GroupChatListStatebuild中添加一个Drawer类型变量drawerDrawerheader控件是Drawer的子控件,是显示在最顶端的区域。我们会在这个区域展示用户头像、姓名和手机号码,如果用户还没有头像,则暂时显示姓名第一个字。

class _GroupChatListState extends State<GroupChatList> {  //...  Widget build(BuildContext context) {    //...    Drawer drawer = new Drawer(        child: new ListVIEw(      children: <Widget>[        new Drawerheader(            child: new Column(          children: <Widget>[            new Row(              children: <Widget>[                new Container(                  padding: const EdgeInsets.only(right: 12.0),child: new CircleAvatar(                    child: new Text(name[0]),new Column(                  crossAxisAlignment: CrossAxisAlignment.start,children: <Widget>[                    new Text(                      name,textScaleFactor: 1.2,new Text(phone)                  ],)              ],_drawerOption(new Icon(Icons.account_circle),"个人资料"),_drawerOption(new Icon(Icons.settings),"应用设置"),],))      ],));    //...  }}

最后我们再修改一下_GroupChatListStatebuild方法,添加上Drawer控件。

class _GroupChatListState extends State<GroupChatList> {  //...  Widget build(BuildContext context) {    //...    return new Scaffold(        appbar: new Appbar(          @R_301_5979@: new Text("谈天论地"),drawer: drawer,body: new Center(          child: new Text("聊天列表"),child: new Icon(Icons.add)));  }}

大家可以在GitHub上直接查看group_chat_list.dart文件的代码。

总结

以上是内存溢出为你收集整理的Flutter实战一Flutter聊天应用(十六)全部内容,希望文章能够帮你解决Flutter实战一Flutter聊天应用(十六)所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1003495.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-22
下一篇 2022-05-22

发表评论

登录后才能评论

评论列表(0条)

保存