Hibok
25'ten fazla konu seçemezsiniz Konular bir harf veya rakamla başlamalı, kısa çizgiler ('-') içerebilir ve en fazla 35 karakter uzunluğunda olabilir.
 
 
 
 
 
 

102 satır
3.4 KiB

  1. import 'package:chat/generated/i18n.dart';
  2. import 'package:chat/photo/provider/asset_provider.dart';
  3. import 'package:chat/photo/provider/config_provider.dart';
  4. import 'package:chat/photo/ui/page/first_photo_item.dart';
  5. import 'package:chat/utils/loading_builder.dart';
  6. import 'package:chat/utils/screen.dart';
  7. import 'package:flutter/material.dart';
  8. import 'package:photo_manager/photo_manager.dart';
  9. class PhotoSelectMenu extends StatefulWidget {
  10. final GlobalKey parentKey;
  11. final Function onSelectFolder;
  12. PhotoSelectMenu({this.parentKey, this.onSelectFolder});
  13. @override
  14. _PhotoSelectMenuState createState() => _PhotoSelectMenuState();
  15. }
  16. class _PhotoSelectMenuState extends State<PhotoSelectMenu> {
  17. AssetProvider get assetProvider =>
  18. PhotoPickerProvider.of(context).assetProvider;
  19. OverlayEntry overlayEntry;
  20. bool isQuit = false;
  21. @override
  22. void dispose() {
  23. isQuit = true;
  24. clearOverlay();
  25. super.dispose();
  26. }
  27. @override
  28. Widget build(BuildContext context) {
  29. return InkWell(
  30. child: Container(
  31. child: Row(mainAxisSize: MainAxisSize.min, children: <Widget>[
  32. Text(assetProvider.current == null
  33. ? I18n.of(context).Photo_album
  34. : assetProvider.current.name),
  35. Icon(
  36. overlayEntry == null
  37. ? Icons.keyboard_arrow_down
  38. : Icons.keyboard_arrow_up,
  39. color: Color(0xFFB5B4B4),
  40. size: 20,
  41. ),
  42. ]),
  43. ),
  44. onTap: overlayEntry == null ? showAllFolders : clearOverlay);
  45. }
  46. void showAllFolders() {
  47. final RenderBox appBarBox =
  48. widget.parentKey.currentContext.findRenderObject();
  49. overlayEntry = OverlayEntry(
  50. builder: (context) => Positioned(
  51. width: Screen.width,
  52. top: appBarBox.size.height,
  53. child: Material(
  54. elevation: 1,
  55. color: Colors.black26,
  56. child: Container(
  57. height: Screen.height,
  58. decoration: BoxDecoration(
  59. color: Colors.white,
  60. borderRadius: BorderRadius.only(
  61. bottomLeft: Radius.circular(10.0),
  62. bottomRight: Radius.circular(10.0))),
  63. child: FutureLoadingBuilder<List<AssetPathEntity>>(
  64. future: PhotoManager.getAssetPathList(
  65. type: RequestType.image),
  66. builder: (BuildContext context,
  67. List<AssetPathEntity> pathList) {
  68. return ListView(
  69. children: List<Widget>.generate(
  70. pathList.length,
  71. (i) => FirstPhotoItem(
  72. pathEntity: pathList[i],
  73. onSelectFolder: () {
  74. widget.onSelectFolder(pathList[i]);
  75. clearOverlay();
  76. },
  77. )));
  78. })),
  79. )));
  80. Overlay.of(context).insert(overlayEntry);
  81. setState(() {});
  82. }
  83. void clearOverlay() {
  84. if (overlayEntry != null) {
  85. overlayEntry.remove();
  86. overlayEntry = null;
  87. if (!isQuit) {
  88. setState(() {});
  89. }
  90. }
  91. }
  92. }