Найдите исполнителя для вашего проекта прямо сейчас!
Разместите заказ на фриланс-бирже и предложения поступят уже через несколько минут.

Flutter. Задачи:

1. ListView.builder:

1.1. Сделать чтобы при движении пальца по смартфону (Андроид) горизонтальные ListView.builder-ы прокручивались по горизонтали вместе (как один ListView.builder, как одна строка).

Как результат при движении пальцем по экрану в любую сторону весь массив должен

смещаться за пальцем и при свайпе (быстром движении пальцем по экрану с отрывом

в конце) в любом направлении должно прокручиваться как при ListView.builder.

1.2. Вывести в переменные (например, listBilderX и listBilderY, или в одну Offset listBilder) текущие горизонтальное и вертикальное смещения ListView.builder.

2. В коде ниже если тапнуть пальцем по смартфону и провести по горизонтали, то за

пальцем начнёт двигаться горизонтальный ListView.builder (один из). Если, не

отрывая первый палец, тапнуть по смартфону вторым пальцем и начать двигать им

уже вертикально, то начнёт двигаться уже вертикально весь массив. Следовательно,

прога видит два пальца и их движения.

Задача использовать движение двух пальцев для изменения размера квадрата/ячейки,

сохраняя при этом возможность двигать/свайпать массив на экране (без включения

другого режима в моб. приложении).

3. Желательно/по возможности ускорить работу кода в 2 и более раз (при макс. массиве до

1000х1000). Указать в ответе возможность этого пункта и примерно во сколько

можно ускорить.

Комменты в коде не нужны. В качестве выполненной задачи мне хватит только отредактированного листинга (т.е. установщик/apk не нужен).

Совет - проверять работу кода на реальном устройстве.

В приатаченном файле заготовка кода.

Просьба озвучить сумму и примерные сроки.

---------------------------------

import 'package:flutter/material.dart';

import 'package:rnd/rnd.dart';

import 'dart:math';

final rnd = Random();

List users = List.generate(1000, (j) => List.generate(1000, (i) => '$j\n$i'));

var cellMark =

List.generate(1000, (j) => List.generate(1000, (i) => rnd(2).toInt()));

void main() => runApp(const MyApp());

class MyApp extends StatelessWidget {

const MyApp({super.key});

@override

Widget build(BuildContext context) {

return const MaterialApp(

title: 'list_bilder_1',

debugShowCheckedModeBanner: false,

home: MyHomePage(),

);

}

}

class MyHomePage extends StatefulWidget {

const MyHomePage({super.key});

@override

MyHomePageState createState() => MyHomePageState();

}

class MyHomePageState extends State {

double squareSize = 40;

@override

Widget build(BuildContext context) {

return Scaffold(

body: ListView.builder(

scrollDirection: Axis.vertical,

itemCount: users.length,

itemBuilder: (BuildContext context, int index) {

return SizedBox(

width: squareSize + 1.0,

height: squareSize + 1.0,

child: ListView.builder(

scrollDirection: Axis.horizontal,

itemCount: users.length,

itemBuilder: (BuildContext context, int indexF) {

return Container(

width: squareSize,

height: squareSize,

margin: const EdgeInsets.all(0.5),

color: cellMark[index][indexF] == 0

? Colors.yellow

: Colors.blueAccent,

child: Center(

child: Text(

users[index][indexF],

textAlign: TextAlign.center,

),

),

);

},

),

);

},

),

);

}

}

год назад
aaaassss
Алексей 
59 летРоссия
11 лет в сервисе
Был
год назад