Подробнее сменить язык Flutter просмотреть страницу

Я пытаюсь сделать приложение адаптивным. Я сделал это, и список изменил язык, но страница сведений не изменилась. Как я мог его восстановить? Данные из базы данных sqlite. Я безуспешно пытался использовать провайдера... Мой код:

home_page.dart:

Здесь я проверяю ориентацию и ширину экрана (только для теста 700) и строю главный экран.

import 'package:flut_bount/database_helper.dart';
import 'package:flut_bount/detailed_view.dart';
import 'package:flut_bount/home_screen_list.dart';
import 'package:flut_bount/user.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';

PageController pageController;

var isLargeScreen = false;
List<User> users;

class HomePage extends StatefulWidget {
  @override
  _HomePagePageState createState() => _HomePagePageState();
}

class _HomePagePageState extends State<HomePage> {
  @override
  void initState() {
    super.initState();
  }

  int actualPage = 0;

  @override
  Widget build(BuildContext context) {
    Widget _widget;

    return
/*      Provider<MyModel>(
      create: (_) => MyModel(),
      child: */
        Scaffold(
      body: OrientationBuilder(
        builder: (context, orientation) {
          if (MediaQuery.of(context).size.shortestSide > 700 &&
              MediaQuery.of(context).orientation == Orientation.landscape) {
            isLargeScreen = true;
          } else {
            isLargeScreen = false;
          }

          return Row(
            children: <Widget>[
              Expanded(
                flex: 1,
                child: MyHomeScreenList(),
              ),
              isLargeScreen
                  ? Expanded(
                      flex: 2,
                      child: FutureBuilder(
                        future: DatabaseHelper.getUsers(),
                        builder:
                            (context, AsyncSnapshot<List<dynamic>> snapshot) {
                          Widget _widget;

                          if (snapshot.hasData) {
                            users = snapshot.data;
                            /*  final model =
                                Provider.of<MyModel>(context, listen: false);
                              MyModel().users = users;*/
                            _widget = DetailedView(users, 0);
                          } else if (snapshot.hasError) {
                            _widget =
                                Center(child: Text('Something went wrong'));
                          } else {
                            _widget =
                                Center(child: CircularProgressIndicator());
                          }
                          return _widget;
                        },
                      ),
                    )
                  : Container(),
            ],
          );
        },
      ),
    );
  }
}

class MyModel with ChangeNotifier {
  List<User> _users;
  List<User> get users => _users;

  set users(value) {
    _users = value;
    notifyListeners();
  }
}

home_screen_list.dart

Это генератор списка, на планшете шириной 1/3 и справа - подробное изображение.

import 'package:flut_bount/database_helper.dart';
import 'package:flut_bount/detailed_view.dart';
import 'package:flut_bount/drawer.dart';
import 'package:flut_bount/home_page.dart';
import 'package:flutter/material.dart';

class MyHomeScreenList extends StatefulWidget {
  @override
  _MyHomeScreenListState createState() => _MyHomeScreenListState();
}

class _MyHomeScreenListState extends State<MyHomeScreenList> {
  Widget _widget;
  Color _iconColor = Colors.black;
  var data;
  void _buildWidgets() {
    Widget _temp = FutureBuilder(
      future: DatabaseHelper.getUsers(),
      builder: (BuildContext context, AsyncSnapshot<List<dynamic>> snapshot) {
        Widget _widget;

        if (snapshot.hasData) {
          data = snapshot.data;

          _widget = ListView.builder(
            itemCount: data.length,
            itemBuilder: (_, int index) {
              return ListTile(
                leading: Text(data[index].id.toString()),
                title: Text(data[index].names),
                subtitle: data[index].jobtitle != null
                    ? Text(data[index].jobtitle)
                    : null,
                onTap: () {
                  isLargeScreen
                      ? pageController.animateToPage(index,
                          duration: Duration(seconds: 1), curve: Curves.easeOut)
                      : Navigator.push(
                          context,
                          MaterialPageRoute(
                              builder: (_) => DetailedView(data, index)));
                },
              );
            },
          );
        } else if (snapshot.hasError) {
          _widget = Center(child: Text('Something went wrong'));
        } else {
          _widget = Center(child: CircularProgressIndicator());
        }
        return _widget;
      },
    );

    setState(() => _widget = _temp);
  }

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

  void initDb() async {
    await DatabaseHelper.initDatabase();

    _buildWidgets();
    String name = DatabaseHelper.getTable();
    print('table Name :$name');
    Color _temp = (name == 'Datas_hu') ? Colors.black : Colors.white;
    setState(() {
      _iconColor = _temp;
    });
  }

  changeTableName() async {
    await DatabaseHelper.changeTable();
    String name = DatabaseHelper.getTable();
    print('table Name is :$name');
    Color _temp = (name == 'Datas_hu') ? Colors.black : Colors.white;
    setState(() {
      _iconColor = _temp;
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      drawer: MyDrawer(),
      appBar: AppBar(
        title: Text('My App'),
        actions: <Widget>[
          IconButton(
            icon: Icon(Icons.language),
            color: _iconColor,
            onPressed: () {
              setState(
                  () => _widget = Center(child: CircularProgressIndicator()));
              Future.delayed(Duration(seconds: 1), () {
                //          _buildWidgets();
              });
              changeTableName();
              _buildWidgets();
            },
          )
        ],
      ),
      body: Container(
        child: _widget,
      ),
    );
  }
}

detail_view.dart Здесь создается просмотр страницы, и вы хотели бы изменить язык, если щелкнул значок действия панели приложения listview

import 'package:flut_bount/home_page.dart';
import 'package:flutter/material.dart';
import 'package:flut_bount/user.dart';
import 'package:flutter_html/flutter_html.dart';

class DetailedView extends StatefulWidget {
  final List<User> user;
  final int index;
  DetailedView(this.user, this.index);
  @override
  DetailedViewState createState() => DetailedViewState();
}

class DetailedViewState extends State<DetailedView>
    with WidgetsBindingObserver {
  int activePageIndex;

  @override
  void initState() {
    super.initState();
    pageController = PageController(initialPage: widget.index);
    setState(() => activePageIndex = widget.index);
  }

  @override
  Widget build(BuildContext context) => Scaffold(
        // drawer: MyDrawer(),
        appBar: AppBar(
          title: Text('My App'),
          actions: <Widget>[
            IconButton(
              onPressed: () {
                if (widget.user[activePageIndex].favourite == 0 ||
                    widget.user[activePageIndex].favourite == null) {
                  setState(() => widget.user[activePageIndex].favourite = 1);
                } else {
                  setState(() => widget.user[activePageIndex].favourite = 0);
                }
              },
              icon: Icon(Icons.star),
              color: widget.user[activePageIndex].favourite == 1
                  ? Colors.yellow
                  : Colors.white,
            )
          ],
        ),
        body: PageView.builder(
          controller: pageController,
          itemCount: widget.user.length,
          itemBuilder: (_, int index) =>
              DetaildViewPage(user: widget.user[index]),
          onPageChanged: (pageIndex) {
            setState(() => activePageIndex = pageIndex);
          },
        ),
      );
}

class DetaildViewPage extends StatefulWidget {
  final User user;

  const DetaildViewPage({Key key, this.user}) : super(key: key);
  @override
  _DetaildViewPageState createState() => _DetaildViewPageState();
}

class _DetaildViewPageState extends State<DetaildViewPage> {
  @override
  void initState() {
    // TODO: implement initState
    super.initState();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Container(
        child: ListView(
          children: <Widget>[
            Html(
              data: widget.user.description,
            ),
          ],
        ),
      ),
    );
  }
}

0 ответов

Другие вопросы по тегам