contant_page.dart 4.47 KB
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';

import 'package:contacts_service/contacts_service.dart';
import 'package:flutter_screenutil/screenutil.dart';
import 'package:intl/intl.dart';
import 'package:one_key/pages/my/contant_left_page.dart';
import 'package:one_key/provider/contant_show_model.dart';
import 'package:one_key/res/colors.dart';
import 'package:one_key/widgets/custom_tab_indicator.dart';
import 'package:one_key/widgets/system_app_bar.dart';
import 'package:provider/provider.dart';

class ContactListPage extends StatefulWidget {
  @override
  _ContactListPageState createState() => _ContactListPageState();
}

class _ContactListPageState extends State<ContactListPage> {
  List<Contact> _contacts;
  List _tabBarTitle;

  @override
  void initState() {
    _tabBarTitle = ['预订联系人', '手机联系人'];
    super.initState();
    refreshContacts();
  }

  Future<void> refreshContacts() async {
    // Load without thumbnails initially.
    var contacts = (await ContactsService.getContacts(
            withThumbnails: false, iOSLocalizedLabels: false))
        .toList();
//      var contacts = (await ContactsService.getContactsForPhone("8554964652"))
//          .toList();
    setState(() {
      _contacts = contacts;
    });

    // Lazy load thumbnails after rendering initial contacts.
    for (final contact in contacts) {
      ContactsService.getAvatar(contact).then((avatar) {
        if (avatar == null) return; // Don't redraw if no change.
        setState(() => contact.avatar = avatar);
      });
    }
  }

  void updateContact() async {
    Contact ninja = _contacts
        .toList()
        .firstWhere((contact) => contact.familyName.startsWith("Ninja"));
    ninja.avatar = null;
    await ContactsService.updateContact(ninja);

    refreshContacts();
  }

  _openContactForm() async {
    try {
      var contact =
          await ContactsService.openContactForm(iOSLocalizedLabels: false);
      refreshContacts();
    } on FormOperationException catch (e) {
      switch (e.errorCode) {
        case FormOperationErrorCode.FORM_OPERATION_CANCELED:
        case FormOperationErrorCode.FORM_COULD_NOT_BE_OPEN:
        case FormOperationErrorCode.FORM_OPERATION_UNKNOWN_ERROR:
        default:
          print(e.errorCode);
      }
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
        backgroundColor: MyColours.color_ffffff,
        appBar: SystemAppBar('联系人'),
        body: SafeArea(
            child: DefaultTabController(
                length: 2,
                child: Stack(
                  children: <Widget>[
                    TabBarView(
                      physics: NeverScrollableScrollPhysics(),
                      children: <Widget>[
                        ChangeNotifierProvider<ContantShowModel>(
                            create: (_) => ContantShowModel(),
                            child: ContantLeftPage()),
                        Container()
                      ],
                    ), 
                    Positioned(
                        child: Container(
                      padding:
                          EdgeInsets.only(bottom: ScreenUtil().setWidth(10)),
                      margin: EdgeInsets.symmetric(
                          horizontal: ScreenUtil().setWidth(30)),
                      child: TabBar(
                          indicator: CustomTabIndicator(
                            radius: 0,
                          ),
                          indicatorColor: MyColours.color_199095,
                          indicatorSize: TabBarIndicatorSize.tab,
                          // indicatorPadding: EdgeInsets.symmetric(
                          //     horizontal: ScreenUtil().setWidth(12)),
                          labelColor: MyColours.color_199095,
                          labelStyle: TextStyle(
                              fontSize: ScreenUtil().setSp(32),
                              fontWeight: FontWeight.bold),
                          labelPadding: EdgeInsets.zero,
                          unselectedLabelStyle:
                              TextStyle(fontWeight: FontWeight.normal),
                          unselectedLabelColor: MyColours.color_999999,
                          tabs: _tabBarTitle.map((value) {
                            return Tab(
                              child: Text(value),
                            );
                          }).toList()),
                    ))
                  ],
                ))));
  }
}