timelines_page.dart 2.23 KB
import 'dart:convert';

import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:Parlando/timeline/models/friend_entity.dart';
import 'package:Parlando/timeline/widgets/friend_cell.dart';
import 'package:Parlando/widgets/bars/timeline_menu_bar.dart';
import 'package:Parlando/widgets/my_app_bar.dart';

class TimelinesPage extends StatefulWidget {
  const TimelinesPage({Key? key}) : super(key: key);

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

class _TimelinesPageState extends State<TimelinesPage> {
  final ScrollController _scrollController = ScrollController();
  FriendEntity _friendModelEntity = FriendEntity();

  Future<String> loadAsset() async {
    return await rootBundle.loadString('assets/data/Data.json');
  }

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

    loadAsset().then((value) {
      var json = jsonDecode(value);
      _friendModelEntity = FriendEntity.fromJson(json);
      setState(() {});
    });

    _scrollController.addListener(() {
      double alpha = _scrollController.offset / 200;
      if (alpha < 0) {
        alpha = 0;
      } else if (alpha > 1) {
        alpha = 1;
      }
      setState(() {
      });
    });
  }

  Widget _mainListViewBuilder(BuildContext context, int index) {
    return FriendCell(
      model: _friendModelEntity.data![index],
    );
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: const MyAppBar(
        isBack: false,
        isTransparent: true,
        homeMenuHeader: TimelineMenuHeader(),
      ),
      body: _friendModelEntity.data != null
          ? ListView(
              padding: const EdgeInsets.only(top: 0),
              controller: _scrollController,
              children: <Widget>[
                ListView.builder(
                  padding: const EdgeInsets.only(top: 0),
                  itemBuilder: _mainListViewBuilder,
                  itemCount: _friendModelEntity.data!.length,
                  shrinkWrap: true,
                  physics: const NeverScrollableScrollPhysics(),
                )
              ],
            )
          : const Center(child: CupertinoActivityIndicator(radius: 16.0)),
    );
  }
}